agent-environment-retr…
Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use…
Use when a user asks to audit what recall fed agents. Not for source or remote-system changes.
Claude Code
$ npx -y skills add OutlineDriven/odin-claude-plugin --skill history-health --agent claude-code
Codex
$ npx skills add OutlineDriven/odin-claude-plugin --skill history-health -a codex -y
Cursor
$ npx skills add OutlineDriven/odin-claude-plugin --skill history-health -a cursor -y
Gemini CLI
$ npx skills add OutlineDriven/odin-claude-plugin --skill history-health -a gemini-cli -y
GitHub Copilot
$ npx skills add OutlineDriven/odin-claude-plugin --skill history-health -a github-copilot -y
OpenCode
$ npx skills add OutlineDriven/odin-claude-plugin --skill history-health -a opencode -y
Windsurf
$ npx skills add OutlineDriven/odin-claude-plugin --skill history-health -a windsurf -y
name: history-health description: 'Use when a user asks to audit what recall fed agents. Not for source or remote-system changes.' disable-model-invocation: true
| Field | Bound contract | |---|---| | Trigger | User explicitly audits what recall fed agents. | | Authority | Read-only. No file, VCS, credential, paid, published, deployed, or remote mutation. | | Side effect | None. | | Done | A bounded event table reports kind, time, session count, bytes, and empty-result flag, or a null object when absent; model-facing digest replay is refused. |
1. Verify `deja` is in PATH. Run `command -v deja`. If absent, return `{ "error": "deja CLI not found in PATH", "hint": "install or rebuild deja" }`. Do not conflate a missing CLI with an empty log. Done when: the CLI is confirmed present or the error object is returned.
2. Run `deja log --json --limit 50` with the harness filter if supplied: `deja log --json --harness <name> --limit 50`. When the user supplies a custom limit, use that value instead of 50. Done when: the command is executed.
3. Capture stdout and exit code. Done when: stdout and exit code are captured.
4. If exit code is non-zero, return `{ "error": "deja log failed", "hint": "install or rebuild deja" }`. Done when: the error is returned.
5. If stdout is the exact string `null\n`, return `null`. Done when: null is returned.
6. Parse stdout as JSON. If parse fails, return `{ "error": "malformed JSON from deja log" }`. Done when: the JSON is parsed or the error is returned.
7. The parsed value is a JSON array of event objects or `null`. Done when: the value type is determined.
8. If the parsed value is `null`, return `null`. Done when: null is returned.
9. If the parsed value is an empty array, return `null`. Done when: null is returned.
10. For each event object, extract the following fields into an audit row:
11. Build an array of row objects with keys `time`, `kind`, `bytes`, `sessions`, `empty`.
12. Sort the array by `time` descending (newest first) before returning. Done when: rows are sorted by time descending.
13. Digest text fields (`digest`, `policy`, `into`, `terms`, `ids`) are never read, never included in output, and never surfaced to the model. Done when: digest text exclusion is confirmed.
| Failure class | Condition | Result | |---|---|---| | `tool-missing` | `deja` not in PATH | `{ "error": "deja CLI not found in PATH", "hint": "install or rebuild deja" }` | | `command-failed` | `deja log --json` exits non-zero | `{ "error": "deja log failed" }` | | `malformed-response` | stdout does not parse as JSON | `{ "error": "malformed JSON from deja log" }` |
Partial-result rule: if `deja log` produces a partial list (due to a cap or clock skew), return exactly what was returned. Do not extrapolate, impute, or estimate missing events. Non-mutation rule: no file, directory, index, or state is written or altered.
Newest-first event rows sorted by `time` descending, with keys `time`, `kind`, `bytes`, `sessions`, and `empty`; return `null` when the log is absent or empty; return an explicit error object when `deja` is unavailable. Never include digest text, policy, terms, session IDs, or injection targets.
Formerly the ODIN Claude Plugin. The repository URL is unchanged. Outline-Driven Development, nicknamed ODIN, is a highly opinionated code-agent skill library: principles-first engineering, surgical editing, and workflow automation, published as installable
Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use…
Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not…
Use when a human explicitly asks for a full repository agent-compatibility pass returning a scored report with prioritized fixes.…
Use when setting up a project, auditing agent command permissions, or asking which read-only bash commands and domains to allow.…
Use when asked to build or review a CLI intended for coding agents and return flag-driven, pipeline-safe, idempotent design…
Use when the user asks to make the skills framework work in a new harness, IDE, or CLI. Not for remote, credential, publish,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.