Create Issues
From the CLI
xpo add "Wire up login form"
Add metadata inline:
xpo add "Wire up login form" --label feature --desc "Use OAuth2 PKCE flow"
xpo add "Fix token refresh" --label bug --assignee "Alice <alice@example.com>"
xpo add "Auth overhaul" --label epic
Issues start in BACKLOG by default. Set a different initial status:
xpo add "Urgent fix" --label bug --status PLANNED
From JSON
For complex payloads, pipe JSON to stdin:
echo '{"title": "My issue", "labels": ["feature"], "description": "..."}' | xpo add --json
The new issue comes back as JSON — {"id": "…", "title": "…", "status": "BACKLOG"}. See Scripting with JSON for every field.
Duplicate detection
By default, xpo warns if a similar issue already exists. Skip the check with --force:
xpo add "Login form" --force
Placement
Place a new issue directly above or below another issue in the manual order with --before or --after:
xpo add "Hotfix" --before myapp-a1b2c3
Sub-issues
Create a sub-issue by setting a parent with -p:
xpo add "Subtask" -p <parent-id>
See Parent & Sub-Issues for epics, progress rollup, and status cascading.
From the web board
Open the board with xpo board and click the + button or use the command palette (Cmd/Ctrl + K). Set the title, labels, parent, and assignee from the dialog.
Drafts
Not ready to file it yet? Click Save draft in the dialog. If you close the dialog with unsaved text, the discard prompt offers Save draft too. A Drafts item with a count appears in the sidebar while you have drafts (g r). Open a draft to keep editing it, create the issue from it, or discard it.
Drafts are yours alone: they are stored in .xpo/drafts/, which is git-ignored, and never enter the issue log.
From the MCP server
AI agents create issues through the add tool, which accepts all the same fields:
mcp__xpo__add title="Wire up login form" labels=["feature"] description="..."