From concierge
conversational intake and dispatch for gastown workspaces that use obsidian for notes, graphify for repo understanding, and rtk for shell-noise reduction. use when you want to describe work in plain language, continue previous work, start a new project, ask for status, or review a pull request, and want the agent to set up or repair gt, obsidian, graphify, and rtk as needed before dispatching work.
How this skill is triggered — by the user, by Claude, or both
Slash command
/concierge:goThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill when the user wants to stay in plain language and have the agent handle GT, Obsidian, Graphify, and RTK behind the scenes.
Use this skill when the user wants to stay in plain language and have the agent handle GT, Obsidian, Graphify, and RTK behind the scenes.
The user should not need to think in terms of beads, convoys, or exact commands. Translate intent into the right steps, ask only the minimum blocking questions, and start the work as soon as you have enough information.
Resolve paths in this order:
MAIN_GT_ROOT, then GT_TOWN_ROOT, then ~/gtMAIN_OBSIDIAN_ROOT, then OBSIDIAN_VAULT, then ~/notes/workUse scripts/resolve_context.sh before taking action.
Keep the conversation at the user's level.
If $ARGUMENTS is empty, vague, or missing, ask one concise question:
Ask only the questions that block action.
Hide GT mechanics unless they help.
Prefer starting work over explaining theory.
Never use raw tmux send-keys to message Claude sessions.
gt nudge for synchronous messages.If the work cannot proceed because the local foundation is missing, do the minimum setup needed to keep momentum.
gt install <gt-root>.gt rig add <name> <url>.gt init only when the user explicitly wants to initialize an existing local git repo in place.If broad foundation work is needed across multiple rigs or projects, switch to the setup workflow described in references/setup-handoff.md.
ls, find, grep, git status, git diff, and test runs.rtk exists but is not initialized, run rtk init --global before heavy shell work.rtk is missing and setup is allowed, install it first. Prefer Homebrew when available; otherwise use the official installer.Use this path when the user wants new work started in an existing project.
gt rig list, or the user’s wording.references/note-templates.md.--update.gt sling auto-create the convoy.gt sling <bead> <rig> for polecat work.gt sling <bead> only when already inside the target agent session.gt worktree <rig> only for a quick supporting touch from an existing crew session.Stacking = gt-stack), apply the stack-aware dispatch below before sling-ing work.When the plan declares Stacking = gt-stack:
gt-stack new <branch-name> off the previous stacked branch (or off main for the bottom branch). Branch names should describe the slice in plain language (e.g. phase1-observability, phase1-dashboards).git commit --amend + gt-stack submit, not by adding new commits.gt-stack submit, no --draft); all branches above it open as draft (gt-stack submit --draft) until the one below them merges.gt-stack sync to detect the merge, reparent descendants onto main, cascade-rebase, and retarget the PR base via gt-stack submit on each remaining branch.git push --force — gt-stack push and gt-stack submit already use --force-with-lease=<ref>:<sha> to avoid clobbering a collaborator's work.For the full convention and the three rules (one commit per branch, merge bottom-up, restack after every amend or merge), see CONCIERGE_STACK.md at the plugin root.
Use this path when the user wants to resume something already in flight.
gt hookgt convoy listgt trail --since 3d --limit 10.git/gt-stack/parents has entries, or the plan declares stacking), check stack state: run gt-stack list from the working repo to recover branch order, then use gh pr list --json number,headRefName,isDraft,state (or gh pr view <branch> --json isDraft,state per branch) to report which PRs are ready vs. draft, and call out any that need a gt-stack sync (e.g. the bottom PR has merged since the last session).Use this path when the user wants to start a brand new project or add a repo to the town.
gt rig add <name> <url> for remote repos.gt init only when the user explicitly wants to initialize the current local git repo in place.Use this path when the user wants a code review on a PR. The review is saved to Obsidian and optionally posted to GitHub. Posting a review is a visible, multi-author-affecting action — confirm intent before publishing if the user wasn't explicit.
Identify the PR.
gh pr view <number> --repo <owner/repo> --json title,author,baseRefName,headRefName,number,body,files,state,additions,deletions.Fetch the diff (with a fallback for truncated output).
gh pr diff <number> --repo <owner/repo> first.cd <local-clone-of-the-rig>
git fetch origin pull/<number>/head:pr-<number>
git show pr-<number>:<path-to-file> > /tmp/<file>.pr
# Use baseRefName from step 1's `gh pr view --json` output — not a hardcoded "main".
git diff <baseRefName>..pr-<number> -- <path>
gh pr view <number> --repo <owner/repo> --json files.Determine the review number.
User/PR-Reviews/<project>/<PR-number>/ in the Obsidian vault.max(existing) + 1. First review is 1.Read relevant project context.
User/Projects/<project>/ notes for architecture context.graphify query to understand affected code paths.Perform the review.
Write the Obsidian review note.
User/PR-Reviews/<project>/<PR-number>/<review-number>.md.references/note-templates.md (frontmatter + findings table + "what this PR does well" section).Inline comment shape (binding when posting). Each inline comment must follow this structure so reviewers and authors can scan reviews consistently and humans can hand-off fixes to other AI assistants without re-explaining:
**[SEVERITY] — Short title**
<One paragraph: why this is a problem, with file/line anchors and any
relevant code references. Keep it concrete and specific.>
**Suggestion:** <one paragraph or short bullet list of fix options.>
<details>
<summary>🤖 Prompt to AI</summary>
Before fixing this, please validate it is actually a problem.
<Self-contained prompt: file paths, symbol names, what to grep for,
what to verify, and the concrete change to propose. Written so the
user can paste it into any AI assistant cold.>
</details>
<sub>_— I'm Claude Code, posting this comment on behalf of @<user>._</sub>
Conventions:
Before fixing this, please validate it is actually a problem. — this protects the author from cargo-culted "fixes" to non-issues.gh auth status before composing the footer; do not guess.Pre-flight before posting.
gh auth status and confirm which account will publish the review. Surface the login to the user if it isn't obvious from context.@@ ... @@ headers and confirm each comment's line is in range.python3 -c "import json; json.load(open('<file>'))". Heredoc / shell quoting bugs are the #1 reason a review submit returns garbage.Post to GitHub (only if the user asks, or confirm before posting).
APPROVE, REQUEST_CHANGES, or COMMENT.-f flags with --input:
{
"event": "COMMENT",
"body": "<top-level review summary, including findings table and disclosure footer>",
"comments": [
{
"path": "<file>",
"line": <line-in-new-file>,
"side": "RIGHT",
"body": "<inline comment per the shape in step 7>"
}
]
}
id and html_url for the verification step and the Obsidian note frontmatter, so don't discard stdout:
response=$(gh api repos/<owner>/<repo>/pulls/<number>/reviews \
--method POST \
--input <payload.json>)
review_id=$(echo "$response" | jq -r '.id')
review_url=$(echo "$response" | jq -r '.html_url')
$review_id (note: filter expression is double-quoted so the shell interpolates the variable into jq's filter):
gh api "repos/<owner>/<repo>/pulls/<number>/comments" \
--jq ".[] | select(.pull_request_review_id == $review_id) | {path, line, body: .body[0:80]}"
review_id: and review_url: fields with the captured $review_id and $review_url values.Reply format.
Use this path when the user wants to know what is happening, what is blocked, or what to do next.
gt convoy status for feature-level questions.gt rig status <rig> for repo-level questions.gt peek or gt nudge when you need to inspect or steer a specific session.Before doing side-effectful work, verify the basics:
gt and bd existgraphify exists, or can be installedrtk exists, or can be installed and initializedIf the foundation is missing across many rigs or the vault needs a broad bootstrap, switch to the setup workflow and follow references/setup-handoff.md.
User/Projects/<Project>/.User/Projects/<Project>/Convoys/<slug>.md even if the user never sees the convoy ID.Decisions folder for durable choices, not transient status.Use these patterns:
gt installgt rig addgt initgt start, gt mayor attachgt slinggt convoy create, gt convoy status, gt convoy listgt hook, gt trail, gt readygt nudge, gt peekUse bd directly only as the hidden implementation detail for creating or updating work items.
Always end with this structure:
A short statement of the task you started or resumed.
The rigs you identified or touched.
What note you created or updated, plus any setup work such as GT init, RTK enablement, or Graphify refresh.
What you dispatched or what is now ready to dispatch.
Only include the missing pieces that prevent further action.
/concierge:go/concierge:go start the checkout coupon feature for shop/concierge:go continue previous work on onboarding/concierge:go start a new project from https://github.com/acme/analytics-api/concierge:go what is blocked in shop right now?/concierge:go review PR 142 on flags/concierge:go review https://github.com/acme/flags/pull/142/concierge:go review PR 142 on flags and post itnpx claudepluginhub nsxbet/concierge --plugin conciergeGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.