Skip to main content
Skills are reusable capabilities you assign to agents; templates are reusable blueprints for missions and crews. This page covers the skill marketplace (list, get, filter), bringing skills in (URL/paste import, bulk git import, and AI generation), the memory→Skills proposal bridge, plus workflow templates and crew-template blueprints with their AI-assisted wizard. A skill may bundle a system-prompt snippet, MCP server configuration, credential requirements, and tool definitions.
Most read endpoints accept a session or CLI token with workspace membership. Write endpoints have endpoint-specific auth: import/generate require MANAGER+, DELETE /skills/{skillId} requires OWNER/ADMIN, and some template actions (crew-template deploy, AI crew wizard) are workspace-member scoped — see each endpoint for its exact role gate.

Endpoints

Endpoint contract

Every endpoint identifies Auth, Request, Response, and Status. Read routes require a session or CLI token and workspace membership. Import, generation, bulk import, proposed-skill review, and template writes use the role gate shown beside the endpoint; crew-template deployment and the AI wizard require membership only. Requests are JSON; successful reads return 200, creates 201, and template deletion 204. Unless narrowed by an endpoint, failures are 401, 403, 400, 404, 409, 422 for importer rejection, 502 for upstream fetch/AI/git failures, or 503 for an unavailable configured backend. These contracts are verified against internal/api/router_crews.go, internal/api/skills*.go, and internal/api/crew_*.go. Auth: The endpoint’s role gate is part of the contract; no write endpoint inherits the read permission implicitly. Request: JSON fields marked required below must be present; import sources are mutually exclusive and filenames are treated as basenames. Response: Successful reads return arrays/objects as shown; create operations return the created resource and status 201. Status: 400 covers malformed or invalid input, 403 role denial, 404 missing/foreign resources, 409 duplicates, 422 rejected skill content, 502 upstream failure, and 503 unavailable memory/backend roots.

Skills

Skills are reusable capabilities that can be assigned to agents. They may include system prompt snippets, MCP server configurations, credential requirements, and tool definitions.

List Skills

Auth: Session or CLI token + workspace membership Query Parameters: (internal/api/skills.go:99) Response: 200 OK

Skill Fields

Get Skill

Returns full skill details including content, credential requirements, and MCP configuration. Response: 200 OK Additional fields beyond the list response:

Import Skill

Import a skill from a URL (GitHub raw content) or raw SKILL.md content. Auth: OWNER, ADMIN, or MANAGER role Request Body: Provide exactly one of url or content. (internal/api/skills.go:351)
or
URLs are validated against SSRF attacks (private IP ranges are blocked). Response: 201 Created — imported skill object.

Generate Skill

Authors a SKILL.md from a natural-language intent by calling Anthropic with a condensed skill-creator prompt, then inserts it with source = 'GENERATED'. The user can edit the body via the skills detail page afterwards. (internal/api/skills_generate.go:94) Auth: OWNER, ADMIN, or MANAGER role (canRole(role, "create")).
This endpoint spends real Anthropic tokens against the workspace’s API key on every call.
Prerequisite: Workspace must have an ACTIVE credential with provider = ANTHROPIC and type = API_KEY (not AI_CLI_TOKEN). OAuth bearer tokens from claude CLI login won’t work against the Messages API. Request Body:
Response: 201 Created

Bulk Import Skills

Walks a remote git repository for SKILL.md files and upserts each through the same v65-aware path used by Import, including SPDX license gating and the content scanner. Per-skill rejections are returned in the skipped array rather than failing the whole batch. (internal/api/skills_bulk_import.go:106) Auth: OWNER, ADMIN, or MANAGER role (canRole(role, "create")) Request Body: local_path is intentionally not part of the HTTP surface (it would turn the endpoint into an arbitrary host-FS read primitive).
Response: 200 OK
truncated is true when the walker hit its per-batch cap before reaching the end of the source tree.

Delete Skill

Permanently deletes a non-bundled skill (internal/api/skills.go:519).
This is a permanent delete, not a soft delete. BUNDLED skills cannot be removed — they are re-seeded on every server start.
Auth: OWNER or ADMIN role (canRole(role, "manage")) Response: 200 OK

Proposed Skills (memory → Skills bridge)

