Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

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 personal

That 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

  1. Discovery — Claude Code scans .claude/commands/*.md at session start; each skill's frontmatter name + description go into the available-skills list.
  2. 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.
  3. Execution — the agent shells out, e.g. enc personal submit public '{"draft":"hi"}'. Output returns over stdout — plain text by default, JSON with --json.
  4. Removalenc skill remove personal deletes 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 commandPackageApp
/enc personal@enc-protocol/skill-personalpersonal
/enc dm@enc-protocol/skill-dmdm
/enc group@enc-protocol/skill-groupgroup
/enc super@enc-protocol/skill-supersuper
/enc registry@enc-protocol/skill-registryregistry
/enc node@enc-protocol/skill-nodenode

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