ATHENA is an agent-agnostic delivery framework for PRD-driven, traceable software execution.
ATHENA creates a complete audit trail from customer request to shipped code:
- Captures customer requests verbatim in
docs/requests.md(CR-... IDs) - Documents design decisions in
docs/decisions.md(D-... IDs) - Maintains a living PRD in
docs/PRD.mdwith full traceability - Specs features in
docs/specs/<FEATURE_ID>/spec.mdwith functional requirements (FR-...) - Lists tasks in
docs/specs/<FEATURE_ID>/tasks.mdlinked to requirements (Implements: FR-...) - Tracks execution in
docs/progress.txtwith validation evidence - Creates traceable Git commits referencing CR/D/FEATURE_ID/T-... IDs
- Enables auditing via
docs/TRACEABILITY.mdto follow any request through to code
Choose the path that matches your environment:
| Environment | What to install | Stop after |
|---|---|---|
| Codex | Install the packaged athena skill |
Step 1 |
| Claude Code | Install the packaged athena skill, then install Owl of Athena for archive management |
Step 2 |
The ATHENA skill is the core loop. Owl of Athena is optional for Codex and only has a full documented setup flow for Claude Code in this README.
python3 "$CODEX_HOME/skills/.system/skill-installer/scripts/install-skill-from-github.py" \
--repo taylorparsons/athena-skill \
--path skills/athena \
--name athenaThis installs only the packaged skills/athena target and avoids copying the whole repository.
After install:
- Restart Codex so it can discover the new skill.
- Verify
$CODEX_HOME/skills/athena/SKILL.mdexists. - Codex users can stop here unless they are intentionally setting up additional Owl tooling in a project by hand.
In an active Claude Code session, paste this prompt:
Install the athena skill from https://github.com/taylorparsons/athena-skill — copy the entire skills/athena/ directory into ~/.claude/skills/athena/
Claude will write ~/.claude/skills/athena/ including SKILL.md, templates/, scripts/, and core/.
After install:
- Verify
~/.claude/skills/athena/SKILL.mdexists. - Or run
/skillsin Claude Code and confirmathenais listed.
Skip this entire step if you use Codex and only want the ATHENA skill.
Owl requires three things: the agent file, the global hooks, and the git hooks on each project.
From a full athena-skill repository checkout, run:
mkdir -p ~/.claude/agents
cp .claude/agents/owl-of-athena.md ~/.claude/agents/owl-of-athena.mdThis makes Owl available as a sub-agent in every Claude Code session.
Open ~/.claude/settings.json and merge in the hooks block below. If you already have a hooks key, add SessionStart and Stop into the existing object — do not replace the whole file.
{
"hooks": {
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "cd \"$(git rev-parse --show-toplevel)\" && ./scripts/owl prune-done | jq -r '.message // .' && ./scripts/owl update-index | jq -r '.message // .' && ./scripts/owl write-memory | jq -r '.message // .'; true"
}
]
}
],
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "cd \"$(git rev-parse --show-toplevel)\" && ./scripts/owl prune-done | jq -r '.message // .' && ./scripts/owl update-index | jq -r '.message // .'; true"
}
]
}
]
}
}Both hooks are conditional — they check for scripts/owl before running and are safe to install globally. They only activate in repos where Owl is present.
scripts/owl requirement: Each ATHENA project must have a scripts/owl script. This script handles:
prune-done— removes closed feature sessions fromprogress.txtupdate-index— regeneratesathena-index.mdfrom current spec statuswrite-memory— extracts active docs (decisions, requests, progress) into memory files for single-session read
The wrapper is runtime-agnostic — it detects owl.py in this priority order:
scripts/owl.pyin the project (Codex pattern — bundled locally)~/.claude/skills/athena/scripts/owl.py(Claude Code installed skill)$CODEX_HOME/skills/athena/scripts/owl.py(Codex installed skill)- Bash fallback (
write-memoryonly)
The installer is root repo setup tooling, not packaged skill runtime. It requires access to a full athena-skill checkout where root scripts/install-owl.sh exists. When setting up another project, run that checkout's script from the target ATHENA project root.
Install it in a target ATHENA project from that project's root:
bash /path/to/athena-skill/scripts/install-owl.shAlready installed? If you set up Owl before April 2026, your
SessionStarthook may use the oldtype: "agent"format which is not supported and will cause a hook error on session start. Run the patch script to fix it:python3 scripts/patch-claude-settings.py
What each hook does:
| Hook | When | What |
|---|---|---|
SessionStart |
Project opens | Shell command runs prune-done + update-index + write-memory before Athena loads |
Stop |
Session ends | Same cleanup as a belt-and-suspenders pass |
If you have a ~/.claude/CLAUDE.md with an Available Skills section, add the following entry after the athena entry. This scopes Owl to mid-session dispatches — the SessionStart hook handles the pre-session run automatically.
### owl-of-athena
**Path:** `.claude/agents/owl-of-athena.md` (sub-agent, dispatched via Agent tool)
**Trigger:** Dispatch mid-session when: a feature is fully done (archive it), the user asks about archived features, or athena-index.md appears stale. Never load archived specs directly — use Owl. Note: `prune-done`, `update-index`, and `write-memory` run automatically via the `SessionStart` shell hook before Athena loads — do not dispatch Owl for these at session start.Already installed? The patch script handles both
settings.jsonandCLAUDE.mdin one pass:python3 scripts/patch-claude-settings.py
Run this once per project, from the project root:
./scripts/install-hooks.shThis installs:
pre-commit— blocks commits ifathena-index.mdis out of sync withdocs/specs/post-commit— regeneratesathena-index.mdwhen a commit signals feature completion
If your project already has ATHENA docs but no athena-index.md, you have two options:
Fast path — paste this prompt into Claude Code:
Bootstrap Owl of Athena in this project. Run ./scripts/owl update-index to generate docs/athena-index.md, run ./scripts/install-hooks.sh to install git hooks, run ./scripts/owl prune-done to clean progress.txt, then commit the results.
Manual path:
python3 scripts/owl.py update-index
git add docs/athena-index.md && git commit -m "feat: add athena-index.md for Owl of Athena"New projects get athena-index.md automatically when Claude scaffolds the docs structure.
To set up the full ATHENA docs structure in an existing project (docs/requests.md, docs/decisions.md, docs/PRD.md, docs/specs/, docs/athena-index.md, etc.), open Claude Code in that project and paste:
Setup ATHENA docs in this project from https://github.com/taylorparsons/athena-skill
Claude will create the full scaffold including athena-index.md. Then run ./scripts/install-hooks.sh to activate the git hooks.
Owl is a Claude Code sub-agent that runs alongside ATHENA sessions. It handles archive operations and keeps progress.txt lean — so the main agent spends tokens on active work, not history.
What Owl does:
- Serves as the archive interface: search, retrieve, and summarize closed features on demand
- Runs
prune-doneat session end to remove fully-closed feature sessions fromprogress.txt - Regenerates
athena-index.mdso the main agent loads only active specs at startup
Token impact (measured on this project using cl100k_base tokenizer, 19 features):
| File | Tokens | Loaded with Owl? |
|---|---|---|
docs/decisions.md |
7,250 | Yes |
docs/PRD.md |
7,002 | Yes |
All 19 spec.md files |
9,015 | No — replaced by athena-index.md |
docs/progress.txt |
4,412 | Yes (shrinks as features close) |
docs/requests.md |
3,807 | Yes |
docs/athena-index.md |
1,601 | Yes |
docs/TRACEABILITY.md |
180 | Yes |
| Total without Owl | 31,666 | |
| Total with Owl | 24,252 | |
| Savings | 7,414 (23%) |
The spec savings are real and grow with the project — every additional closed feature adds ~470 tokens to the spec load that Owl skips. The larger opportunity is decisions.md and progress.txt, which grow unboundedly without pruning. prune-done targets progress.txt at session end; decisions.md and PRD.md are append-only by design.
sequenceDiagram
participant U as User
participant M as Main Agent (Sonnet)
participant I as athena-index.md
participant O as Owl Agent (Haiku)
participant S as scripts/owl.py
U->>M: Start session
M->>I: Load athena-index.md (1,601 tokens)
I-->>M: 0 active features, 19 archived — skip 9,015 tokens of specs
Note over M: 24,252 tokens vs 31,666 without Owl (23% reduction)
U->>M: "What did we build for LinkedIn?"
M->>O: dispatch("Search archived features for 'linkedin'")
O->>S: ./scripts/owl search "linkedin"
S-->>O: 2 matches found
O-->>M: linkedin-personal-style, linkedin-post-variants
M-->>U: Summary (no full spec loaded)
U->>M: Feature 20260413-index-optimization is done
M->>O: dispatch("Archive feature 20260413-index-optimization")
O->>S: ./scripts/owl archive 20260413-index-optimization
S-->>O: Moved to archived in athena-index.md
O-->>M: Done
U->>M: End session
Note over M: Claude Code Stop hook fires automatically
M->>S: ./scripts/owl prune-done
S-->>M: Closed feature sessions removed from progress.txt
M->>S: ./scripts/owl update-index
S-->>M: athena-index.md regenerated from current spec status
The main agent uses the Agent tool to delegate — it does not load archived specs directly.
| Situation | Dispatch prompt |
|---|---|
| User asks about a closed feature | "Retrieve summary for <feature-id>" |
| User searches history | "Search archived features for '<keyword>'" |
| Feature is fully done (tasks + spec + PRD) | "Archive feature <feature-id>" |
| athena-index.md is out of sync | "Run update-index" |
Owl checks all three in sequence. All must pass before any session history is pruned.
flowchart TD
A([Session ends\nStop hook fires]) --> B[prune-done]
B --> C{For each feature\nreferenced in progress.txt}
C --> D{"tasks.md\nNo items under NEXT\nor IN PROGRESS?"}
D -- No --> K([Keep in progress.txt])
D -- Yes --> E{"spec.md\nStatus: Done?"}
E -- No --> K
E -- Yes --> F{"PRD.md\nFeature marked shipped?"}
F -- No --> K
F -- Yes --> G([Remove all session blocks\nfor this feature])
G --> H[update-index\nRegenerates athena-index.md\nfrom tasks.md status]
Why three checks: tasks.md is ground truth for task completion. spec.md confirms the feature was formally closed. PRD.md confirms the requirement was shipped — not just done in isolation. All three must agree before history is pruned.
progress.txt accumulates normally across sessions for active features. Nothing about how you use it changes. Owl prunes it automatically at session end — only removing sessions for features that are fully closed across all three files.
| State | progress.txt behavior |
|---|---|
| Feature active | Accumulates across sessions as normal |
| Feature done in tasks.md only | Kept — spec and PRD not reconciled yet |
| Feature done in all three | Removed at next session end |
| Pruned history | Not archived — it lives in tasks.md (DONE section) |
If your project was already using ATHENA before this update, follow these steps once after pulling the changes. These instructions apply to the feature/index-based-archival branch and later.
flowchart LR
A([Existing project\nno athena-index.md]) --> B[Pull branch /\nupdate SKILL.md]
B --> B2["Run install-owl.sh\nto install delegation wrapper"]
B2 --> C["Run:\n./scripts/owl update-index"]
C --> D[athena-index.md created\nfrom existing specs]
D --> E["Run:\n./scripts/install-hooks.sh"]
E --> F[Git hooks installed\npre-commit + post-commit]
F --> G["Optional:\n./scripts/owl prune-done"]
G --> H[Closed feature sessions\nremoved from progress.txt]
H --> I([Running normally\nOwl fires on session end])
Fast path — paste this into Claude Code:
Migrate this project to the current Athena version: from this project's root, run bash /path/to/athena-skill/scripts/install-owl.sh, then ./scripts/owl update-index, ./scripts/owl prune-done, and commit the results.
Manual path:
- Pull this branch or merge to your main branch.
- From the project root, run
bash /path/to/athena-skill/scripts/install-owl.shusing a fullathena-skillcheckout. This installsscripts/owlas a delegation wrapper that routes all commands (prune-done,update-index,write-memory, etc.) to the authoritativeowl.pyin the Athena skill. If you already have ascripts/owlthat was a no-op stub, this replaces it with the real implementation. - Run
./scripts/owl update-indexonce. This reads your existingdocs/specs/and generatesdocs/athena-index.md. It checkstasks.mdfirst for status — if a feature has no items under NEXT or IN PROGRESS, it marks it Done. - Run
./scripts/install-hooks.shto install the pre-commit and post-commit hooks. - Optionally run
./scripts/owl prune-doneto immediately clean closed feature sessions fromprogress.txt. Skip this if you want to reviewprogress.txtmanually first. - Commit
scripts/owl,docs/athena-index.md, and the updatedprogress.txtto your repo.
After step 6, Owl runs automatically at session start (SessionStart hook) and at session end (Stop hook). You do not need to call it manually. If you have not yet done the global hook setup, follow Step 2 in the Installation section.
What does not change: docs/requests.md, docs/decisions.md, docs/PRD.md, and all existing spec files are untouched. The traceability audit trail is preserved exactly as-is.
New projects get Owl automatically — no migration step needed.
flowchart TD
A([New project]) --> B[Install ATHENA skill\ninto ~/.claude/skills/athena]
B --> C[Claude scaffolds\ndocs/ structure]
C --> D[docs/athena-index.md created\nempty — no features yet]
D --> E[Start first feature\nCR → spec → tasks → code]
E --> F{Feature complete?\ntasks + spec + PRD}
F -- No --> E
F -- Yes --> G[Dispatch Owl:\narchive feature]
G --> H[athena-index.md updated\nfeature marked archived]
H --> I[Next session opens\nSessionStart: Owl runs prune-done + update-index + write-memory]
I --> J([progress.txt stays lean\nthroughout project life])
Key difference from existing projects: You start with an empty athena-index.md. As you complete features, Owl archives them incrementally. progress.txt never accumulates the years of history that existing projects have — it stays bounded from day one.
Two scripts manage Athena across all projects on a machine.
Scans for every Athena project (any directory with docs/requests.md) and ensures each has the current Owl setup: scripts/owl wrapper, .claude/settings.json hooks, and .claude/agents/owl-of-athena.md.
# Dry-run: see what would change
python3 ~/.claude/skills/athena/scripts/migrate-all-projects.py --dry-run
# Apply migrations
python3 ~/.claude/skills/athena/scripts/migrate-all-projects.pyScans all projects for token-waste patterns and optionally auto-fixes safe issues.
# Report only
python3 ~/.claude/skills/athena/scripts/sweep-projects.py --dry-run
# Auto-fix safe issues (prune-done, update-index)
python3 ~/.claude/skills/athena/scripts/sweep-projects.py --fixWhat it checks:
athena-index.mdmissing or stale (> 7 days)progress.txt> 200 lines (recommendprune-done)- Done specs not yet archived in
athena-index.md - Files in
docs/> 100 KB or binary assets requests.md/decisions.md> 150 lines without an## Archivesection
Output is logged to ~/.claude/logs/athena-sweep.log. Schedule weekly via crontab:
57 1 * * 1 python3 ~/.claude/skills/athena/scripts/sweep-projects.py --fix >> ~/.claude/logs/athena-sweep.log 2>&1
skills/athena/: canonical fullathenaskill for Codex/Claude Code- Contains exactly one
SKILL.mdwith required frontmatter (name,description)
- Review the framework: Read
core/athena-framework.md(10-step ATHENA loop) - Understand the structure: Check
docs/TRACEABILITY.md(audit trail entry point) - Add your first request: Edit
docs/requests.md, add a CR-... entry with your requirement - Create a feature spec: Copy template from
templates/spec.mdtodocs/specs/<FEATURE_ID>/spec.md - Make decisions: Add to
docs/decisions.mdif you need to interpret the request - Start executing: Create
docs/specs/<FEATURE_ID>/tasks.mdfrom template and tackle one task at a time
skills/athena/: installableathenapackagecore/athena-framework.md: canonical, agent-neutral ATHENA loopadapters/: framework adapter source materialstemplates/: traceability templatesscripts/: helper automation (owl.py,install-owl.sh,install-hooks.sh,migrate-all-projects.py,sweep-projects.py,commit_with_traceability.py,bootstrap_git_audit.py,print_resume_prompt.py)VERSION: source-of-truth framework version (SemVer)docs/: this repo's own ATHENA artifacts and examples (walkthrough examples indocs/examples/)
| File | Purpose |
|---|---|
core/athena-framework.md |
Complete ATHENA methodology and 10-step loop |
docs/TRACEABILITY.md |
Entry point: navigate from request to code |
docs/requests.md |
Customer inputs (append-only log) |
docs/decisions.md |
Design decisions (append-only log) |
docs/PRD.md |
Living requirements document |
docs/specs/*/spec.md |
Feature specifications with acceptance criteria |
docs/specs/*/tasks.md |
Implementation tasks (Implements: FR-...) |
docs/progress.txt |
Active execution log — closed feature sessions pruned automatically by Owl |
docs/athena-index.md |
Lightweight feature index (~1,100 tokens) — agents load this instead of all specs |
.claude/agents/owl-of-athena.md |
Owl sub-agent definition (Claude Code) — copy to ~/.claude/agents/ |
.claude/settings.json |
SessionStart + Stop hooks — Haiku agent runs before Athena loads, shell cleanup on exit |
scripts/owl.py |
Owl operations: archive, retrieve, search, update-index, prune-done, write-memory |
scripts/install-owl.sh |
Installs scripts/owl delegation wrapper into any Athena project |
scripts/install-hooks.sh |
Installs pre-commit and post-commit git hooks |
scripts/migrate-all-projects.py |
Scans all Athena projects on this machine and migrates them to the current Owl setup |
scripts/sweep-projects.py |
Weekly token-optimization sweeper — flags large files, stale index, unarchived specs across all projects |
templates/ |
Ready-to-use templates for specs, tasks, requests, decisions, progress |
scripts/ |
Helper utilities (commit_with_traceability.py, bootstrap_git_audit.py, etc.) |
adapters/claude/ |
Claude-specific guidance (COMMANDS.md, CLAUDE_PROMPT.md) |
adapters/codex/ |
Codex skill adapter |
- Capture verbatim: Record customer requests exactly as stated before changing anything.
- Append-only logs: Never delete or edit
docs/requests.mdordocs/decisions.mdentries. - Full traceability: Link sources (CR/D) to requirements (FR) to tasks (T).
- Single focus: Only one task
IN PROGRESSat a time. - Evidence required: Every task needs test/check results.
- Git integration: Commit messages reference CR/D/FEATURE_ID/T-... IDs.
- Never auto-push: Only push to remote when explicitly requested.
Run install-target validation locally:
python3 scripts/validate_install_targets.pyThis checks:
- each declared install target exists,
- each target has exactly one
SKILL.md, - frontmatter includes required
nameanddescription.
- Version source of truth:
VERSION - Scheme: Semantic Versioning (
MAJOR.MINOR.PATCH) - Git tag format:
v<MAJOR>.<MINOR>.<PATCH>
- Examples:
docs/examples/01-cr-to-task-walkthrough.md(step-by-step example) - Claude Adapter:
adapters/claude/CLAUDE_PROMPT.mdandadapters/claude/COMMANDS.md - Codex Skill:
adapters/codex/SKILL.md(Codex skill definition)
- GitHub as source of truth (tags/releases)
- LinkedIn for launch/adoption examples
publishing/launch-checklist.md