Thank you for contributing a skill or agent template to the cortextOS community catalog. This guide covers everything you need to submit a contribution.
| Type | Description |
|---|---|
skill |
A reusable capability for any agent (.claude/skills/<name>/SKILL.md) |
agent |
A full agent template with identity, config, and skills |
org |
An org-level template for a specific use case or industry |
Every skill lives in its own directory with a single SKILL.md file.
community/skills/<skill-name>/
└── SKILL.md
---
name: <skill-name>
description: "<one sentence — used by the agent to decide when to load this skill>"
triggers: ["keyword", "another phrase", "what user might say to invoke this"]
external_calls: [] # List any external APIs, services, or URLs this skill contacts. Empty array = none.
---
# Skill Title
Short description of what this skill does.
## When to Use
...
## Workflow
### Step 1: ...
```bash
# example commands...
### Required Fields
| Field | Required | Description |
|-------|----------|-------------|
| `name` | Yes | Lowercase, hyphenated. Must match directory name. |
| `description` | Yes | One sentence. This is what the agent sees when deciding whether to load the skill. Make it precise. |
| `triggers` | Yes | Array of strings. Natural-language phrases that should cause the skill to activate. Include synonyms. |
| `external_calls` | Yes | Array of strings listing every external API, service, or URL the skill contacts. Use `[]` if the skill makes no external calls. Examples: `["api.github.com", "openweathermap.org"]`. This field is used by the community reviewer to assess the skill's network footprint — omitting it is grounds to reject the PR. |
### SKILL.md Guidelines
- Write for the agent, not a human developer. The agent reads this at runtime.
- Use concrete bash commands with real `cortextos bus` CLI usage, not pseudocode.
- Keep each step actionable. Avoid vague instructions like "handle errors appropriately."
- Do not include secrets, API keys, hardcoded usernames, or personal data.
- Do not use `rm -rf`, `curl | sh`, or other destructive/untrusted patterns.
---
## Agent Template Structure
community/agents// ├── IDENTITY.md # Required: Name, Role, Personality ├── SOUL.md # Required: Values, decision-making principles ├── GUARDRAILS.md # Required: What the agent must never do ├── GOALS.md # Recommended: Default goals ├── HEARTBEAT.md # Recommended: Heartbeat loop instructions ├── TOOLS.md # Recommended: Available commands reference ├── config.json # Required: model, crons, startup config └── .claude/ └── skills/ # Any skills bundled with this agent
---
## Review Checklist
Before opening a PR, verify:
- [ ] Directory name matches `name` in frontmatter
- [ ] `description` is one sentence and specific (not "a useful skill")
- [ ] `triggers` array has at least 3 phrases
- [ ] `external_calls` field is present — `[]` if the skill makes no external network calls
- [ ] Every `curl`, `fetch`, or HTTP call in the skill body is listed in `external_calls`
- [ ] All bash commands use `cortextos bus` CLI (not direct file manipulation)
- [ ] No hardcoded file paths that only work on one machine
- [ ] No secrets, tokens, API keys, or personal data
- [ ] No `rm -rf`, `curl | sh`, or shell injection patterns
- [ ] Skill tested on at least one real agent
- [ ] For agent templates: all required files present (IDENTITY.md, SOUL.md, GUARDRAILS.md, config.json)
---
## How to Submit
### 1. Fork and clone
```bash
git clone https://github.com/grandamenium/cortextos.git
cd cortextos
git checkout -b feat/skill-<your-skill-name>
Place your skill or template in the correct community directory:
# For a skill:
mkdir -p community/skills/<skill-name>
# Add SKILL.md
# For an agent template:
mkdir -p community/agents/<agent-name>
# Add all required filesAdd an entry to community/catalog.json:
{
"name": "<skill-name>",
"type": "skill",
"version": "1.0.0",
"description": "One-line description shown in the catalog UI",
"author": "your-github-username",
"tags": ["tag1", "tag2"],
"review_status": "pending",
"install_path": "community/skills/<skill-name>"
}Set review_status to "pending" — the maintainers will update it after review.
git add community/
git commit -m "feat: add <skill-name> skill to community catalog"
git push origin feat/skill-<your-skill-name>Open a PR against main. Use the title format:
feat: add <skill-name> [skill|agent|org] to community catalog
In the PR description, include:
- What the skill does and when it activates
- Which agent(s) you tested it on
- Any dependencies (external APIs, env vars required)
A maintainer or community reviewer will check your PR against the review checklist. You may be asked to:
- Clarify the
descriptionortriggers - Remove or replace any flagged bash patterns
- Add missing required files (for agent templates)
Once approved, review_status will be set to "approved" and the item will appear in the public catalog.
Open a GitHub issue or message the cortextOS community channel.