Skip to main content
The CLI searches upward for a readable .linktrail/links.jsonl, then reads .linktrail/config.json at that root. If it finds no default ledger, it uses the current directory. Run init and mix from the intended repository root; they pin that directory explicitly. A custom ledger filename alone does not change upward root discovery.

File ownership

Paths in paths resolve relative to .linktrail/; absolute paths remain absolute. Omitted paths use these defaults. sync.lock protects check/sync/receive/compact/adopt-result writes. Ledger mutations also use a ledger lock. Receipt writes use a recoverable receipt-transaction.json journal. Preserve files and investigate an active writer before removing locks. Expired feed recovery can write snapshot-TIMESTAMP.json beside the ledger.

Environment and precedence

Saved identity aliases are accepted: cloud.workspaceId or cloud.workspace_id, and project.id, cloud.projectId or cloud.project_id. Conflicting identities fail. connect stores non-secret metadata and removes the legacy saved token. Keep credentials in the process environment.

Arguments, output and status

The main argument parser accepts --name value and --name=value. Repeated flags work only where documented. A bare flag becomes true. There is no general promise that every command rejects every unknown flag; use the listed options. There is no global --json switch: each command owns its output shape. Most commands return 0 on success and 2 on errors. Ledger check, doctor, mix and profile citation checks also use 1 for their documented result conditions. A single-page check returns 0 even when its result is absent or unknown. Read that result’s state. Use local command reference, connect, call and receive for the applicable branch.
Reference follows the current development CLI and HTTP contracts. Hosted availability depends on the selected environment. See capability status.