Agent Skills
Each ENC app ships a Claude Code skill — an installable agent capability that teaches an
agent when to invoke the app and what to run. After installation, Claude Code surfaces it
as an /enc <app> slash command in your project, and the agent drives the app through the
enc CLI.
Install a skill
# 1. Install the global enc CLI once
npm install -g @enc-protocol/cli --registry https://npm-registry.ocrybit.workers.dev/
# 2. Add a skill to your project (current dir)
enc skill add personalThat command npm-installs @enc-protocol/skill-personal, then symlinks its SKILL.md into
./.claude/commands/personal.md. Claude Code picks it up as a project slash command. Remove it
with enc skill remove personal.
Skill anatomy
A skill is a single SKILL.md file with YAML frontmatter plus a body listing the typed
commands:
---
name: enc-personal
description: Interact with the enc-protocol `personal` app — write data_types
(public, private); read views (public, profiles, private, notices).
---
# enc-personal
Use this skill to interact with the enc-protocol `personal` app via the `enc` CLI.
App-level commands (preferred, v2 app-driven surface):
- `enc personal submit public '<json>'` [write] dataType → public
- `enc personal submit private '<json>'` [write] dataType → private (encrypted)
- `enc personal query public` [read] → public
- `enc personal query profiles` [read, cross_enclave dataview]
## When to use this skill
- The user asks about the `personal` app on enc-protocol.
- The user wants an operation that maps to one of the commands above.
## Output formats
- Default: human-readable text (one event per line for queries).
- `--json` for structured output (preferred when chaining commands).
- `--mem` for the in-process backend; default is cf via NODE_URL.How an agent uses it
- Discovery — Claude Code scans
.claude/commands/*.mdat session start; each skill's frontmattername+descriptiongo into the available-skills list. - Invocation — when the user's request matches the description (e.g. "post a public note"), the agent selects the skill and follows the body, which tells it which command to run.
- Execution — the agent shells out, e.g.
enc personal submit public '{"draft":"hi"}'. Output returns over stdout — plain text by default, JSON with--json. - Removal —
enc skill remove personaldeletes the symlink.
Why skills, not MCP
The whole interface is enc <app> … over Bash; the SKILL.md only tells the agent when to
use it and what to invoke. No MCP server is needed — any agent that can shell out (Claude
Code, Codex, Aider) consumes skills directly. MCP would matter for browser-only / sandboxed
agents that can't shell out; that path stays open via the per-app SDK.
Available skills
| Slash command | Package | App |
|---|---|---|
/enc personal | @enc-protocol/skill-personal | personal |
/enc dm | @enc-protocol/skill-dm | dm |
/enc group | @enc-protocol/skill-group | group |
/enc super | @enc-protocol/skill-super | super |
/enc registry | @enc-protocol/skill-registry | registry |
/enc node | @enc-protocol/skill-node | node |
Generation
Each SKILL.md is auto-generated from the app's CLI definition (cli.json) — it lists
every typed submit / query command, examples, flags, and the underlying enclaves, and is
drift-checked against the app's schema. A skill is never hand-written: it's a projection of the
same app definition that drives the App SDK and the CLI, so it can't
fall out of sync with what the app actually does.
See also
@enc-protocol/cli— theencbinary the skills drive- App SDKs — the typed programmatic surface behind each skill
- Building with the SDK