When the memory consolidator runs in proposal mode it stages auto-promoted SKILL.md files under .memory/{crew-slug}/topics/.proposed/skill-*.md. These endpoints are the HITL surface for reviewing those stagings. The handler is stateless against the database — disk is the source of truth, and approve/reject emit EntryMemorySkillApproved / EntryMemorySkillRejected journal entries. (internal/api/skills_proposed_handler.go) Auth (all three): OWNER, ADMIN, or MANAGER role — same threshold as canonical skill import.

List Proposed Skills

Lists skill files staged for review under the given crew. Returns an empty array when no .proposed directory exists for the crew. Query Parameters: Response: 200 OK
A file that fails the SKILL.md parser is still surfaced with description_quality set to "parse error: <reason>" so an operator can manually reject it.

Approve Proposed Skill

Imports the staged SKILL.md through the canonical skills importer (same path as URL/paste import), then removes the staging file on success. Note: The router pattern is /skills/proposed/approve (body-based), not a path-parameter /{id}/approve form. Request Body:
Response: 200 OK

Reject Proposed Skill

Deletes the staging file and emits an audit entry. Idempotent: calling reject twice returns 200 with removed: false on the second call. Request Body: Same shape as Approve (crew_id, file_name). Response: 200 OK

Skill Sources

source is a free-form string, not a closed enum. The values the codebase actually writes:

Skill Categories

The validated category enum (uppercase; parser/internal/skills/parser.go, must match the SkillCategory enum in prisma/schema.prisma): CODING, AUTOMATION, DATA, DEVOPS, SUPPORT, SALES, WRITING, RESEARCH, PM, DESIGN, SECURITY, FINANCE, OPS, CUSTOM A skill whose frontmatter category is missing or unrecognised defaults to CUSTOM.

Skill Runtimes

runtime enum: INSTRUCTIONS (default), SCRIPT, MCP, HYBRID.

Skill Maturity

maturity enum: OFFICIAL, CURATED, COMMUNITY (default), EXPERIMENTAL. The Skills list sorts OFFICIALCURATEDCOMMUNITY → other, then by name.

Workflow Templates

Workflow templates define reusable task structures for missions. For the five workflow-template endpoints below, Auth is workspace member for reads and OWNER/ADMIN/MANAGER for writes; Request is the JSON template object for create/update and no body for reads/delete; Response is the template object or array; Status is 200 for reads/updates, 201 for create, 204 for delete, plus 400, 403, 404, and 500 for invalid, forbidden, missing, or failed operations.

List Templates

Auth: Session or CLI token + workspace membership Response: 200 OK — array of template objects.

Create Template

Auth: OWNER, ADMIN, or MANAGER role Response: 201 Created

Get Template

Response: 200 OK

Update Template

Auth: OWNER, ADMIN, or MANAGER role Response: 200 OK

Delete Template

Auth: OWNER, ADMIN, or MANAGER role Response: 204 No Content

Crew Templates (Blueprints)

Crew templates are pre-configured crew blueprints that can be deployed to create a fully set up crew with agents, skills, and credentials.

List Crew Templates

Response: 200 OK — array of crew template objects.

Get Crew Template

Response: 200 OK — full template details including agents and configuration.

Deploy Crew Template

Deploys the template, creating:
  • A new crew with the template’s configuration
  • All agents defined in the template
  • Auto-assignment of credentials and skills
Auth: Session or CLI token + workspace membership. The handler does not perform a role check beyond workspace context (internal/api/crew_templates.go:364). Request Body:
Response: 201 Created — the created crew and agents.

AI Crew Wizard

Uses AI to suggest a crew configuration based on a natural language description. Spends Anthropic tokens against the workspace’s API key. Auth: Session or CLI token + workspace membership. The handler does not perform a role check beyond workspace context (internal/api/crew_ai.go:89). Prerequisite: Workspace must have an ACTIVE credential with provider = ANTHROPIC and type = API_KEY (OAuth AI_CLI_TOKENs from claude CLI login do not work against the Messages API). Request Body:
Response: 200 OK — suggested crew configuration.

Agent Skills (Per-Agent)

See the Agents page for per-agent skill management:

Remove a skill from an agent

Auth: Authenticated workspace member with the OWNER, ADMIN, or MANAGER role. Request: agentId and skillId are required path parameters. No request body. Response: 200 OK with the removed skill assignment, or 204 No Content when the handler has no response body.