File-based markdown notebook CLI for AI agents — the leather notebook in your jacket pocket.
SaferSkills independently audited agent-carnet (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A tiny CLI that gives you a shared markdown notebook on disk under .carnet/<category>/<slug>.md. Notes have a 30-day default lifespan that resets every time they are read or applied; useful ones survive, stale ones drift to .trash/ automatically.
# Save (always pass --summary and --agent claude-code)
echo "body content" | agent-carnet save deps/iconv-issue \
--summary "iconv-esm v0.7 types broken — pin to v0.6" \
--agent claude-code \
--tags compat,esm
# Recall
agent-carnet find iconv # search summaries (does NOT bump lifespan)
agent-carnet list # category-grouped overview, sorted by last_used
agent-carnet list --sort use_count # most-applied notes first
agent-carnet read deps/iconv-issue # read full content (bumps last_used; weak use signal)
# Mark as actually applied (strong use signal — bumps last_used + use_count)
agent-carnet used deps/iconv-issue
# Maintain
agent-carnet move <from> <to>
agent-carnet rm <path> --yessave reads body content from stdin (pipe via echo, heredoc, or < redirection). The --summary flag is the standalone-readable headline; the piped stdin is the full body.
When unsure of a subcommand's full flag set, run agent-carnet <command> -h (e.g. agent-carnet save -h, agent-carnet used -h). Each subcommand prints its own focused help — required arguments, options, and examples — without invoking filesystem operations.
Treat carnet as an agent notebook, not a strict archive. If you think a note may help a future agent (or future-you) resume work, dodge a rethink, remember a temporary state, or preserve a useful hunch — save it. Provisional notes are welcome; the 30-day lifespan is the safety valve (notes that keep getting read or applied stay alive, the rest expire automatically).
Examples worth keeping in mind (not an exhaustive list):
These are guidelines, not gates. If grep / read / git log already gets a future reader to the same conclusion, you can skip it — but when in doubt, prefer saving a small, well-summarized note over losing context.
Before starting related work or when context might exist:
agent-carnet find <topic> — quick scan of summariesagent-carnet list <category> — browse a folder. Each entry's tail shows (last_used: …, use_count: N) — a high use_count means the note has been load-bearing across past sessionsagent-carnet read <path> — actually read (bumps last_used; only use when the content matters)Use use_count as one importance signal among several: combine with the summary, tags, and last_used before deciding what to read. A high-count note is not always relevant to the current question, and a freshly-saved load-bearing note starts at use_count: 0. agent-carnet list --sort use_count surfaces the most-applied notes when that ranking is the right lens.
usedCall agent-carnet used <path> after a carnet actually shaped your work:
vocab carnet in new code instead of inventing your own.Each used call bumps last_used AND increments use_count by one — a durable importance signal that survives across sessions and lets future readers (and agent-carnet list --sort use_count) surface load-bearing notes. Repeated calls each increment, so call once per real application event, not per session.
Reading a carnet does NOT count. read already keeps it alive (weak signal: bumps last_used only); used records that the note was worth keeping for a real reason (strong signal: bumps both, and +1s the use_count that future agents see in list output).
--summary is required. Make it decisive — reading the summary in isolation tells the next reader (or the next agent) whether to read further.--agent claude-code is required.find does NOT bump anything. read bumps last_used. used bumps last_used AND increments use_count.updated tracks content modification only (save, save --update). It is independent of last_used and is not the lifespan driver.keep: true pins permanent notes..carnet/.trash/ for 7 days before hard delete.<category>/<slug> — kebab-case, no leading slash, no ...deps/esm/iconv-issue works.This SKILL.md is enough for everyday note-keeping. Open the references/ files only when one of these specific cases applies — they are not always-on context, so do not load them speculatively.
| Read this file | When |
|---|---|
references/cookbook.md | You are about to use (or are being asked about) a tag-based pattern such as tags: [vocab] for project terminology or tags: [hypothesis] for debugging dead-ends. The file shows the full pattern, including how to structure the body and meta: for that pattern. |
references/frontmatter.md | You need to write or read the meta: extension namespace, set a non-trivial lifespan / keep, or understand why an unfamiliar frontmatter field is or is not preserved on save. |
If neither case applies, do not read references/. The base of this file already covers daily save/find/read/used/move/rm flows.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.