Permission manifests for agent skills
If an agent skill can call tools, read files, write memory, browse websites, message people, or trigger workflows, it needs a permission manifest before anyone installs it.
Agent skills are starting to behave like dependencies.
They are portable, reusable, shared across teams, and often installed because the demo looks useful. But unlike a normal library, a skill may run inside an agent that has browser control, file access, SaaS credentials, messaging tools, long-term memory, and permission to launch subagents.
That changes the review surface. You are not only reviewing code or prompt quality. You are reviewing delegated authority.
What a permission manifest answers
What job is this skill allowed to perform, and what is explicitly out of scope?
What inputs are required, what freshness is needed, and what data must never be provided?
Which tools/actions are allowed: read, draft, edit, delete, publish, send, buy, deploy, or trigger?
Can it read, propose, write, promote, expire, or revoke memory? Who approves durable updates?
What evidence must the skill leave: sources, tool calls, before/after state, exceptions, and rollback notes?
When must it stop, draft, queue an exception, ask a human, or refuse instead of improvising?
The unsafe default
The unsafe default is a skill description like this:
It sounds harmless. It is not enough.
Useful information can include stale facts, private data, inferred headcount, wrong decision-makers, competitor notes, personal emails, billing-sensitive fields, or notes that later agents treat as truth. “Update the CRM” can mean draft notes, append low-risk public fields, mutate account status, trigger automations, or email a customer.
A permission manifest turns that vague authority into something reviewable:
| Layer | Bad manifest | Better manifest |
|---|---|---|
| Tool access | Can use browser and CRM. | Browser read-only; CRM draft note creation only; no lifecycle, owner, billing, or customer-facing changes. |
| Source rules | Use web research. | Prefer official site, company blog, filings, and current LinkedIn/company pages; mark directory pages as secondary. |
| Memory | Save important findings. | May propose memory updates with source + timestamp; no durable writes without approval. |
| Receipts | Summarize what happened. | Record inputs, sources, fields proposed, skipped fields, confidence, exceptions, and rollback instructions. |
| Escalation | Ask if unsure. | Escalate conflicting sources, private data, low confidence, missing owner, tool failure, or requested write outside scope. |
A minimal manifest shape
A full manifest can be JSON, YAML, Markdown, or an internal registry record. The format matters less than the fields being explicit.
{
"skill_id": "browser-crm-enrichment",
"scope": { "allowed": ["research public company facts", "draft CRM note"], "forbidden": ["send email", "change account owner", "edit billing fields"] },
"inputs": { "required": ["company domain", "CRM record id"], "forbidden": ["credentials", "private customer notes"] },
"tools": { "browser": "read_only", "crm": "draft_note_only" },
"memory": { "read": "project", "write": "propose_only", "promotion_requires": "human_approval" },
"receipts": ["sources", "before_after", "confidence", "exceptions", "rollback_notes"],
"escalation": ["conflicting_sources", "low_confidence", "out_of_scope_write", "private_data"]
}
This is boring. That is the point. Boring manifests prevent exciting incidents.
Who should ask for this?
- Marketplaces listing third-party skills.
- Platform teams approving internal agent capabilities.
- Security reviewers checking prompt-injection and tool-misuse blast radius.
- Procurement teams buying reusable automations from vendors.
- Agent builders trying to prove their skill is safe enough to run.
If the skill only formats text locally, a lightweight contract is fine. If it touches real systems, persistent memory, users, money, production data, or other agents, ask for the manifest.
How I would review one
- Check whether the scope is narrow enough to test.
- List every tool action and separate read, draft, write, delete, publish, send, buy, and deploy permissions.
- Find memory writes and force them through proposed → approved → durable states.
- Require receipts for every external action or state change.
- Add exception rules for ambiguity, stale sources, conflicting facts, private data, and tool failure.
- Run adversarial eval cases: malicious page text, missing inputs, old data, overbroad user request, and rollback simulation.
- Decide: approve, approve with limits, request changes, or reject.
Use the free manifest tools
I turned this into a small trust stack for agent-skill buyers, builders, and marketplaces. Start free; only use a paid review when the skill has real authority.
My bias: if a vendor or marketplace cannot describe a skill's authority boundary, do not install it into an agent with real tools yet.