Westline CommandCommandCenter
Setup guide

Repository setup

Wire a repo so a cold Claude Code session starts from the Command Center brief. Four steps; the dashboard tells you when each one is done.

Step 00

Prerequisites

What you need on your machine before starting.

  • Node 20+ and pnpm 10+ (this repo's root package.json pins both).
  • Git on the machine hosting the target client repo.
  • Claude Code (or any MCP-capable agent) with config access (~/.claude/settings.json or equivalent).
  • An MCP token for this Command Center, generated under /settings/tokens.

Step 01

Wire a repo

Adds .westline/project.json and an AGENTS.md / CLAUDE.md snippet. Run this from the root of the target client repo.

pnpm wire-repo --repo /path/to/client/repo --client rose-landscape --project job-costing-app

Schema: /schemas/project.v1.json

What gets written

.westline/project.json

{
  "$schema": "https://command.westline.dev/schemas/project.v1.json",
  "version": 1,
  "client_slug": "rose-landscape",
  "project_slug": "job-costing-app",
  "command_center": {
    "mcp_url": "https://mcp.command.westline.dev/mcp",
    "dashboard_url": "https://command.westline.dev/c/rose-landscape/p/job-costing-app",
    "vault_url": "https://command.westline.dev/c/rose-landscape/p/job-costing-app/v"
  }
}

AGENTS.md / CLAUDE.md snippet

## Project tracker — Westline Command Center

This project is tracked at https://command.westline.dev (config: `.westline/project.json`).

### Required first action
Before reading any other files or making any changes, call:

    get_project_brief(project_slug="rose-landscape/job-costing-app")

It returns: vision, current focus, next-up tasks, recent decisions, recent
handoffs, and the project plan/architecture from the vault. Treat this as
your starting context — it replaces re-reading scattered docs.

### When you make a meaningful decision
Call `log_decision(...)` so it's captured for future sessions.

### Required last action
Before ending the session, call:

    log_handoff(project_slug="rose-landscape/job-costing-app", summary="...", next_actions="...")

This writes to the project's vault and updates the changelog.

### Status changes
Call `mark_task(id, status, note)` whenever you start, finish, block, or
unblock work. The note is required.

Step 02

Register the MCP token

Add the Command Center server to Claude Code's MCP config with a bearer token. The token does not live in the repo — it stays in your local agent config.

  1. Open /settings/tokens, click New token, and name it for the machine you're on (e.g. macbook-pro).
  2. Copy the token once — the dashboard only shows the first 8 chars after creation.
  3. Paste it into your Claude Code MCP config (server name westline-command by convention):
{
  "mcpServers": {
    "westline-command": {
      "url": "https://mcp.command.westline.dev/mcp",
      "headers": { "Authorization": "Bearer wlc_..." }
    }
  }
}

Step 03

Verify the cold start

Open Claude Code in the wired repo with no prior chat history and ask “what's next?” The first tool call should be get_project_brief.

What the agent will do on cold start:

┌─────────────────────────────────────────────────────────────────┐
│  Fresh Claude Code session opens in a wired repo                │
│  (no chat history, no preloaded context)                        │
└──────────────────────────────┬──────────────────────────────────┘
                               │  reads .westline/project.json
                               │  reads AGENTS.md / CLAUDE.md
                               ▼
┌─────────────────────────────────────────────────────────────────┐
│  1. get_project_brief(client_slug/project_slug)                 │
│     <- vision, current focus, next tasks, recent decisions,     │
│        recent handoffs, plan + architecture notes               │
└──────────────────────────────┬──────────────────────────────────┘
                               │
                               ▼
┌─────────────────────────────────────────────────────────────────┐
│  2. get_next_recommended_tasks(project_slug)                    │
│     <- prioritized tasks the agent should pick up               │
└──────────────────────────────┬──────────────────────────────────┘
                               │  agent works the task
                               ▼
┌─────────────────────────────────────────────────────────────────┐
│  3. mark_task(id, "in_progress" -> "done", note)                │
│  4. log_decision(...) when judgment calls happen                │
│  5. log_handoff(...) at the end of the session                  │
└─────────────────────────────────────────────────────────────────┘

Watch the calls land in real time under /sessions and /audit. If get_project_brief is not the first call, double-check that the AGENTS.md / CLAUDE.md snippet is loaded and the MCP server is registered.