{"id":"3a75cb62-02bf-444d-b5b2-c68e9dca63e9","slug":"nsxbet-concierge","kind":"skill","name":"concierge","summary":"concierge is a set of skills for claude-code that allows a very opinionated usage of gastown (and some other tools) to speed even further creation/maintenance of projects.","owner":"NSXBet","repoUrl":"https://github.com/NSXBet/concierge","license":"MIT","licenseTier":"permissive","trust":"community","stars":3,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-04-16T01:51:46.000Z","addedAt":"2026-10-21T17:12:07.764Z","logoUrl":"https://avatars.githubusercontent.com/u/89203156?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools"],"tags":[],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-22T11:37:11.208Z","sample":false,"url":"https://conduits.dev/tools/nsxbet-concierge","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Concierge\n\nA Claude Code plugin that lets you describe work in plain language and have the agent handle [Gastown](https://github.com/gastownhall/gastown), [Obsidian](https://obsidian.md), [Graphify](https://github.com/safishamsi/graphify), and [RTK](https://github.com/rtk-ai/rtk) behind the scenes.\n\nStart features, continue previous work, review pull requests, check status, or bootstrap entire projects -- all without thinking about bead IDs, convoy commands, or tool-specific syntax.\n\n## Getting started\n\n### Prerequisites\n\n- [Claude Code](https://code.claude.com/docs/en/quickstart) installed and authenticated\n- [Gastown (`gt`)](https://github.com/gastownhall/gastown) installed\n- [Obsidian](https://obsidian.md) installed with the [Local REST API](https://github.com/coddingtonbear/obsidian-local-rest-api) community plugin enabled (see [Setting up Obsidian](#setting-up-obsidian))\n- [Graphify](https://github.com/safishamsi/graphify) installed\n- [RTK](https://github.com/rtk-ai/rtk) installed\n- [Git](https://git-scm.com/) and [GitHub CLI (`gh`)](https://cli.github.com/) installed\n\n> `/concierge:setup` can install RTK and Graphify for you if they are missing, but all four tools are required for the full concierge experience.\n\n### Install the plugin\n\nAdd the marketplace and install the plugin:\n\n```\n/plugin marketplace add nsxbet/concierge\n/plugin install concierge@nsxbet-concierge\n```\n\n### Set up your environment\n\nAfter installing, run:\n\n```\n/concierge:setup\n```\n\nThis audits your machine and walks you through setting up everything concierge needs -- Gastown, Obsidian (including the MCP server connection), Graphify, and RTK. Once setup is complete, you're ready to go:\n\n```\n/concierge:go\n```\n\n## Skills\n\nConcierge provides three skills:\n\n### `/concierge:go` -- Conversational intake and dispatch\n\n> **Run `/concierge:setup` first** to make sure your environment is properly configured. Setup detects and fixes missing tools, broken connections, and vault issues before they cause problems during work.\n\nThe main entry point. Describe what you want in plain language and concierge figures out the rest.\n\n```\n/concierge:go start the checkout coupon feature for shop\n/concierge:go continue previous work on onboarding\n/concierge:go start a new project from https://github.com/acme/analytics-api\n/concierge:go what is blocked in shop right now?\n/concierge:go review PR 142 on flags\n/concierge:go review PR 142 on flags and post it\n```\n\nWhat it handles:\n\n| Intent | What concierge does |\n|:--|:--|\n| **New feature** | Resolves rigs, creates project and feature notes in Obsidian, ensures Graphify is fresh, dispatches work via `gt sling` |\n| **Continue work** | Recovers context from the working directory, `gt hook`, `gt convoy list`, `gt trail`, and Obsidian notes, then resumes |\n| **New project** | Initializes GT if needed, adds rigs, creates vault structure, installs Graphify, kicks off the first task |\n| **Status/blockers** | Queries `gt convoy status`, `gt rig status`, or `gt peek` and summarizes in plain language |\n| **PR review** | Fetches the diff via `gh`, grades the PR (A-F), writes a structured review note to Obsidian, and optionally posts it to GitHub |\n\n### `/concierge:plan` -- Interactive planning\n\n> **Run `/concierge:setup` first** to make sure your environment is properly configured. Planning relies on Graphify and Obsidian -- setup ensures both are connected and working.\n\nInterviews you about a piece of work, explores the codebase, and produces a structured plan in Obsidian before any code is written.\n\n```\n/concierge:plan\n/concierge:plan new feature for the shop checkout flow\n/concierge:plan refactor the authentication middleware in api\n/concierge:plan improve test coverage for the payments module\n/concierge:plan security analysis of the public API surface\n```\n\nHow it works:\n\n1. **Discovery** -- open-ended questions to understand what you want and why\n2. **Type detection** -- identifies the work type (New Feature, Refactor, Migration, Bug Fix, Test Improvement, Performance Improvement, Security Analysis, Infrastructure, Documentation Update, Dependency Updates, or custom) and tailors the interview\n3. **Codebase scan** -- uses Graphify to understand each involved rig's structure, patterns, and constraints\n4. **Structured interview** -- asks questions one at a time with three options, tradeoffs, and a recommendation (you can always type your own answer)\n5. **Plan generation** -- writes the plan to `Plans/{project}/{date}-{slug}.md` with phases, milestones, dependencies, and technology decisions\n6. **Handoff** -- offers to start Phase 1 via `/concierge:go`, or you can review and edit the plan in Obsidian first\n\nEach plan includes:\n\n- **Status** with metadata (type, rigs, phase count)\n- **Overview** of what you're trying to achieve\n- **Decisions** recorded during the interview with rationale\n- **Phases** (target 5-15) with dependencies and acceptance criteria\n- **Milestones** per phase (target 10-30), each assigned to a single rig, with a verification milestone at the end of every phase (style, unit, integration, demo)\n- **Technology Decisions** table with rationale\n\nPlans map directly to Gastown: each phase becomes a convoy, each milestone becomes a bead dispatched to its tagged rig.\n\n### `/concierge:setup` -- Environment initialization and repair\n\nAudits and fixes your local foundation so `/concierge:go` can operate smoothly.\n\n```\n/concierge:setup\n/concierge:setup audit everything\n/concierge:setup initialize the workspace and ask me for rig urls\n/concierge:setup set up shop and growth\n/concierge:setup refresh graphify on all rigs\n```\n\nWhat it checks and repairs:\n\n- **Gastown** -- initializes the GT root if missing, adds rigs from repo URLs\n- **`gt-stack` helper** -- symlinks the bundled stacked-PR helper into `~/.local/bin` (see [Stacked PRs](#stacked-prs))\n- **Obsidian vault** -- creates the folder structure (`Projects/`, `Plans/`, `Shared/`, `PR-Reviews/`, `Analysis/`)\n- **RTK** -- installs via Homebrew or the official installer, runs `rtk init --global`\n- **Graphify** -- installs the package, runs `graphify install`, builds or refreshes graphs on each rig\n\n### Stacked PRs\n\nConcierge ships `gt-stack`, a thin helper for stacked pull requests on GitHub. When a plan marks a phase as stacked (via `/concierge:plan`), `/concierge:go` dispatches work so each milestone lands as its own PR in a dependency chain, reviewed independently and merged bottom-up.\n\nThe helper follows three rules: one commit per branch (iterate with `git commit --amend` + `gt-stack submit`), merge bottom-up, and restack after every amend or merge. The full convention, command reference, and typical flow are in [CONCIERGE_STACK.md](./CONCIERGE_STACK.md).\n\n## Configuration\n\nConcierge uses environment variables to locate your workspace. Set these in your shell profile (e.g. `~/.zshrc`) or in your Claude Code settings.\n\n### Environment variables\n\n| Variable | Purpose | Default |\n|:--|:--|:--|\n| `MAIN_GT_ROOT` | Primary Gastown root directory | `~/gt` |\n| `GT_TOWN_ROOT` | Fallback GT root (checked if `MAIN_GT_ROOT` is unset) | `~/gt` |\n| `MAIN_OBSIDIAN_ROOT` | Primary Obsidian vault path | `~/notes/work` |\n| `OBSIDIAN_VAULT` | Fallback vault path (checked if `MAIN_OBSIDIAN_ROOT` is unset) | `~/notes/work` |\n\nResolution order: concierge checks the primary variable first, then the fallback, then uses the default.\n\nExample shell configuration:\n\n```bash\n# ~/.zshrc\nexport MAIN_GT_ROOT=\"$HOME/gt\"\nexport MAIN_OBSIDIAN_ROOT=\"$HOME/notes/work\"\n```\n\n### Concierge config\n\nThe Obsidian vault is composed of independent git repositories — one per shared knowledge source plus one personal vault. Concierge reads the list of repositories from a JSON config.\n\nResolution order:\n\n1. `CONCIERGE_CONFIG` environment variable (inline JSON). Takes precedence when set.\n2. `~/.concierge.json` file.\n3. If neither is present, `/concierge:setup` will collect the values conversationally on first run and write `~/.concierge.json` for you.\n\nConfig shape:\n\n```json\n{\n  \"shared\": {\n    \"Engineering\": \"git@github.com:your-org/obsidian-engineering.git\",\n    \"Team\": \"git@github.com:your-org/obsidian-<team>.git\"\n  },\n  \"user\": \"git@github.com:your-org/obsidian-user-<you>.git\"\n}\n```\n\n- `user` is required. Everything concierge writes (project notes, plans, PR reviews, analyses) lives under `User/`.\n- `shared` is optional. Each entry becomes a subfolder under `Shared/` whose name is the key with its first character capitalized (`engineering` -> `Engineering`; `SecurityPlatform` stays `SecurityPlatform`).\n- URLs are cloned verbatim — use whichever form (SSH or HTTPS) has the right access for the repo.\n\nInline JSON via env var (useful for CI or ephemeral environments):\n\n```bash\nexport CONCIERGE_CONFIG='{\"shared\":{\"Engineering\":\"git@github.com:acme/obsidian-engineering.git\"},\"user\":\"git@github.com:acme/obsidian-user-alice.git\"}'\n```\n\n### Vault structure\n\nConcierge builds the vault by cloning each configured repository into the vault root:\n\n```\n<vault>/                     # not a git repo itself; just a container\n  README.md                  # generated map of the vault\n  Shared/\n    <Name>/                  # one cloned repo per entry in config shared:\n  User/                      # cloned from config user:\n    Projects/<Project>/\n      Convoys/               # feature/work-tracking notes\n      Decisions/             # durable architectural decisions\n      Notes/                 # working notes and research\n    Plans/<Project>/\n      <date>-<slug>.md              # structured plans\n      <date>-<slug>-interview.md    # interview transcripts\n    PR-Reviews/<project>/<PR-number>/\n      <review-number>.md\n    Analysis/<project>/\n      <date>-<slug>.md\n```\n\nClone behavior is idempotent and fail-closed: missing folders are cloned fresh; folders already present with the matching origin are left alone; folders present with a different origin (or that are not git repos) cause setup to fail so nothing is silently overwritten.\n\n## Setting up Obsidian\n\nObsidian is where concierge keeps all project context -- feature notes, PR reviews, architectural decisions, and analysis documents. Concierge reads and writes these as plain Markdown files, but Obsidian gives you a rich UI for browsing, linking, and editing them.\n\n### 1. Install Obsidian\n\nDownload from [obsidian.md](https://obsidian.md) and open your vault directory (the path from `MAIN_OBSIDIAN_ROOT` or `~/notes/work` by default) as a vault.\n\n### 2. Enable the Local REST API plugin\n\nThe REST API lets Claude Code interact with Obsidian for searching notes, reading rendered content, and appending updates through the app.\n\n1. In Obsidian, go to **Settings > Community plugins > Browse**\n2. Search for **Local REST API** and install it ([plugin page](https://github.com/coddingtonbear/obsidian-local-rest-api))\n3. Enable the plugin and note the API key it generates\n4. The API runs on `https://localhost:27124` by default\n\n### 3. Connect Claude Code to Obsidian via MCP\n\nThe [Obsidian MCP server](https://github.com/MarkusPfundstein/mcp-obsidian) connects Claude Code to your vault through the Model Context Protocol, enabling full-text search, reading, and appending to notes.\n\n1. Make sure the Local REST API plugin is enabled (step 2 above)\n2. Add the server to your Claude Code MCP configuration (in `~/.claude/.mcp.json` or your project's `.mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-obsidian\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-obsidian\"],\n      \"env\": {\n        \"OBSIDIAN_API_KEY\": \"<your-api-key-from-local-rest-api>\"\n      }\n    }\n  }\n}\n```\n\n3. Restart Claude Code or run `/reload-plugins` to pick up the new MCP server\n\n> Concierge can also read and write vault files directly when Obsidian is not running. The MCP connection adds full-text search and rendered content access on top of that.\n\n## How it works\n\nConcierge sits on top of four tools and translates plain-language intent into the right sequence of commands:\n\n```\n  You: \"start the checkout coupon feature for shop\"\n   |\n   v\n concierge:go\n   |\n   +-- resolves GT root, finds the \"shop\" rig\n   +-- creates/updates Obsidian notes (project + feature)\n   +-- refreshes Graphify on the rig\n   +-- dispatches work via gt sling\n   |\n   v\n \"I'm starting the Shop coupon feature on the shop rig.\n  Created Projects/Shop/Convoys/checkout-coupon.md.\n  Dispatched bead to shop.\"\n```\n\nThe four pillars:\n\n- **Gastown** manages repos (rigs), work items (beads), cross-repo features (convoys), and agent sessions\n- **Obsidian** holds project notes, feature tracking, PR reviews, decisions, and analysis documents\n- **Graphify** builds a code graph so the agent understands repo structure and can query code paths\n- **RTK** compresses noisy shell output (git status, ls, grep, test runs) to save tokens\n\n## License\n\nMIT\n"}