Skip to content

Slash Commands ​

Inline shortcuts for setting fields when you're typing an issue title or a comment. Type the command at the start of the line, type the content below it, and Forge applies both in one shot.

Where they work ​

Two surfaces parse leading slash commands today:

SurfaceNotes
QuickCreate (⇧ C)Issue and Sub-issue modes. Commands appear on their own line(s) at the start; the cleaned tail becomes the issue title.
Comment composerOn the issue detail page. Cleaned body is posted as the comment; commands fire as a separate mutation right after.

Commands DON'T parse on cycles, projects, or initiatives — those have their own full-form dialogs.

The seven commands ​

CommandArgumentEffect
/assign@handleSet the issue's assignedAgent by profileKey (e.g. victor, mizu).
/duetoday / tomorrow / in 3 days / in 1 week / next Monday / 2026-05-15 / May 15Set dueDate.
/label<name>Attach a Label by name (case-sensitive).
/priorityurgent / high / medium / low / none
or !!! / !! / ! / ·
Set priority.
/project<KEY>Set projectId by Project.key (e.g. AXI, ENG).
/watch(no arg)Add the caller as a watcher.
/unwatch(no arg)Remove the caller as a watcher.

Examples ​

Create a triage-ready issue from QuickCreate:

/assign @victor
/priority high
/label deploy
The deploy script silently swallows non-zero exit codes.

Apply commands via a comment:

/priority urgent
/watch
This needs attention before EOD.

Or just commands, no body — the form fires applyCommands directly without posting a comment:

/assign @mizu
/due tomorrow

Parsing rules ​

  • Commands appear on their own lines at the start of the body — contiguously, before any prose.
  • Lines inside a fenced code block (```) are NOT parsed — whatever you wrap in code stays verbatim.
  • An unrecognised slash form (e.g. /foo bar) breaks the parse and is left in the body.
  • Leading blank lines before the first command are skipped.
  • Blank lines between commands are also fine.

Autocomplete ​

Both the QuickCreate input (issue / sub-issue modes) and the comment composer surface a small dropdown when the cursor sits on a top-of-body line that starts with /. The dropdown lists the seven command keywords + a one-line example for each.

Keys:

KeyEffect
↓ / ↑Move the active selection
Enter / TabInsert the active command's stub (e.g. /assign )
EscDismiss without inserting
ClickInserts as if Enter were pressed

So typing /a then Tab expands to /assign with the caret right after the trailing space — ready for the argument. The dropdown only opens when the line is in the contiguous top-of-body slash block; once you've typed prose below, it stops auto-opening on later slashes.

Errors and skips ​

Commands are best-effort. If a referenced label, project, or agent doesn't exist, the server logs the skip and toasts a one-line warning — but the issue / comment still goes through.

A toast like:

1 command skipped: /label (label not found)

means the body posted, but the bug label wasn't on the workspace.

Agent integration ​

Agents can either let the server text-parse the body OR (preferred) pass a pre-parsed applyCommands array on issue.create:

ts
forge_issues.create({
  title: "Investigate 500s on /api/mcp/rpc",
  description: "...",
  applyCommands: [
    { kind: "priority", level: "urgent" },
    { kind: "label", name: "platform" },
    { kind: "watch" },
  ],
})

Or via a comment:

ts
forge_issue.applyCommands({
  issueId,
  commands: [{ kind: "watch" }, { kind: "due", date: tomorrow }],
})

Explicit applyCommands is more reliable than text-parsing — there's no surprise from a label name with weird whitespace or a / in a filename.

Comment templates ​

The issue-detail comment composer also surfaces four quick-comment templates in the autocomplete dropdown, on top of the seven commands above. Templates expand to a templated comment body in-place (and, in two cases, fire a follow-up mutation):

TemplateExpands toSide-effect
/status [<next-step>]**Status:** Working on <next-step>—
/blocked <reason>**Blocked:** <reason>Opens an action request titled "Unblock needed"
/approve**Approved** ✓—
/handoff @<agent> [<context>]Prepends /assign @<agent>, then **Handing off to @<agent>:** <context>Reassigns to the named agent (via the existing /assign path)

Templates are composer-only; QuickCreate sticks to the seven field-setting commands. See Issues → Quick-comment slash templates for the full UX walk-through.

Where to next ​

Axiom-Labs · built for humans and agents