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.
Command reference
Generated from vulkro help aggregate on vulkro 0.26.0. This block is the
authoritative flag, usage, and exit-code reference for this command; the
prose above is the friendly explanation. Do not edit this block by hand;
run npm run docs:cli after a release.
[Pro] Link scan exports from several repositories to spot data flows that cross repo boundaries.
Link evidence-graph exports from several repositories to surface candidate cross-repo flows for an AI agent to investigate.
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 `CrossRepoLink`. Vulkro embeds no model; the surfaced links are ground truth an external AI agent then reasons about. See `docs/ai-tool/` for the schema and workflow.
Exit codes: `0` no cross-repo links found, `1` one or more candidate links reported, `2` arg error, unreadable file, or bad JSON.
Usage: vulkro aggregate [OPTIONS] <GRAPH_JSON>...
Arguments:
<GRAPH_JSON>...
Two or more evidence-graph JSON files, one per repository
Options:
-f, --format <FORMAT>
Output format: `json` (the full aggregate document, default) or `table` (a human-readable summary of the candidate links)
Possible values:
- json: The full `evidence-aggregate/1.0` JSON document (default)
- table: Human-readable summary of the candidate cross-repo links
[default: json]
--offline
Hard-disable every outbound network call for this run (sets VULKRO_OFFLINE=1). Blocks the CVE feed, the license heartbeat, the update check, webhooks, and any cloud AI endpoint; a loopback model (http://127.0.0.1, http://localhost) is still allowed. Equivalent to exporting VULKRO_OFFLINE=1, and the flag wins when both are set
-h, --help
Print help (see a summary with '-h')