skills/shortcut-epic-update/SKILL.md
Update Shortcut epics using the API directly (since MCP doesn't support epic updates). Handles linking to objectives, changing state, updating owners, etc.
npx skillsauth add nicksteffens/claude-config shortcut-epic-updateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Updates Shortcut epics via the Shortcut API when the MCP server doesn't provide update functionality.
objective_ids)group_ids - teams are called "groups" in the API)This skill requires Bash tool permission to:
~/.claude/skills/shortcut-tokens.json using jqcurl commands to update epics via Shortcut APICRITICAL: Tokens are stored in ~/.claude/skills/shortcut-tokens.json
File format (see shortcut-tokens.sample.json for template):
{
"coherentpath": "your_coherentpath_token",
"movableink": "your_movableink_token"
}
Use the correct token key for the workspace:
coherentpathmovableinkDetermine the workspace from context or ask the user
Read the API token from the config file:
TOKEN=$(jq -r '.coherentpath' ~/.claude/skills/shortcut-tokens.json)
# or
TOKEN=$(jq -r '.movableink' ~/.claude/skills/shortcut-tokens.json)
Get the epic ID to update
Build the update payload with only the fields to change:
{
"objective_ids": [186645],
"group_ids": ["698e17ad-ae60-4ddd-af00-37d5ca5810a2"],
"name": "New epic name",
"description": "Updated description",
"state": "in progress",
"owner_ids": ["uuid-here"]
}
Note: Teams are called "groups" in Shortcut's API, so use group_ids to assign teams.
CRITICAL JSON Formatting:
PAYLOAD='{"key":"value"}'-d "$PAYLOAD"echo "$PAYLOAD" | jq .Execute the curl command:
curl -X PUT "https://api.app.shortcut.com/api/v3/epics/{epic_id}" \
-H "Content-Type: application/json" \
-H "Shortcut-Token: $TOKEN" \
-d '{json_payload}'
Verify the update by checking the response JSON
{
"objective_ids": [186645]
}
IMPORTANT: In Shortcut's API, teams are called "groups". Use group_ids (not team_ids):
{
"group_ids": ["698e17ad-ae60-4ddd-af00-37d5ca5810a2"]
}
{
"state": "in progress"
}
{
"owner_ids": ["69696143-c308-4c11-a058-ee700eb89122"]
}
{
"name": "New Epic Name",
"description": "Updated description text"
}
group_ids not team_ids-d parameterSteps:
TOKEN=$(jq -r '.coherentpath' ~/.claude/skills/shortcut-tokens.json)PAYLOAD='{"objective_ids": [186645]}'echo "$PAYLOAD" | jq .curl -X PUT "https://api.app.shortcut.com/api/v3/epics/186646" \
-H "Content-Type: application/json" \
-H "Shortcut-Token: $TOKEN" \
-d "$PAYLOAD"
"objective_ids": [186645]
</example>
Steps:
TOKEN=$(jq -r '.coherentpath' ~/.claude/skills/shortcut-tokens.json)group_ids):
cat > /tmp/epic_update.json << 'EOF'
{"group_ids": ["698e17ad-ae60-4ddd-af00-37d5ca5810a2"]}
EOF
curl -X PUT "https://api.app.shortcut.com/api/v3/epics/187449" \
-H "Content-Type: application/json" \
-H "Shortcut-Token: $TOKEN" \
-d @/tmp/epic_update.json
"group_ids": ["698e17ad-ae60-4ddd-af00-37d5ca5810a2"]
</example>
~/.claude/skills/shortcut-tokens.json (gitignored)shortcut-tokens.sample.json (committed for reference).gitignoredevelopment
Static reference for Shortcut team UUIDs, mention names, and workflow IDs across both workspaces. Use this when creating or assigning Shortcut stories instead of querying the API for team lists.
content-media
Get Designer Team's current iteration and assign stories to it
data-ai
Create a new session log entry in the second-brain. Extracts context from the current session and asks for your assessment.
tools
Swap between Star Wars droid personalities for tone and statusline