Low Assurance
What tool and model touched this code?
Low Assurance is the entry point to VIBES. It records the AI tool name, version, model name, and model version for every AI-generated line or function — the minimum viable audit trail for transparency and provenance tracking.
Storage overhead: ~200 bytes per annotation
Low Assurance records the identity of the AI toolchain — enough to answer "which AI model and tool generated this function?" for every annotated line of code.
tool_name — name of the AI coding tool (e.g., "Claude Code", "Cursor", "Copilot") requiredtool_version — semantic version of the tool (e.g., "1.5.2") requiredmodel_name — name of the AI model (e.g., "claude-opus-4-5", "gpt-4o") requiredmodel_version — model version or checkpoint identifier (e.g., "20251101") requiredmodel_parameters — key parameters affecting output: temperature, max_tokens, etc. optionaltool_extensions — active plugins, MCP servers, or extensions optionalcommand_text — the full command or tool invocation text requiredcommand_type — one of: shell, file_write, file_read, file_delete, api_call, tool_use, other requiredcommand_exit_code — exit code for shell commands optionalcommand_output_summary — truncated or summarized output (max 1024 bytes recommended) optionalworking_directory — relative path from project root optionalline_start, line_end) linked to an environment hashcreate, modify, delete, review, rebase_remap, or rebase_orphancommit_hash linking every annotation to git historyanchor_context — first 3 lines of the annotated range (max 256 bytes); enables re-matching after line shifts from rebase/squash optionalanchor_hash — SHA-256 of the annotated content at annotation time; detects exact-match drift optionalfile_content_hash — SHA-256 of the entire file at annotation time; if unchanged, line numbers are still valid — no anchor search needed optionalrisk_score — PRISM score (0.0–1.0); quantifies risk profile of the AI-generated change. See PRISM extension optionalrisk_factors — array of signal assessments: [{signal, value, weight, reason?}]; provides transparency into scoring optionalFor the full PRISM framework (Provenance & Risk Intelligence Scoring Model), see the PRISM extension. PRISM is a standalone extension on top of VIBES.
Session records track the lifecycle of AI coding sessions. In addition to the core fields shown above, session records support optional fields for multi-agent hierarchies:
parent_session_id — UUID of the parent session, if this is a delegated sub-session optionalagent_name — human-readable name of the agent (e.g., "code-reviewer", "test-runner") optionalagent_type — type classification of the agent (e.g., "primary", "delegate", "reviewer") optionalEdge tracking is mandatory at all assurance levels. Edge records capture directed causal and dependency relationships between audit events, enabling graph-based provenance queries.
edge_type — relationship type: caused_by, depends_on, informed_by, delegated_to, supersedes, reviewed_by requiredsource_ref — annotation ID or context hash of the source node requiredtarget_ref — annotation ID or context hash of the target node requiredsource_type — type of the source: annotation, context, or session requiredtarget_type — type of the target: annotation, context, or session requiredDelegation records capture multi-agent orchestration metadata when a parent session spawns sub-sessions for task delegation.
parent_session_id — UUID of the parent (delegating) session requiredchild_session_id — UUID of the child (delegated) session requiredtask_description — human-readable description of the delegated task optionaldelegated_files — array of file paths relevant to the delegated task optionaldelegation_type — one of: task, review, test, refactor, other requiredFor agent governance and learning built on delegation data, see EVOLVE.
line_start and line_end are best-effort temporal references, accurate relative to the recorded commit_hash. They may drift after rebases. Include anchor fields (anchor_context, anchor_hash, file_content_hash) to enable re-matching after line shifts.
Even basic tool and model identification unlocks capabilities that are impossible without structured audit data. Low Assurance is the foundation that all higher levels build on.
Contributors and users know exactly which AI tools were involved in a project. A contributor can see that validate_signup() was generated by Claude Code using claude-opus-4-5. Users can assess AI involvement before depending on a library.
When a model is found to be compromised, biased, or producing systematically vulnerable code, organizations can immediately identify all code it generated. Without Low Assurance, this is a manual, error-prone audit across the entire codebase.
For organizations beginning AI governance, Low Assurance provides the minimum viable audit trail. It answers the fundamental question procurement teams and compliance officers ask: "Do we know which parts of our code were written by AI?"
Low Assurance data backs shields.io-style badges showing AI-generated percentage. The vibecheck CLI validates that badge claims match actual audit data — moving from self-reported claims to verifiable facts.
SBOMs tell you what dependencies your software uses. Low Assurance tells you what AI tools built it. Together, they provide full supply chain transparency — from the libraries you import to the models that wrote your code.
Here is what Low Assurance data looks like in practice. All context is stored once in the manifest and referenced by SHA-256 hash from annotations.
Stored in manifest.json — records the AI toolchain identity.
Stored in manifest.json — records tool invocations and shell commands.
Stored in annotations.jsonl — one line per annotation, referencing the environment hash.
Low Assurance is designed for teams and projects that want AI transparency without overhead. If you're unsure where to start, start here.
If you need to know what the AI was asked (prompt text, context files), upgrade to Medium Assurance. If you need to know how the AI reasoned (chain-of-thought traces), upgrade to High Assurance.
Beyond source code: While the examples here focus on software development, the Low Assurance data model applies to any AI-driven workflow. The same environment and annotation records can track AI involvement in content generation, data processing, or agent-executed tasks.
A basic Low Assurance implementation takes approximately 200 lines of code. Here's how tools emit this data at each hook point.
Compute the environment context hash from tool name, version, model name, and version. If the hash doesn't exist in manifest.json, add it. Append a "session" / "start" record to annotations.jsonl with the environment hash.
After the AI model returns generated code, append line annotation records to annotations.jsonl. Each record includes the file path, line range, environment hash, action type (create, modify, delete), and timestamp.
When the AI executes a shell command, file operation, or API call, compute a command context hash and add it to manifest.json if new. Include the command_hash in associated annotation records.
When spawning a sub-agent, append a delegation record to annotations.jsonl and start a child session with parent_session_id set to the current session's ID. This preserves the multi-agent provenance chain.
When changes are committed to git, backfill the commit_hash field on all annotation records created since the last commit. This field is required — every annotation must be linked to its git commit, enabling queries like "what AI tool generated code in commit abc123?"
If git history is rewritten (rebase, squash, amend), scan annotations whose commit_hash matches rewritten commits. Use file_content_hash fast-path — if the file is unchanged, skip. Otherwise, search for anchor_context in the rewritten file. Emit rebase_remap with updated line numbers or rebase_orphan if the anchor is not found. Add a supersedes edge linking the new annotation to the original.
Append a "session" / "end" record to annotations.jsonl with the session ID and timestamp. This closes the session lifecycle and enables session-duration analysis.
Edge record emission: Edge records MUST be emitted after code generation (caused_by) to capture causal links between prompts and generated code. Edge records SHOULD be emitted after file reads (informed_by) to capture what context informed the AI's output.
For detailed implementation guidance including hash computation, file format specs, and concurrency handling, see the Implementors Guide or the full RFC specification.
Back to the VIBES Standard overview →
Low assurance is the foundation for VERIFY attestation and PRISM risk scoring.