Help us improve
Share bugs, ideas, or general feedback.
From architect
Pick the highest-priority unblocked Linear issue, build it, open a PR, and update issue state. Use for "/ship", "/ship next", "/ship HOARD-XX".
npx claudepluginhub jabberlockie/the-human-stack-plugins-public --plugin architectHow this skill is triggered — by the user, by Claude, or both
Slash command
/architect:shipThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pick the next item from Linear, branch, build, test, open a PR, and transition
Manages Linear issues via CLI: list by team/state, view details/comments, create/update title/desc/state/priority/labels/assign, start with git branch, delete.
Triages GitHub issues and PRs by classifying as merge, port-rebuild, close, or park; coordinates active work with Linear for internal execution tracking. Use for backlog control, PR triage, GitHub-Linear coordination.
Executes code tasks from Linear sub-issues: resolves dependencies, implements changes, validates Done Criteria, and syncs status. Use when asked to work on a Linear issue (e.g. PRI-42).
Share bugs, ideas, or general feedback.
Pick the next item from Linear, branch, build, test, open a PR, and transition the issue through In Progress -> In Review -> Done.
Preferred: Use Linear MCP tools when available (mcp__plugin_linear_linear_*).
Fallback: GraphQL via curl:
LINEAR_TOKEN=$(op-connect gc364u5r25bfme5mrvd3jj5yke credential)
curl -s -X POST https://api.linear.app/graphql \
-H "Authorization: $LINEAR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "<graphql>"}'
| Invocation | Action |
|---|---|
/ship | Pick next unblocked item, build, PR, done |
/ship next | Same as /ship |
/ship HOARD-XX | Ship a specific issue |
Resolve the Linear team from context:
docs/architect/master_intent.md for the active team key (e.g. HOARD)If a specific identifier was given (e.g. HOARD-26), fetch that issue:
{
issue(id: "HOARD-26") {
id
identifier
title
description
priority
state { id name type }
blockedBy { nodes { identifier state { name type } } }
team { id key states { nodes { id name type } } }
}
}
If no identifier given, fetch the highest-priority unblocked Todo issue:
{
issues(
filter: {
team: { key: { eq: "HOARD" } }
state: { type: { in: ["unstarted"] } }
}
orderBy: priority
first: 20
) {
nodes {
id
identifier
title
description
priority
state { id name type }
blockedBy { nodes { identifier state { name type } } }
team { id key states { nodes { id name type } } }
}
}
}
Filter locally: pick the first issue where ALL blockedBy items have state type completed.
If no unblocked items exist, report: "No unblocked items ready. Check blockers." and stop.
Show the user what will be built:
ITEM: [HOARD-XX] Title
PRIORITY: P1 (Urgent)
DESCRIPTION: <first 2-3 sentences>
Fetch the "In Progress" state ID from the team's states:
{
team(id: "<team-id>") {
states { nodes { id name type } }
}
}
Find the state where type == "started" and name == "In Progress".
Update the issue:
mutation {
issueUpdate(id: "<issue-id>", input: { stateId: "<in-progress-state-id>" }) {
success
issue { identifier state { name } }
}
}
Create a git branch named after the issue:
BRANCH="feature/hoard-XX-short-title"
git checkout -b $BRANCH
Branch naming: feature/<team-key-lowercase>-<number>-<slug>
HOARD-26 + "Create RLS policies" -> feature/hoard-26-rls-policiesExecute the work described in the issue. Follow the project's CLAUDE.md for conventions:
Commit often with the issue reference:
git add <files>
git commit -m "feat: description (HOARD-XX)"
Push the branch and open a PR:
git push -u origin $BRANCH
gh pr create \
--title "[HOARD-XX] Short title" \
--body "Closes HOARD-XX
## What
<what was built>
## Why
<why it was needed>
## Verified
<how it was tested>"
Find the "In Review" state ID (type: started, name: In Review).
Update the issue to In Review:
mutation {
issueUpdate(id: "<issue-id>", input: { stateId: "<in-review-state-id>" }) {
success
issue { identifier state { name } }
}
}
Once the PR is approved and merged:
Find "Done" state (type: completed).
mutation {
issueUpdate(id: "<issue-id>", input: { stateId: "<done-state-id>" }) {
success
issue { identifier state { name } }
}
}
Todo -> In Progress (Step 4: before branching)
In Progress -> In Review (Step 8: after PR opened)
In Review -> Done (Step 9: after merged)
SHIPPING: [HOARD-XX] Title
BRANCH: feature/hoard-XX-title
STATUS: In Progress
[build work happens]
PR: https://github.com/org/repo/pull/N
STATUS: In Review
DONE: [HOARD-XX] moved to Done