{
"$schema": "https://cmn.dev/schemas/v1/spore-core.json",
"id": "agent-first-data",
"name": "Agent-First Data",
"version": "0.27.0",
"domain": "agentfirstkit.com",
"key": "ed25519.BwbSzqdDYyMN1pPW5snRk3afrJAovHn8aueMvDpfNKVw",
"synopsis": "A naming convention that lets AI agents understand your data without being told what it means, plus a CLI and library for reading and safely editing structured JSON, TOML, YAML, dotenv, and INI documents.",
"intent": [
"Encode all semantic information in the field name itself so agents parse structured data without external schemas, documentation, or type systems — _ms/_s/_epoch_ms for time, _msats/_sats/_usd_cents for currency, _bytes for size, _secret for auto-redaction",
"Define a JSONL output protocol where every line carries a kind discriminator (result, error, progress, or log), a payload field named after that kind, and a trace object for execution context (duration, token counts, cost, data source) — same structure whether the transport is CLI stdout, HTTP response body, MCP tool result, or SSE stream",
"Provide three output formats via --output json|yaml|plain: JSON is the canonical lossless format, YAML preserves structure with quoted strings and --- separators, plain applies suffix-driven human formatting (epoch_ms → RFC 3339, _bytes → human-readable, _secret → ***, _ms ≥ 1000 → seconds)"
],
"license": "MIT",
"mutations": [
"Replace help-v1 with a closed-world CLI compiler: one cli-spec-v1 registry is the single source for argv parsing, typed values, legal argument combinations, output contracts, help, and the offline reference, and an invocation runs only when it matches exactly one registered shape",
"Answer help in one round trip — --help returns every shape of a command complete with its optional arguments and closed value sets, and the second level --help-combination is gone because all it could omit is what a caller would then never discover",
"Name CLI failures in error.code like every other error: eight cli_* codes replace the generic cli_error and its parallel rule, command_path, and argument_names fields",
"Make redaction path-aware and policy-consistent: a _secret name marks its whole subtree, a URL fragment goes through the same redactor as the query, plain rendering keeps the suffix until the value is masked, and a boolean flag that merely names a secret is no longer marked sensitive",
"Hold the three README promises to their flagship cases: lint reports an unlabelled field as a missing_suffix warning, INI and dotenv edits can no longer save a file that stops parsing, and protocol-v1.schema.json is validated against the implementation event by event",
"Make Document::unset idempotent at any path depth: a missing ancestor means the leaf is absent too, so it answers false instead of erroring, while a path no document could satisfy still errors",
"Render the offline --docs reference from the registry without tool-specific text, so a consumer's generated CLI reference no longer cites files only agent-first-data ships"
],
"bonds": [],
"tree": {
"algorithm": "blob_tree_blake3_nfc",
"exclude_names": [
".git",
".cmn"
],
"follow_rules": [
".gitignore"
]
}
}