Step-by-step guide for creating and publishing a new skill in the jitsu-skills ecosystem. ---
Scanned 9/12/2026
Install to Claude Code
npx -y skills add aibot88/sec_skill_store --skill 0xjitsu-jitsu-skills-docs --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of 0xjitsu Jitsu Skills Docs?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/aibot88-0xjitsu-jitsu-skills-docs)More formats (shields.io, HTML) on the badges page.
# Adding a Skill
Step-by-step guide for creating and publishing a new skill in the jitsu-skills ecosystem.
---
## 1. Choose a Persona
Every skill belongs to one of 7 personas. Pick the one that best matches your skill's domain:
| Persona | ID | Domain |
|---------|-----|--------|
| Campaign Ops | `campaign-ops` | Outbound campaigns, lead enrichment, multi-channel sequencing |
| Ship Captain | `ship-captain` | Open source publishing, npm releases, changelogs |
| Guardian | `guardian` | Security auditing, secret scanning, vulnerability detection |
| Machinist | `machinist` | macOS automation, LaunchAgents, Keychain management |
| Architect | `architect` | Full-stack development, database schemas, data visualization |
| Researcher | `researcher` | R&D proposals, citations, research apps |
| Coordinator | `coordinator` | Meeting prep, team updates, cross-tool orchestration |
If none of these fit, propose a new persona in your PR with an `id`, `label`, `icon`, `color`, and `description`. New personas require maintainer approval.
---
## 2. Create the Skill Directory
```bash
mkdir skills/<skill-name>
```
Use kebab-case for the directory name. Keep it descriptive -- `campaign-sequencer`, not `cs`.
---
## 3. Write SKILL.md
Create `skills/<skill-name>/SKILL.md` with YAML frontmatter followed by the markdown body.
### Frontmatter Schema
```yaml
---
name: my-skill-name
description: >
What this skill does and when to trigger it. Write in third person.
Must be under 1024 characters. Include trigger phrases so Claude's
description-matching can auto-activate the skill. Example: "Scans
git history for committed secrets and credentials. Triggered when
the user asks to check for leaked keys, audit git history, or scan
for secrets."
license: AGPL-3.0-or-later
metadata:
author: your-github-handle
version: "1.0.0"
persona: one-of-seven-personas
---
```
| Field | Required | Notes |
|-------|----------|-------|
| `name` | Yes | Must match the directory name. Kebab-case. |
| `description` | Yes | Under 1024 characters. Third person. Include trigger phrases. |
| `license` | Yes | Always `AGPL-3.0-or-later` for core skills. |
| `metadata.author` | Yes | Your GitHub handle. `0xjitsu` for core skills. |
| `metadata.version` | Yes | Semver string in quotes (e.g., `"1.0.0"`). |
| `metadata.persona` | Yes | One of: `campaign-ops`, `ship-captain`, `guardian`, `machinist`, `architect`, `researcher`, `coordinator`. |
### Body Structure
After the closing `---` of the frontmatter, write the skill's instruction body in markdown. Include these sections:
**When to Trigger** -- List the exact phrases and intents that should activate this skill. Be specific. Claude uses description matching, so the more trigger patterns you list, the better auto-activation works.
```markdown
## When to Trigger
Activate this skill when the user:
- Asks to **scan for secrets** or **audit git history**
- Says "check for leaked keys" or "find exposed credentials"
- Is preparing a repository for open source release
```
**Workflow Steps** -- The numbered sequence of actions the skill performs. Be explicit about tool usage, file operations, and decision points.
```markdown
## Workflow
1. Read the project root to identify language and framework
2. Run `grep -r` patterns for common secret formats
3. Present findings grouped by severity
4. Guide the user through remediation
5. Re-scan to verify all issues are resolved
```
**MCP Tools Used** (if any) -- Wrap MCP-dependent sections in `<!-- claude-code-only -->` tags so they get stripped from the portable version.
```markdown
<!-- claude-code-only -->
## MCP Tools
This skill uses the following MCP servers when available:
- **Supabase MCP** -- for schema introspection
- **Sentry MCP** -- for error context
<!-- /claude-code-only -->
```
**Output Format** -- Describe the expected deliverable: a file, a terminal report, a structured JSON object, etc.
**Safety Rules** -- Hard boundaries the skill must never cross. Examples: "Never delete files without confirmation", "Never commit secrets", "Never push to remote without asking".
**Anti-Patterns** -- Common mistakes to avoid. Examples: "Do not run `git add .`", "Do not skip the verification scan", "Do not suggest disabling security checks".
---
## 4. Generate Portable Versions
Run the build script from the repo root:
```bash
bash scripts/build-universal.sh
```
This iterates over every `skills/*/SKILL.md` and generates two files per skill:
| File | What it contains | Target platform |
|------|-----------------|-----------------|
| `prompt.txt` | Body only, frontmatter stripped | Claude Chat (paste into Project Instructions), Agent SDK (inject as `systemPrompt`) |
| `prompt-portable.txt` | Body with `<!-- claude-code-only -->` sections also stripped | Prompt marketplaces, harnesses without tool access |
Never edit `prompt.txt` or `prompt-portable.txt` by hand -- they are always regenerated from `SKILL.md`.
---
## 5. Add to Skill Tree
Edit `skills/skill-data.json` to register your skill in the dependency graph.
### Add a Node
Add an entry to the `nodes` array:
```json
{
"id": "my-skill-name",
"label": "My Skill Name",
"persona": "guardian",
"tier": 1,
"description": "One-line description of what the skill does",
"status": "available",
"prerequisites": ["core"],
"platforms": ["claude-code", "claude-chat", "agent-sdk"]
}
```
| Field | Values | Notes |
|-------|--------|-------|
| `id` | string | Must match the directory name and SKILL.md `name` |
| `label` | string | Human-readable display name |
| `persona` | string | One of the 7 persona IDs |
| `tier` | `0`, `1`, or `2` | `0` = core (reserved), `1` = standalone (depends only on core), `2` = requires other skills as prerequisites |
| `description` | string | Short description for CLI and tree display |
| `status` | `"available"` or `"locked"` | Use `"available"` for tier-1 skills. `"locked"` for tier-2 skills whose prerequisites are not yet mastered |
| `prerequisites` | array of IDs | Skill IDs this skill depends on. At minimum `["core"]` for tier-1 skills |
| `platforms` | array | Subset of `["claude-code", "claude-chat", "agent-sdk"]`. Use only platforms the skill actually works on |
### Add Edges
Add one edge per prerequisite relationship to the `edges` array:
```json
{ "source": "core", "target": "my-skill-name" }
```
If your skill is tier-2 with multiple prerequisites, add one edge for each:
```json
{ "source": "prerequisite-a", "target": "my-skill-name" },
{ "source": "prerequisite-b", "target": "my-skill-name" }
```
---
## 6. Test Locally
Symlink your skill into the Claude Code skills directory:
```bash
ln -s $(pwd)/skills/my-skill-name ~/.claude/skills/my-skill-name
```
Then start a new Claude Code session and test:
- **Slash command**: Type `/my-skill-name` to invoke it directly
- **Auto-trigger**: Describe a task that matches the trigger phrases in your description -- Claude should auto-detect and activate the skill
- **Verify output**: Confirm the skill follows its workflow, respects safety rules, and produces the expected output format
Also verify the CLI recognizes your skill:
```bash
bun bin/cli.js list # Should show your skill with correct persona
bun bin/cli.js tree # Should show your skill in the prerequisite graph
```
---
## 7. Submit a PR
1. **Branch from main**: `git checkout -b skill/my-skill-name`
2. **One skill per PR** -- keep the diff focused
3. **Include all generated files**: `SKILL.md`, `prompt.txt`, `prompt-portable.txt`, and the updated `skill-data.json`
4. **PR checklist**:
- [ ] `SKILL.md` has valid frontmatter (name, description under 1024 chars, license, metadata)
- [ ] `bash scripts/build-universal.sh` completes with 0 errors
- [ ] `bun bin/cli.js list` shows the new skill
- [ ] `bun bin/cli.js tree` renders the prerequisite graph correctly
- [ ] Skill tested via symlink in a live Claude Code session
- [ ] MCP-dependent sections wrapped in `<!-- claude-code-only -->` tags
- [ ] No secrets, PII, or hardcoded credentials in the skill body
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!