Skills¶
parapetai-mcp init installs seven Claude Code skills into
.claude/skills/. Each is a SKILL.md that tells an agent (Claude Code,
or any other MCP client that reads skills) exactly which parapet_*
tools to call, in what order, and what never to do — they
are not separate binaries, just structured instructions plus (for
parapet-quickdemo) packaged project templates.
parapet-maf¶
Use when: you want Parapet added to an existing project that already
uses Microsoft Agent Framework (agent_framework) — governing an agent
that's already there, provisioning a Parapet agent for it, or wiring up
parapetai-agent[maf] env vars.
It checks for from agent_framework... imports before applying anything,
authenticates, provisions an agent via parapet_provision_agent, and
instruments the codebase — swapping in GovernedAgent/build_middleware()
and wiring the resulting agent_id/agent_secret/control_plane_url
into the project's env config.
For a Google ADK project use parapet-adk instead, and for a LangGraph/
LangChain (langchain.agents.create_agent) project use parapet-langgraph
— the instrumentation procedure is genuinely different for each, not just a
naming difference.
parapet-adk¶
Mirror of parapet-maf for an existing Google ADK (google.adk)
codebase: checks for google.adk imports first, then provisions and
instruments with GovernedRunner/build_plugin().
parapet-langgraph¶
Mirror of parapet-maf/parapet-adk for an existing LangGraph/
LangChain (langchain.agents.create_agent) codebase: checks for
create_agent/create_react_agent usage first, then provisions and
instruments with build_middleware() registered via create_agent(...,
middleware=[...]) — there is no wrapper class here the way MAF has
GovernedAgent/ADK has GovernedRunner. Coverage is per-create_agent
call site, same as parapet-maf's per-construction-site model, not
parapet-adk's single-Runner model. parapet_get_quickstart does not yet
return LangGraph-specific install/model fields — see the skill's own step 3
for what to use instead.
parapet-quickdemo¶
Use when: there's no existing project — "build me a Parapet demo", "show me governance in action", "generate an example governed agent".
Generates a small, self-contained, runnable project from packaged
templates demonstrating identity-based tool access: two people in
different orgs (Tony in Sales, Sally in HR) share one agent with two
tools, and a Cedar policy scoped to org lets each of them reach only
their own tool. Runs against a mock model by default (no API key needed)
and a real Parapet control plane behind it, so the allow/deny decisions
and audit trail are real and clickable — not simulated. Also supports a
fully local mode (PARAPETAI_MODE=local, no control plane at all) for
fast policy iteration; see the generated project's own README for the
toggle.
Distinct from parapet-maf/parapet-adk/parapet-langgraph, which
retrofit an existing project — this one creates a new one from nothing, in
a directory you name (templates exist for all three frameworks).
parapet-install-prereqs¶
Use when: parapet_check_prerequisites (or another skill about to run
it) reports something missing — Python 3.12+, pipx, or uv not on
PATH.
Calls parapet_check_prerequisites, reports each failing check's
detail and install_cmd, and asks before running each install
command, one at a time — never installs anything without explicit
per-step approval. On macOS, Homebrew has to succeed before pipx/uv's
own install commands will, so ordering matters and this skill enforces
it.
parapet-audit¶
Use when: you want to know how exposed an existing codebase is before touching it — "audit my codebase for governance risks", "scan for ungoverned model/tool calls", "how exposed are we without Parapet".
Read-only. Runs parapet_audit_codebase
(a local, static AST scan — no control plane call, nothing sent anywhere)
and reports the high/medium/low findings, pointing at the saved Markdown
report (.parapet/audit/report.md by default). Never edits, deletes, or
moves any file in the audited codebase itself. Explicitly honest about
what the scanner is: precision-favoring and best-effort against a curated
set of known import/call shapes — a clean result is not a certification,
and files_skipped is reported so blind spots stay visible.
parapet-audit-fix¶
Use when: you have a report from parapet-audit and want to act on it —
"fix the audit findings", "wrap the flagged calls in
GovernedAgent/GovernedRunner".
Edits files — the one skill here that isn't read-only by default,
unlike parapet-audit. Triages each finding by category first (a raw
Agent/Runner construction gets the actual GovernedAgent/GovernedRunner
wrap, following parapet-maf/parapet-adk's own instrumentation
procedure per the finding's framework field; a build_middleware()/
build_plugin() result that was never registered gets a smaller,
mechanical wiring fix; a raw model client with no framework in use gets
pointed at Governor instead, never force-fit into a framework wrapper
that doesn't apply), then re-runs the audit afterward to confirm the
finding count actually dropped rather than just reporting "fixed."
How they fit together¶
graph TD
A["parapetai-mcp init"] --> B[".claude/skills/parapet-*"]
C["user: build me a demo"] --> D[parapet-quickdemo]
E["user: govern my MAF agent"] --> F[parapet-maf]
G["user: govern my ADK agent"] --> H[parapet-adk]
S["user: govern my LangGraph agent"] --> T[parapet-langgraph]
N["user: audit my codebase"] --> O[parapet-audit]
D --> I[parapet_check_prerequisites]
F --> I
H --> I
T --> I
I -->|missing| J[parapet-install-prereqs]
D --> K["parapet_login_start / parapet_login_wait / parapet_whoami"]
F --> K
H --> K
T --> K
K --> L[parapet_provision_agent]
L --> M["parapet_push_policy_file (quickdemo only)"]
O --> P[parapet_audit_codebase]
P --> Q[".parapet/audit/report.md"]
Q -->|"user: fix these"| R[parapet-audit-fix]
R -->|"maf findings"| F
R -->|"adk findings"| H
R --> P
Every skill is careful about two things that show up repeatedly in their
instructions: never print an agent secret, CLI token, or the contents of
~/.parapet/credentials.json into chat once it's written to disk; and
never suggest disabling fail-closed defaults or weakening a policy to make
something "just work" — a denial is the product working, not a bug to
route around.