Skip to content

Gather context
before the move.

One unified graph across your repos, not a federation of isolated ones. Built for teams running many services as one system.
$brew install thedoublejay/tap/gather-step
what it does

One knowledge graph across every repo, surfaced to your AI assistant.

01 Unified

One graph, every repo.

Not a federation of isolated per-repo indexes. A single knowledge graph that spans the whole workspace.

02 Cross-repo

Event flows across services.

Producer to consumer, at shared virtual nodes. Your AI finally sees the edges between repos, not just inside them.

03 Right now

Derived from source, not docs.

Re-indexes incrementally on every file save. What the code looks like today, not what a README said two years ago.

Without Gather Step
Sees only the open repo
Guesses at downstream consumers
Re-explores the codebase each session
With Gather Step
Sees every repo as one system
Traces producer to consumer across services
Starts with pre-computed structural context
The moat

It maps what no other tool maps: event-driven topology.

Producer-to-consumer graphs across repos. Cross-repo edges meet at shared virtual nodes, so blast radius is a query, not a guess.

REPO service-orders @Producer REPO service-billing kafka.publish() REPO service-checkout @EventPattern VIRTUAL NODE order.created kafka topic REPO service-inventory @MessagePattern REPO service-notify @EventPattern REPO service-analytics consumer.on() REPO service-ledger @CustomEvent CONTRACT DRIFT companyId · required · missing
What actually makes it different

Six things no other codebase tool ships together.

Partial context is worse than no context. Gather Step commits to completeness: every repo, every event stream, every cross-service edge.

01 Flagship

Event-driven topology mapping

Producer-to-consumer graphs across Kafka, NATS, SQS, Redis Streams, and NestJS. No other tool, OSS or SaaS, ships this.

02 Architecture

Native polyrepo graph with virtual-node edges

A Kafka producer in repo A and a consumer in repo B share the same Topic node. Not a federation of isolated graphs, one graph.

03 Semantic

Framework-aware extraction

NestJS (@Controller, @MessagePattern, DI), Mongoose @Prop, Bull/BullMQ. It understands what decorators mean, not just that they exist.

04 Safety gate

Contract drift detection

Field-level payload comparison between producers and consumers. Catch a missing required field before it becomes an incident.

05 Git-native

Ownership, hotspots, bus-factor

Derived from commit history, not CODEOWNERS. Who actually touches this service, how often, and where concentration risk lives.

06 Delivery

Task-shaped context packs

Plan, debug, and review packs shape context to the task at hand. 8K tokens of precision, not 50K of noise.

Task-shaped, not dump-the-graph

Context packs, shaped to the step you're on.

Precision over noise. Three canonical packs cover planning, debugging, and review, each returns exactly the subgraph the task requires.

plan.pack

Plan pack

Entry points, cross-repo dependency chains, convention conformance, affected event surface.

Returns ~8K tokens · shaped for the planning step.
debug.pack

Debug pack

Hotspot history, recent co-changes, ownership, upstream producers, downstream consumers.

Returns ~8K tokens · shaped for the debugging step.
review.pack

Review pack

Blast radius for this diff, convention checks, contract drift, cross-repo impact.

Returns ~8K tokens · shaped for the review step.
How it relates to what you already use

Complementary, not competitive.

Gather Step is one thing, done completely, a unified, accurate, always-current knowledge graph of what your system actually looks like. It fits next to the tools your team already ships with.

vs. Memory tools

Memory remembers. Gather Step tracks truth.

Stores past conversations
They do · we don't
Reflects current code structure
From source, not history
Event flows across repos
Only here
Stale when the codebase changes
Re-indexes on every file save
vs. Greptile · Sourcegraph

Search answers "where?". Gather Step answers "what breaks?".

Find code by name or pattern
They do · we do
Cross-repo event topology
Not modeled
Producer → consumer tracing
Not modeled
Local-first, no data to vendor
MIT
vs. Single-repo OSS

One unified graph, not a federation.

Indexes per repository
All do
Cross-repo edges at virtual nodes
Native, day-one
CLAUDE.md for polyrepo systems
System-wide, not per-service
MIT commercial-friendly
No AGPL friction
From zero to answered questions

Install, index, ask.

No API keys. No account. No data leaves your machine.

01 · INDEX

Point it at your repos.

Gather Step parses source, routes, entities, event producers and consumers, cross-repo dependencies, and builds one graph across the whole workspace.

# from your workspace root
$ gather-step init ./services/*
02 · SERVE

Run the MCP server.

Your AI coding assistant (Claude Code, Cursor, Copilot) connects over Model Context Protocol and pulls task-shaped context packs on demand.

# starts the local MCP endpoint
$ gather-step serve --mcp
03 · SHIP

Ask what actually matters.

Every prompt arrives with structural ground truth. Blast radius. Event consumers. Ownership. Conventions. No more 30K tokens of exploratory prompting.

# a question your AI can finally answer
$ claude: what breaks if I change order.created?
Start with your architecture, not a blank prompt

Index your repos.

No API keys. No account. The graph runs entirely on your machine.

$ brew install thedoublejay/tap/gather-step