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".
How 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
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
npx claudepluginhub jabberlockie/the-human-stack-plugins-public --plugin architectManages 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, links active work to Linear, and keeps GitHub public while Linear remains the internal execution layer. Use for backlog control, PR triage, or GitHub-to-Linear coordination.
Triages GitHub issues and PRs, links active work to Linear, and classifies PRs as merge/rebase/close/held. Use for todo control, PR triage, or GitHub-to-Linear coordination.