Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/foliveira/harmonia/trustnpx skills add foliveira/harmonia --skill trustgit clone --depth 1 https://github.com/foliveira/harmoniaWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/foliveira/harmonia/trust)<a href="https://agentmods.dev/skills/foliveira/harmonia/trust"><img src="https://agentmods.dev/badge/skills/foliveira/harmonia/trust.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00040 | $0.02449 |
| Opus 5 | $0.00020 | $0.01224 |
| Sonnet 5 | $0.00008 | $0.00490 |
| Haiku 4.5 | $0.00004 | $0.00245 |
Grade C, and why
trust scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
**Consent is keyed by the tree's resolved path.** A repository that moves or is renamed is a tree nobody has agreed to yet and is recorded again - and the other side of that is the sharpest thing to know before relying o How it starts
The opening of the file, as written. The whole thing — 64 lines — stays where its author put it; the contents beside it link to each section on GitHub.
This is a human-invoked setup command. Agreeing to run a repository's shell command is a human act: no other skill or agent - flow explicitly, and /harmonia:onboard in particular - runs it or bash ${CLAUDE_PLUGIN_ROOT}/bin/trust.sh record on the developer's behalf. Onboarding proposes a coverage: value; this command is what makes it runnable, and only the developer types it.
Run the recorder against the repository the developer is in and surface its output verbatim:
bash ${CLAUDE_PLUGIN_ROOT}/bin/trust.sh record --repo .
It prints the exact command it is about to make executable, on its own line and byte for byte, before writing. Read that line and decide. It is a shell command the coverage gate will run from the repository root at every implement round, at review and in the quick lane, so read it the way you would read a Makefile target or a package.json script.
Consent covers that string, and no file. The record holds the tree's path, the sha256 of the command exactly as the gate will run it, and the date. Change one byte of the command and the gate refuses until a human agrees again. Change anything else and it does not.
So pointing coverage: at a script means trusting that script's contents on every future run, including contents that arrive after you agreed. sh .harmonia/cov.sh && echo cov.xml is consent to run whatever .harmonia/cov.sh holds at the moment the gate runs it - and a repository you clone can change that script with an ordinary commit, with the coverage: line you read left exactly as you read it. A git pull, an npm ci and a rebuilt virtualenv all do the same thing without a commit. Nothing in the gate looks at any file's contents; only the string is watched.
Earlier versions of this file promised more: that the record covered the contents of the scripts the command ran, so a rewritten script refused. The promise could not be kept and is withdrawn rather than restated. .harmonia/cov.sh's whole job is to run the repository's test suite - hundreds of files no record ever covered - so the digest stopped a rewrite of one file and nothing behind it, and getting past it took no attacker and no skill.
What you do get is that nothing runs unread. The exact string was printed and agreed to; it is short enough and plain enough to read; its first word per part is the program; a word where a file belongs is a file rather than an option; no word reaches through a .. path component; and any edit to it stops the gate until a human agrees again.
Most commands cannot be recorded, and that is the point. The recorder refuses the value outright, with the offending word and the remedy, while you are there to read it: a value nobody can read honestly is worse than one nobody can run.
interpreters: sh bash dash python python3 node
inert: echo true
bytes: 1024
words-per-part: 64
byte-class: 0x20-0x7e
That card is one block carried identically by this file, SECURITY.md, skills/onboard/SKILL.md, skills/onboard/CERTIFY.md and bin/trust.sh, and checked against what the recorder admits. Around it: a recordable value is bytes from the card's byte class, up to the byte cap, split by ;, &&, || and | into parts of at most the word cap, every word made of letters, digits and _ . , : = + @ / - (or that inside one matching pair of quotes) and none of them carrying a .. path component - --out=../x and a..b are ordinary words and are fine; ../x and src/../lib are not. Every part starts with one of:
- an interpreter from the card, bare and exact -
sh, not/bin/shand not./sh. Its next word is the script it runs, must carry a/, must not begin with-or+, and must not sit under/dev/or/proc/(sh /dev/stdinhands the interpreter the pipe beside it instead of a file). Later words go to that script. cd <dir>- first part only, one operand, followed by&&,<dir>relative. An absolute one is refused because it is the onecdshape decidable from the string alone and costs a single rule; where a relative name leads is a fact about your tree, and nothing here asks the tree anything.- an inert word from the card.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 64 lines · 40 tokens per session scan C 2262bee519bd
trust is a skill published in the GitHub repository foliveira/harmonia (2 stars, last pushed 19d ago), licensed MIT. It adds 40 tokens to every session and 2,449 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
todos
This chat has a shared, live TODO plan — your tasks for the conversation, which the user also edits. Read this skill and reach for the todo tools whenever a request takes more than a couple of steps. It covers the plan model (group = task, items = its steps; loose items are the user's lane), how to work it: propose…
writing-workflow-skills
Use when adding a new workflow skill to pi-thinkrail-workflow, changing an existing workflow skill's role, trigger, handoff, or structure, or checking a workflow skill against the workflow system's rules. Not for authoring general-purpose skills outside this package.
clarify
Adaptive requirements clarification with auto-depth routing. Shallow (Q&A) for simple tasks, Deep (exploration + DRAFT + PLAN) for complex ones. Escalates automatically when ambiguity persists.
writing-specs
Use when a workflow step drafts or revises a spec artifact — a goal-and-requirements, an architecture, or a module SPEC — or when a workflow skill names it at such a step. The shared quality bar for specs — not a workflow, nothing to execute.
ai-ml-development
AI and machine learning development with PyTorch, TensorFlow, and LLM integration. Use when building ML models, training pipelines, fine-tuning LLMs, or implementing AI features.
authentication-patterns
OAuth 2.0, JWT, SSO, MFA, NextAuth/Clerk/Supabase Auth implementation patterns.