Skip to main content

omnitrail attestor

Captures a content-addressed trail of every file and directory under the working directory, with POSIX metadata, suitable for cross-tool provenance correlation.

Nameomnitrail
Predicate typehttps://aflock.ai/attestations/omnitrail/v0.1
Lifecycleprematerial
Default binary?No
Recommended traceoff — no syscall tracing needed
Auto-attaches whenNot auto-detected — attach explicitly with -a.

The facts in this box are generated from the CI/lock binary's own catalog (cilock tools list). Do not hand-edit — run npm run gen:catalog.

What it captures​

The attestor wraps the upstream omnitrail-go factory, which walks ctx.WorkingDir() and produces a single Envelope with three default plugins active: file, directory, and POSIX.

The attestor struct itself has exactly one json-tagged field:

FieldTypeDescription
Envelope*omnitrail.EnvelopeTrail envelope — header + per-path mapping

Envelope.Header.Features records which hash algorithms were enabled (SHA1 is on by default). Envelope.Mapping is a map[string]*Element keyed by path. Each Element records:

  • type — file or directory
  • sha1, sha256 — content hashes (when the corresponding algorithm is enabled)
  • gitoid:sha1, gitoid:sha256 — OmniBOR artifact dependency graph identifiers
  • posix — atime, ctime, mtime, creation_time, file_inode, file_device_id, file_system_id, file_type, file_flags, hard_link_count, owner_uid, owner_gid, permissions, size, extended_attributes, metadata_ctime

Note: Despite the name, omnitrail does not auto-detect toolchains (go, cargo, node, pip, gcc, etc.). It is a filesystem trail, not a tool inventory. For toolchain provenance, layer in command-run or language-specific attestors.

When to use​

Use omnitrail when downstream verifiers need a stable, content-addressed reference for every input file in the workspace — particularly for OmniBOR/ADG-based correlation across pipeline stages or between independent reproducible builds. Because it runs in the prematerial phase, it sees the workspace before any user command mutates it.

Flags​

None. The attestor exposes no CLI flags; the upstream library is constructed with defaults (SHA1 enabled, no allow-list, all three plugins active).

Output shape​

{
"Envelope": {
"header": {
"features": {
"sha1": { "algorithms": ["sha1"] }
}
},
"mapping": {
"src/main.go": {
"type": "file",
"sha1": "…",
"gitoid:sha1": "gitoid:blob:sha1:…",
"posix": {
"mtime": "2026-05-21T12:00:00Z",
"owner_uid": "501",
"permissions": "0644",
"size": "4096"
}
},
"src": {
"type": "directory",
"sha1": "…",
"gitoid:sha1": "gitoid:tree:sha1:…"
}
}
}
}

Gotchas​

  • Windows exclusion. omnitrail.go carries //go:build !windows. Custom binaries built for Windows via cilock build silently omit this attestor; policies that require it will fail on Windows runners.
  • POSIX plugin is Unix-only. Upstream posix_plugin_unix.go is gated on Unix; even on macOS/Linux the POSIX fields depend on filesystem support for the relevant syscalls.
  • No allow-list wiring. The upstream SetAllowList hook exists but the cilock adapter never calls it — every file under the working directory is walked. Large workspaces produce large envelopes.
  • No tool detection. This attestor records files, not toolchain binaries. Documentation that claims otherwise (including any prior version of this page) was wrong.
  • SHA256 off by default. NewTrail() enables SHA1 unless an option flips SHA256 on; the cilock adapter passes no options.

CLI example​

Real omnitrail SBOM emission tied to a real material set.

cilock run --step omnitrail-emit \
--signer-file-key-path key.pem --outfile attestation.json --workingdir . \
--attestations omnitrail \
-- echo "captured omnitrail bom"

Validated against a real material set. See the full real-data example at https://github.com/aflock-ai/attestor-compliance-examples/tree/main/12-omnitrail.

See also​


This page is generated from the CI/lock tool catalog. Don't edit it here — the source is attestation/detection/docs/omnitrail.doc.md in aflock-ai/rookery. The same catalog powers cilock tools show omnitrail in the CLI, so a single edit keeps the terminal and the website in sync.

Edit this page →  ·  Add a new tool →

When you open the pull request: if you are an AI agent, add the ai-agent label. If you are a human, add the human label.