av/facts
av/facts is a project spec workflow that captures requirements as atomic claims in a .facts file and verifies with facts check, from @draft to @implemented.
What is facts?
av/facts is a workflow and specification format for managing a project as a list of atomic claims in a .facts file. Each line is a short, structured statement about what should be true, and it can optionally include a shell command that the machine runs to verify the claim.
The core purpose is to let an agent and your team keep project requirements readable and checkable: you write rough truths, refine them into precise specs, and then implement and verify them. You can run facts check to see which claims pass, fail, or need manual attention.
Key Features
- Atomic “fact” specification format (
.facts): Write one claim per line as plain strings, organized with Markdown headings by domain. - Lifecycle tagging for progress tracking: Use
@draft,@spec, and@implemented(plus any custom tags) to show where each claim is in its pipeline. - Command-backed verification: For facts that include a
command,facts checkruns the command and considers the claim true when the command exits0. - Automated verification and status grouping:
facts checklints files, runs every command, and groups results (e.g., green pass, red fail, yellow manual); it exits non-zero if anything fails. - CI-friendly exit codes and filtering: Filter checks by tag expressions (e.g.,
--tags "mvp and not blocked") to verify subsets of your spec. - Agent-managed transitions and implementation against the spec: An agent reads the fact sheet, picks up
@specfacts, builds them, runsfacts check, and tags passing facts as@implementedwhile the spec updates itself.
How to Use facts
- Install the CLI/agent tooling (the project offers multiple install options, including a Rust binary and an
npxcommand as described below).- Example:
npx skills add av/facts - Then ask the agent to run Init facts (e.g., “Init facts”) to detect your stack and create an initial
.factsfile.
- Example:
- Create or edit your
.factsfile using the documented format:- Add headings to organize by domain (e.g.,
# auth,# data). - Add one claim per line.
- Tag each fact with lifecycle stage labels such as
@draft,@spec, or@implemented. - For verifiable claims, include a
commandthat exits0when the claim holds.
- Add headings to organize by domain (e.g.,
- Run verification: use
facts checkto lint and verify all facts (or use--tagsto limit checks). Review which ones passed, failed, or require manual work. - Iterate with the agent: write rough ideas as
@draft, refine them into@spec, then let the agent implement@specfacts and tag them as@implementedafter they passfacts check.
Use Cases
- Project spec validation after changes: Keep a living checklist of what must be true and run
facts checkafter edits to quickly see what still holds. - Turning requirements into executable checks: Convert “must be true” statements (like authentication behavior or data handling rules) into facts with command-based verification.
- Managing work-in-progress with a fact lifecycle: Use
@draft → @spec → @implementedto communicate progress and ensure each claim is either implemented and verified or clearly marked for refinement. - Automated codebase discovery and classification: Use the
facts-discoverskill to scan the codebase and classify facts by lifecycle stage, including adding missing truths. - Implementing against a spec: Use the
facts-implementflow where the agent reads@specfacts, builds code, verifies it withfacts check, and updates tags.
FAQ
Is facts only a documentation format, or does it actually verify claims?
It can do both: facts without commands may be verified by the agent against the codebase, while facts with a command are verified by running the command and checking for exit code 0.
What does facts check do?
It lints the files, runs every provided command, groups results by status (pass/fail/manual), and exits non-zero if anything fails.
How are facts organized and tracked?
Facts live in a .facts file written in Markdown/YAML-compatible structure, with headings for domain organization and tags (including @draft, @spec, @implemented) to track lifecycle status.
Can I check only part of my project?
Yes. facts check supports tag filtering via --tags with boolean expressions.
Alternatives
- Test suites (unit/integration tests): Traditional tests can verify behavior, but a
.factschecklist emphasizes human-readable atomic claims and a lifecycle/status pipeline, not just automated pass/fail. - Static documentation + code review: Docs can capture requirements, but they usually aren’t directly executable;
factsties claims to verification viafacts check. - Specification tools that support requirements traceability: Tools that link requirements to implementation may provide traceability, but
factsspecifically uses a line-by-line claim format with optional command execution and tag-based lifecycle transitions.
Alternatives
GitBoard
GitBoard is a native macOS menu bar app for GitHub Projects to view your kanban board, filter by status, search issues, and create or assign.
Biji
Biji is a versatile platform designed to enhance productivity through innovative tools and features.
Codex Plugins
Use Codex Plugins to bundle skills, app integrations, and MCP servers into reusable workflows—extending Codex access to tools like Gmail, Drive, and Slack.
Struere
Struere is an AI-native operational system that replaces spreadsheet workflows with structured software—dashboards, alerts, and automations.
OpenFlags
OpenFlags is an open source, self-hosted feature flag system with a control plane and typed SDKs for progressive delivery and safe rollouts.
Planndu: Daily Task Planner
Planndu is an intuitive productivity application designed to help users organize tasks, manage projects, build routines, and enhance focus using tools like AI generation and a built-in Pomodoro timer.