Your first command
A command is a parameterized prompt template a human invokes, typically as a slash command in the harness UI. The harness substitutes the user’s arguments into the template and sends the resulting prompt to the model; the agent never sees the template’s source.
This page walks through writing one slash command end to end: from a blank directory to the command showing up in Claude Code’s slash menu. The example is /standup: a command that reformats a free-text recap of yesterday’s work into a team-standard standup post.
Create the artifact
Commands do not use a SKILL.md. The prose body lives directly in ARTIFACT.md. Make the directory and write the manifest:
mkdir -p ~/podium-artifacts/personal/dev-loop/standup
$EDITOR ~/podium-artifacts/personal/dev-loop/standup/ARTIFACT.md
---
type: command
name: standup
version: 1.0.0
description: Format a daily standup update from a free-text summary of yesterday's work.
when_to_use:
- "At standup time, when summarizing yesterday's work into the team's standard format."
tags: [dev-loop, standup, daily]
sensitivity: low
---
# Daily standup
## User input
$ARGUMENTS
## Instructions
Reformat the user's free-text input into the team's standup format:
**Yesterday.** One to three bullets in past tense with action verbs.
**Today.** One to three bullets in present tense with action verbs.
**Blockers.** One bullet per blocker, or "None." when there are no blockers.
Rules:
- Keep each bullet to one line.
- Drop generic filler like "worked on stuff" or "made progress".
- Surface concrete artifacts (PR numbers, ticket IDs, build URLs) when the user mentions them.
- When the user did not mention blockers, write "None."
A few field notes:
- The command body is materialized verbatim into the target harness’s native command location (§6.7), so the harness’s own argument convention applies to the body. For example, Claude Code reads
$ARGUMENTSand$1from.claude/commands/<name>.md. Podium does not define an argument syntax of its own; write the body for the harness you target, or stay within a portable form. - Podium does not project commands through MCP. Both
podium syncand the MCP server materialize the command to disk in the harness-native format, and the harness’s slash-command system surfaces it.
Materialize
cd ~/projects/your-project
podium sync
Claude Code’s adapter writes commands to .claude/commands/<name>.md. Verify:
ls .claude/commands/
# standup.md
The full per-harness destination table is in Configure your harness.
Use it
In Claude Code’s prompt:
/standup yesterday I shipped the layer-composition PR, today I'm picking up
the dashboard work, blocked on review from Bob
Claude Code substitutes the trailing text into $ARGUMENTS, sends the resulting prompt to the model, and returns the formatted standup.
Lint
podium lint --registry ~/podium-artifacts/
Lint validates frontmatter against the command schema and resolves prose references in the body (markdown links to bundled files or other artifacts). CI runs the same checks on PRs.
What’s next
- Move on to agents. Commands are static prompts with a slot for user input. When the task needs to call tools, run scripts, or chain reasoning, write an
agentinstead. See Your first agent. - Promote the command to a domain. Commands shared across a team typically live in a tracked domain such as
engineering/dev-loop/with aDOMAIN.mddescribing the set. See Domains.