Extending

Skills and custom commands

Turn a workflow you repeat into something you invoke by name — from a file, or shared across machines.

Two ways to make a repeated workflow into one thing you type.

Skills

A skill is a named bundle of instructions. It's matched to relevant tasks automatically, and you can also run it directly.

Code
/skills                        what's available
/skills new ship               scaffold a SKILL.md
/skills show ship
/skill:ship                    run it
/skill:ship v2.1               run it with an argument

Skills are discovered from .contextcode/skills/, and from .claude/skills/ and .agents/skills/ — so a repository already set up for another tool works without changes. Skills stored in ContextStream sync across your machines and to your team.

Every skill gets its own /skill:<name> shortcut in the palette.

Custom commands

A markdown file in .contextcode/commands/ becomes a slash command. Simpler than a skill, and version-controlled with the project.

Markdown
<!-- .contextcode/commands/security-review.md -->
Review the current diff against our conventions.
Focus on $ARGUMENTS.

Current branch: !`git branch --show-current`
Conventions: @docs/conventions.md

That file creates /security-review. A custom command cannot reuse a built-in name such as /review. Three substitutions are available:

SyntaxWhat it does
$ARGUMENTSWhatever the caller typed after the command
!`command`Runs the shell command, inserts the output
@pathAttaches that file

They appear in the palette and complete exactly like built-in commands.

Skill or command?

You wantUse
A prompt template, versioned with the repoCustom command
Something matched to relevant work automaticallySkill
To share it across machines or with the teamSkill
Shell output or file contents inlinedCustom command

If it doesn't work

A new command doesn't appear. The palette picks up files as they're discovered — check the file is in .contextcode/commands/ and ends in .md.

A skill doesn't trigger on its own. Automatic matching works from the skill's description and trigger phrases. Make those concrete, or run it directly with /skill:<name>.

A custom command can't shadow a built-in. Deliberate — a custom /help would hide the real one. Rename it.

Next