vulkro aggregate
Link evidence-graph exports from several repositories to surface candidate cross-repo flows.
Each input is a JSON document produced by
vulkro scan <repo> --format evidence-graph
(or vulkro discover <repo> --format evidence-graph). The linker is
deterministic: an outbound HTTP client call in one repo whose normalised route
shape and method match an exposed endpoint in another repo is emitted as a
candidate cross-repo link.
Vulkro embeds no model. The surfaced links are ground truth that an external AI agent then reasons about. Vulkro decides what matches; the agent decides whether a matched flow is a real risk.
Usage
vulkro aggregate <GRAPH_JSON> <GRAPH_JSON> [MORE...] [FLAGS]
Two or more evidence-graph JSON files are required (one per repository). One graph has nothing to link against.
Flags
| Flag | Description | Default |
|---|---|---|
--format, -f <FMT> | json emits the full evidence-aggregate/1.0 document. table prints a human-readable summary of the candidate links. | json |
Exit codes
| Code | Meaning |
|---|---|
0 | No cross-repo links found. |
1 | One or more candidate links reported. |
2 | Error: bad argument, unreadable file, fewer than two graphs, or bad JSON. |
How the linker matches
For every outbound call in every repo, the linker looks for endpoints in
other repos whose normalised route shape matches and whose HTTP method is
compatible (equal, or either side is ANY). Each match becomes one
CrossRepoLink carrying:
- the caller repo, call id, URL, file, and line;
- the callee repo, endpoint id, path, file, and line;
- the shared route shape and method;
- the callee endpoint's auth posture, so an agent can see at a glance whether a cross-repo caller reaches an unauthenticated surface;
- the deterministic
match_reasonsthe linker paired the two on. These are never a verdict.
The aggregate summary rolls up the repo count, the total number of
cross-repo links, and how many of those links reach an unauthenticated callee
endpoint (the ones most worth an agent's attention first).
Evidence-graph workflow
aggregate is the multi-repo half of the deterministic, AI-usable
evidence-graph workflow:
- Export one evidence graph per repo with
vulkro scan <repo> --format evidence-graph > <repo>.json. - Run
vulkro aggregate a.json b.json c.jsonto link them. - Hand the aggregate document to an AI agent as ground truth to investigate.
The same two steps are also available as MCP tools (evidence_graph and
aggregate) on
vulkro mcp serve, so an
agent already speaking MCP can pull and link graphs without shelling out.
Examples
# Export a graph per repo.
vulkro scan ../api --format evidence-graph > api.json
vulkro scan ../frontend --format evidence-graph > frontend.json
# Link them and read the summary.
vulkro aggregate api.json frontend.json --format table
# Full JSON document for an agent or a pipeline.
vulkro aggregate api.json frontend.json > cross-repo.json
Related
- Output formats:
evidence-graph- the per-repo documentaggregateconsumes. vulkro mcp serve- theevidence_graphandaggregateMCP tools that expose this workflow to an agent.