--depth. trace is its own surface for following how a symbol connects through the codebase before you change it.
--path answers a different question from the symbol target: which chain of imports carries one module to another. See Import path between two modules.
fallow trace is a standalone, best-effort symbol-level surface. It is not folded into the ranked review brief and is never an input to the focus map or its ranking. Use it when you want to see how a symbol connects, not when you want a prioritized review.Target
fallow trace takes one positional argument in FILE:SYMBOL form:
FILE is a project-relative path and SYMBOL is the exported symbol name. Omit it when you pass --path, which takes two file paths instead.
Options
When neither
--callers nor --callees is set, both directions are walked. trace also accepts the project, output, and performance global flags (--root, --config, --format with human or json, --quiet, --no-cache, --threads, --changed-since).
How it works
The walk is best-effort and syntactic. Resolved and unresolved callees are reported honestly: an unresolved callee (for example, a dynamic call fallow cannot statically resolve) is surfaced as unresolved rather than silently dropped, so the chain reflects what fallow could and could not follow. When the same export is referenced in both type and value space, JSON output addsdirect_references_by_namespace with separate evidence for each lane. namespace and direct_references keep their existing winning-lane meaning for compatibility. The grouped field is omitted when only one lane has references, so consumers should treat its absence as the common single-namespace case.
Ambiguous star exports
When twoexport * sources contribute the requested name, the barrel exports
nothing under that name. JSON output reports symbol_found: false and adds a
star_export_ambiguity object:
sources contains the sorted project-relative declaration origins.
namespaces identifies whether the collision is in type space, value space,
or both, with type before value. This field distinguishes a barrel
collision from an unknown or misspelled symbol. Keep one origin, rename the
others, or replace the star exports with explicit re-exports.
The same best-effort call-chain data is available as opt-in evidence on fallow inspect --symbol-chain and the inspect_target MCP tool’s symbol_chain option.
Import path between two modules
fallow trace --path <FROM> <TO> reports the shortest chain of imports by which FROM reaches TO. Both are project-relative file paths. Use it when you want to know how a module ends up depending on another one, rather than how a symbol is called.
Exact project-relative or absolute paths take priority over suffix matches. An abbreviation is accepted only when it identifies one module. A missing or ambiguous endpoint exits with code 2; use the full project-relative path to disambiguate.
$ fallow trace --path pages/report.tsx components/Box.tsx
kind: "trace" with its own schema_version:
$ fallow trace --path pages/report.tsx components/Box.tsx --format json
type_only: true rather than skipped, so a path that exists only in type space is visible instead of silently absent. An unreachable pair is a result, not an error: reachable is false, path is empty, hops is 0, and reason says no import path was found. The command still exits 0. And tracing a module to itself answers reachable: true with hops: 0, so branch on reachable rather than on the hop count, which is 0 in both cases.
See also
Inspect a target
Compose one evidence bundle for a file or exported symbol, with opt-in
--symbol-chain.Audit and review brief
Changed-file verdict plus the graph-derived review brief and decision surface.
Resolve a stack trace
Map runtime stack-trace frames back to the definitions they name.
MCP integration
Use fallow tools from AI coding agents.