/ouroboros:setup skill

Guided onboarding wizard for Ouroboros setup

by Q00·MIT license·★ 6,178 Stars on the repo·GitHub ↗

Use now

Files of /ouroboros:setup

Q00/main1 file shown
SKILL.md
Show the full text710 lines

/ouroboros:setup

Guided onboarding wizard that converts users into power users.

Standalone users (Codex, pip install): Use ouroboros setup --runtime codex in your terminal instead. This skill runs inside a Claude Code session. For other runtime backends, the CLI ouroboros setup command handles configuration. For full install and onboarding instructions, see Getting Started.

GitHub Copilot CLI users: Run ouroboros setup --runtime copilot (after pipx install 'ouroboros-ai[mcp]' or uv tool install 'ouroboros-ai[mcp]'). Setup will:

  1. Live-discover available models from the GitHub Copilot models API (uses gh auth token) and let you pick a default. A bundled fallback list is used when offline.
  2. Write orchestrator.runtime_backend = copilot and llm.backend = copilot plus your chosen default into ~/.ouroboros/config.yaml.
  3. Register the MCP server in ~/.copilot/mcp-config.json so the next copilot session can call ooo ... skills.

Hyphen Anthropic IDs that the Ouroboros defaults use (for example claude-opus-4-6) are auto-mapped at runtime to the dotted form Copilot CLI expects (claude-opus-4.6), so existing config files keep working when you switch backends.

Usage

ooo setup
/ouroboros:setup
/ouroboros:setup --uninstall

Note: Claude setup does two things:

  1. Runtime configuration — selects the Claude Agent SDK profile on MCP 1.x
  2. CLAUDE.md integration (optional) — per-project, adds an Ouroboros command reference block

It deliberately leaves ~/.claude/mcp.json untouched because marketplace plugin wiring owns that file. [claude] and its explicit [claude-sdk] alias use MCP 1.x. The plugin launches [mcp] in a separate MCP 2 process with the dependency-free [claude-cli] worker.


Setup Wizard Flow

When the user invokes this skill, guide them through an enhanced 6-step wizard with progressive disclosure and celebration checkpoints.

Python Runtime (Required)

Before running any shell snippet below, define this resolver in the same shell. It accepts only Python 3.12 or newer, prefers python3 and then python, and uses uv as the final fallback. Call ouroboros_python directly and quote every argument passed to it; the function preserves arguments and heredoc/stdin input. Only the probe and child interpreter discard inherited CPython path-selection overrides; the caller shell keeps its environment unchanged.

ouroboros_python() {
  if command -v python3 >/dev/null 2>&1 &&
    (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
  then
    (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 "$@")
    return
  fi
  if command -v python >/dev/null 2>&1 &&
    (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
  then
    (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python "$@")
    return
  fi
  if command -v uv >/dev/null 2>&1; then
    (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command uv run --no-project --quiet --python '>=3.12' python "$@")
    return
  fi
  printf '%s\n' 'Ouroboros skills require Python >= 3.12 or uv on PATH.' >&2
  return 127
}

Step 0: Welcome & Motivation (The Hook)

Start with energy and clear value:

Welcome to Ouroboros Setup!

Let's unlock your full AI development potential.

What you'll get:
- Visual TUI dashboard for real-time progress tracking
- 3-stage evaluation pipeline for quality assurance
- Drift detection to keep projects on track
- Cost optimization (85% savings on average)

Setup takes ~2 minutes. Let's go!

Step 0.5: Community Support

Before we begin, check ~/.ouroboros/prefs.json for star_asked. If not true, use AskUserQuestion:

{
  "questions": [{
    "question": "Ouroboros is free and open-source. A GitHub star helps other developers discover it. Star the repo?",
    "header": "Community",
    "options": [
      {
        "label": "Star on GitHub",
        "description": "Takes 1 second — helps the project grow"
      },
      {
        "label": "Skip for now",
        "description": "Continue with setup"
      }
    ],
    "multiSelect": false
  }]
}
  • Star on GitHub: Run gh api -X PUT /user/starred/Q00/ouroboros, then merge {"star_asked": true} into ~/.ouroboros/prefs.json
  • Skip for now: Merge {"star_asked": true} into ~/.ouroboros/prefs.json
  • Other: Merge {"star_asked": true} into ~/.ouroboros/prefs.json

Create ~/.ouroboros/ directory if it doesn't exist. Preserve any existing keys such as welcomeShown, welcomeCompleted, and welcomeVersion when updating star_asked:

ouroboros_python - <<'PY'
import json, os
path = os.path.expanduser('~/.ouroboros/prefs.json')
os.makedirs(os.path.dirname(path), exist_ok=True)
try:
    with open(path, encoding='utf-8') as f:
        prefs = json.load(f)
    if not isinstance(prefs, dict):
        prefs = {}
except Exception:
    prefs = {}
prefs['star_asked'] = True
with open(path, 'w', encoding='utf-8') as f:
    json.dump(prefs, f, indent=2)
    f.write('\n')
PY

If star_asked is already true, skip this step silently.


Step 1: Environment Detection

Check the user's environment with clear feedback:

ouroboros_python --version
which uvx 2>/dev/null && uvx --version 2>/dev/null
which claude 2>/dev/null

For diagnostics, list uv-managed Python installations when uv is available:

uv python list 2>/dev/null | grep "cpython-3.1[2-9]"

The resolver already rejects system Python below 3.12 and provisions a compatible uv-managed Python when needed. This does not make the isolated [claude-sdk] and MCP 2 profiles import-compatible.

Report results with personality:

Environment Detected:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Skill Python 3.12+         [✓] Resolver-selected
uv Python 3.12+            [✓] Available
uvx package runner         [✓] Available
Runtime backend            [✓] Detected

→ Full Mode Available (via uvx + uv-managed Python >= 3.12)

Decision Matrix:

Environment Mode Action
Python >= 3.12 + Claude CLI Ready Configure [claude] SDK/MCP 1 and skills
uvx + Python >= 3.12 MCP-capable elsewhere Use a supported CLI-backed runtime setup for isolated ouroboros-ai[mcp]
Python < 3.12 only Install needed Run uv python install 3.12 then proceed
No package runner or Ouroboros package Install needed Install uv first, then proceed

If deps are missing and the user doesn't want to fix manually, recommend uv. Prefer package-manager paths over the vendor pipe-to-shell when the user's environment supports them (pipx > pip > brew > vendor one-liner):

Or install uv (recommended — handles deps automatically). Any one of:
  pipx install uv
  pip install --user uv
  brew install uv          # macOS / Linuxbrew
  curl -LsSf https://astral.sh/uv/install.sh | sh   # vendor one-liner (last resort)
Then re-run: ooo setup

IMPORTANT: Never install [mcp,claude], [mcp,claude-sdk], or [all,mcp] together and never write a direct ouroboros or python -m ouroboros MCP fallback. MCP 2 launchers must use an isolated uvx --isolated --python '>=3.12' --from 'ouroboros-ai[mcp]' ... or pipx run --spec 'ouroboros-ai[mcp]' ... process. Only [mcp,claude-cli] is supported because the CLI worker is out of process. Do not write an Ouroboros entry to ~/.claude/mcp.json; the plugin owns that registration.

If prerequisites are missing, show:

Ouroboros requires uvx (recommended) or the ouroboros package installed.

Quick install (< 1 minute) — install uv via any of:
  pipx install uv
  pip install --user uv
  brew install uv          # macOS / Linuxbrew
  curl -LsSf https://astral.sh/uv/install.sh | sh   # vendor one-liner (last resort)
Then:
  uv python install 3.12

Then re-run: ooo setup

Celebration Checkpoint 1:

Great news! You're ready for the full Ouroboros experience.

Step 2: MCP Profile Boundary

Show progress:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Verifying Runtime Boundary...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

The default Claude SDK profile stays on MCP 1.x. The plugin-owned MCP server
runs MCP 2 separately and selects the `[claude-cli]` worker.
This setup enables:

  Visual TUI Dashboard    [Watch execution in real-time]
  3-Stage Evaluation     [Mechanical → Semantic → Consensus]
  Drift Detection        [Alert when projects go off-track]
  Session Replay         [Debug any execution from events]

Do not create, update, or remove ~/.claude/mcp.json. Existing entries may be user-managed or belong to another compatible runtime. Explain that advanced MCP workflows require a host-managed isolated [mcp] launcher. The Claude marketplace plugin or another supported host setup owns that registration.

Celebration Checkpoint 2:

Runtime boundary verified! You can now:
- Use Claude-native ooo interview, seed, evaluate, and unstuck workflows
- Use the Claude SDK on MCP 1.x with isolated MCP 2 tools
- Keep the Claude SDK and MCP 2 dependency graphs conflict-free

Step 3: CLAUDE.md Integration (Optional)

Ask with clear value proposition:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  CLAUDE.md Integration
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Add Ouroboros quick-reference to your CLAUDE.md?

This gives you instant command reminders without leaving
your project context.

What gets added (~40 lines):
- Philosophy and pipeline overview
- Command routing table with lazy-loaded agents
- Agent catalog summary

A backup will be created: CLAUDE.md.bak

[Integrate / Skip / Preview first]

If "Preview first", show:

<!-- ooo:START -->
<!-- ooo:VERSION:0.55.4 -->
# Ouroboros — Specification-First AI Development

> Before telling AI what to build, define what should be built.
> As Socrates asked 2,500 years ago — "What do you truly know?"
> Ouroboros turns that question into an evolutionary AI workflow engine.

Most AI coding fails at the input, not the output. Ouroboros fixes this by
**exposing hidden assumptions before any code is written**.

1. **Socratic Clarity** — Question until ambiguity ≤ 0.2
2. **Ontological Precision** — Solve the root problem, not symptoms
3. **Evolutionary Loops** — Each evaluation cycle feeds back into better specs

```
Interview → Seed → Execute → Evaluate
    ↑                           ↓
    └─── Evolutionary Loop ─────┘
```

## ooo Commands

Each command loads its agent/MCP on-demand. Details in each skill file.

| Command | Loads |
|---------|-------|
| `ooo` | — |
| `ooo interview` | `ouroboros:socratic-interviewer` |
| `ooo seed` | `ouroboros:seed-architect` |
| `ooo run` | MCP required |
| `ooo evolve` | MCP: `evolve_step` |
| `ooo evaluate` | `ouroboros:evaluator` |
| `ooo unstuck` | `ouroboros:{persona}` |
| `ooo status` | MCP: `session_status` |
| `ooo setup` | — |
| `ooo help` | — |

## Agents

Loaded on-demand — not preloaded.

**Core**: socratic-interviewer, ontologist, seed-architect, evaluator,
wonder, reflect, advocate, contrarian, judge
**Support**: hacker, simplifier, researcher, architect
<!-- ooo:END -->

If Integrate:

  1. Backup existing CLAUDE.md to CLAUDE.md.bak
  2. Append the block above
  3. Confirm successful integration

Celebration Checkpoint 3:

CLAUDE.md updated! You now have instant Ouroboros reference
available in every project.

Step 4: Quick Verification

Run verification with visual feedback:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Verifying Setup...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Check skills are loadable:

ls skills/ | wc -l  # Should show 12+ skills

Check agents are available:

ls src/ouroboros/agents/*.md | wc -l  # Should show 20+ bundled agents

Confirm the saved Ouroboros config selects the default Claude Agent SDK runtime on MCP 1.x while ~/.claude/mcp.json was not mutated by this setup. The dependency-free Claude CLI worker remains a distinct, explicit [claude-cli] selection for the isolated MCP 2 process.


Step 5: Success Summary

Display with celebration:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Ouroboros Setup Complete!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Mode:                     Claude Agent SDK (MCP 1.x)
Skills Registered:        15 workflow skills
Agents Available:         9 specialized agents
MCP Server:               Host-owned (config not mutated)
CLAUDE.md:                ✓ Integrated

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  You're Ready to Go!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Start your first project:
  ooo interview "your project idea"

Learn what's possible:
  ooo help

Try the interactive tutorial:
  ooo tutorial

Join the community:
  Star us on GitHub! github.com/Q00/ouroboros

Step 5.1: Model Choice (Claude Code)

Before continuing to repository setup, give Claude Code users the same optional control over models without making it a requirement. Ask in the user's language; for Korean, use:

{
  "questions": [{
    "question": "설정이 완료됐어요. 기본 모델 설정으로 바로 시작할 수 있고, 모델은 언제든 나중에 바꿀 수 있어요.",
    "header": "모델 설정",
    "options": [
      {
        "label": "바로 시작하기 (권장)",
        "description": "기본 모델 설정으로 바로 작업을 시작해요"
      },
      {
        "label": "직접 모델 설정하기",
        "description": "단계별로 모델을 바꾸거나 목록에 없는 모델 ID를 입력해 고정해요"
      }
    ],
    "multiSelect": false
  }]
}
  • 바로 시작하기: Continue to Step 5.5.
  • 직접 모델 설정하기: Read and follow ../config/SKILL.md. In the local Claude Code harness, it opens the same settings UI in the user's browser at a temporary localhost address. They can reopen it any time with ooo config; this choice never permanently locks a model.

Step 5.5: Brownfield Repository Scan

Scan a root directory for existing git repositories and linked worktrees, then register them in the Ouroboros DB. This enables interviews to use brownfield context for existing projects.

Show scanning indicator:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Scanning for Existing Projects...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Looking for git repositories and worktrees up to two directories below the scan root.
Only repositories and worktrees reached directly by this depth-bounded walk are registered.
Local repos and repos with any remote name are eligible.
This may take a moment...

Implementation — use MCP tools only, do NOT use CLI or Python scripts:

CRITICAL — deferred-schema guard (prevents "Invalid tool parameters"): setup can call ouroboros_brownfield before and after a user-selection turn. A deferred schema loaded before scan is NOT guaranteed to remain loaded for the later set_defaults call. Immediately before EVERY ouroboros_brownfield call in this section, re-run tool discovery query: "+ouroboros brownfield" (idempotent — a no-op when already loaded). If the load returns no matching tool (and the tool is not already callable — an empty load for an already-exposed tool is an expected no-op, not absence), use the non-MCP setup fallback instead of retrying the failing call.

  1. Load the brownfield MCP tool: tool discovery query: "+ouroboros brownfield"
  2. Call scan+register:
    Tool: ouroboros_brownfield
    Arguments: { "action": "scan" }
    
    This walks scan_root up to two directory levels deep for valid seed repos/worktrees and registers them in DB. Each repo or worktree reached directly by the walk is registered self-only. Git worktree families are not expanded, so main or sibling worktrees outside the depth-bounded walk are not pulled in. Existing defaults are preserved.

Scan boundaries:

  • The filesystem walk starts at scan_root; when omitted, scan_root defaults to the current user's home directory.
  • Repositories are discovered directly by walking directories inside scan_root, at most two levels deep.
  • Dot-prefixed directories and known noisy directories such as node_modules are not walked as seed locations.
  • Both normal repos with a .git directory and linked worktrees with a .git file are registered when the walk reaches them.
  • Git worktree families are not expanded. A worktree is registered only when the depth-bounded walk finds it directly.
  • Local repos, repos without remotes, and repos whose remotes are not named origin are all eligible.

The scan response text already contains a pre-formatted numbered list with [default] markers. Do NOT make any additional MCP calls to list or query repos.

Display the repos in a plain-text 2-column grid (NOT a markdown table). Use a code block so columns align. Example:

Scan complete. 8 repositories registered.

 1. repo-alpha                   5. repo-epsilon
 2. repo-bravo *                 6. repo-foxtrot
 3. repo-charlie                 7. repo-golf *
 4. repo-delta                   8. repo-hotel

Include * markers for defaults exactly as they appear in the scan response. Do not summarize or truncate the list. The user needs to see all repo numbers to pick defaults.

If no repos found, skip the default selection prompt and proceed to Step 6.

Default repo selection — end the turn with the list:

Do NOT use AskUserQuestion for this selection. Assistant text emitted between tool calls is not guaranteed to render, so a question dialog fired in the same turn can appear without the repo list the user needs to answer it. Option preview fields cannot hold the list either — the preview box has a fixed height and silently truncates long lists.

Instead, end the turn with the repo grid as the final message so its display is guaranteed, and collect the selection as a plain chat reply.

Immediately below the grid, append the selection prompt:

If defaults exist:

Current defaults: <current default names> (numbers <current default numbers>)

Reply with repo numbers to change defaults (e.g. "6, 18, 19"),
"keep" to keep the current defaults, or "none" to clear them.

If no defaults exist:

No defaults set.

Reply with repo numbers to set defaults (e.g. "6, 18, 19"),
or "none" to run interviews in greenfield mode.

Then end the turn — no tool calls after the grid.

On the next turn, parse the user's reply:

  • Numbers (any separator) → those indices
  • "keep" (defaults exist) → skip the MCP call, confirm defaults unchanged, proceed to Step 6
  • "none" → empty indices (clear all)
  • Anything else → ask again in plain text; do not guess

Then re-run tool discovery query: "+ouroboros brownfield" and use ONE MCP call to update all defaults at once:

Tool: ouroboros_brownfield
Arguments: { "action": "set_defaults", "indices": "<comma-separated IDs>" }

Example: if the user picks IDs 6, 18, 19 → { "action": "set_defaults", "indices": "6,18,19" }

This clears all existing defaults and sets the selected repos as default in one call.

If "none" → { "action": "set_defaults", "indices": "" } to clear all defaults.

Celebration Checkpoint 5.5:

Brownfield defaults updated!
Defaults: podo-app, podo-backend, grape

These repos will be used as context in interviews.

Or if "none" selected:

No default repos set. interviews will run in greenfield mode.
You can set defaults anytime by running ooo setup again.

Step 6: First Project Nudge

Encourage immediate action:


Your first Ouroboros project is waiting!

The best way to learn is by doing. Try:

  ooo interview "Build a CLI tool for [something you need]"

Or explore examples:
  ooo tutorial

You're going to love seeing vague ideas turn into
crystal-clear specifications. Let's build something amazing!

Progressive Disclosure Schedule

Reveal features gradually to avoid overwhelm:

Immediate (Plugin Mode)
  • ooo interview - Socratic clarification
  • ooo seed - Specification generation
  • ooo unstuck - Lateral thinking
After a Supported MCP Host Setup
  • ooo run - TUI execution
  • ooo evaluate - 3-stage verification
  • ooo status - Drift tracking
Power User (Discover organically)
  • Evolutionary loop and ralph persistence
  • Cost prediction and optimization
  • Session replay and debugging
  • Custom agents and skills

Uninstall

When invoked with --uninstall:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Ouroboros Uninstall
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

This will remove:
- Ouroboros block from CLAUDE.md

This will NOT remove:
- Plugin files in .claude-plugin/
- Any generated seeds or projects
- Your project data

Uninstall Ouroboros configuration? [Yes / No]

If Yes:

  1. Leave ~/.claude/mcp.json untouched
  2. Remove <!-- ooo:START --> to <!-- ooo:END --> block from CLAUDE.md (if exists)
  3. Confirm: "Ouroboros plugin configuration removed. To remove plugin files, run: claude plugin uninstall ouroboros"

Setup Troubleshooting

"No compatible Python found"
Plugin mode works without a global Python when uv is on PATH. The skill
resolver uses a compatible python3, then python, then uv-managed Python >= 3.12.

If neither a compatible interpreter nor uv is available, install one:
  macOS: brew install [email protected]
  Ubuntu: sudo apt install python3.12
  Windows: python.org/downloads
"uvx: command not found"
uvx is recommended but not required. Alternative:

For the default Claude SDK runtime:
  pip install 'ouroboros-ai[claude]'

`[claude-sdk]` is an explicit alias. Use `[claude-cli]` only for the isolated
MCP 2 server worker. Do not combine `[claude]`, `[claude-sdk]`, or `[all]` with
`[mcp]`, and do not add a direct Python fallback to mcp.json.
"~/.claude/mcp.json conflicts"
Ouroboros will merge with existing MCP servers.
If you see issues, share your ~/.claude/mcp.json content and
we'll help you resolve conflicts.

Conversion Metrics Track

Track these checkpoints for conversion optimization:

  • Started setup (skill invoked)
  • Environment detected successfully
  • MCP/Claude profile boundary explained
  • CLAUDE.md integration accepted
  • Verification passed
  • Brownfield repos scanned and registered
  • Default brownfield repo selected
  • First project started (ooo interview)
  • First seed generated (ooo seed)
  • First execution completed (ooo run)

A fully converted user = all checkpoints passed

Your final response MUST end with exactly one breadcrumb footer line:

◆ <current state> → next: <recommended action>

Derive <current state> from live session state via ouroboros_session_status when that MCP projection is available; otherwise derive it from this skill's actual outcome. Never use a linear Step N of M footer because Ouroboros is an evolutionary loop. When the next action is genuinely a choice, list 2-3 honest options in the next: clause. The breadcrumb line must be the last line of the response.

1---
2name: setup
3description: "Guided onboarding wizard for Ouroboros setup"
4---
5 
6# /ouroboros:setup
7 
8Guided onboarding wizard that converts users into power users.
9 
10> **Standalone users** (Codex, pip install): Use `ouroboros setup --runtime codex` in your terminal instead.
11> This skill runs inside a Claude Code session. For other runtime backends, the CLI `ouroboros setup` command handles configuration.
12> For full install and onboarding instructions, see [Getting Started](https://github.com/Q00/ouroboros/blob/main/docs/getting-started.md).
13 
14> **GitHub Copilot CLI users**: Run `ouroboros setup --runtime copilot` (after `pipx install 'ouroboros-ai[mcp]'` or `uv tool install 'ouroboros-ai[mcp]'`). Setup will:
15>
16> 1. Live-discover available models from the GitHub Copilot models API (uses `gh auth token`) and let you pick a default. A bundled fallback list is used when offline.
17> 2. Write `orchestrator.runtime_backend = copilot` and `llm.backend = copilot` plus your chosen default into `~/.ouroboros/config.yaml`.
18> 3. Register the MCP server in `~/.copilot/mcp-config.json` so the next `copilot` session can call `ooo ...` skills.
19>
20> Hyphen Anthropic IDs that the Ouroboros defaults use (for example `claude-opus-4-6`) are auto-mapped at runtime to the dotted form Copilot CLI expects (`claude-opus-4.6`), so existing config files keep working when you switch backends.
21 
22## Usage
23 
24```
25ooo setup
26/ouroboros:setup
27/ouroboros:setup --uninstall
28```
29 
30> **Note**: Claude setup does two things:
31> 1. **Runtime configuration** — selects the Claude Agent SDK profile on MCP 1.x
32> 2. **CLAUDE.md integration** (optional) — per-project, adds an Ouroboros command reference block
33>
34> It deliberately leaves `~/.claude/mcp.json` untouched because marketplace
35> plugin wiring owns that file. `[claude]` and its explicit `[claude-sdk]` alias
36> use MCP 1.x. The plugin launches `[mcp]` in a separate MCP 2 process with the
37> dependency-free `[claude-cli]` worker.
38 
39---
40 
41## Setup Wizard Flow
42 
43When the user invokes this skill, guide them through an enhanced 6-step wizard with progressive disclosure and celebration checkpoints.
44 
45### Python Runtime (Required)
46 
47Before running any shell snippet below, define this resolver in the same shell.
48It accepts only Python 3.12 or newer, prefers `python3` and then `python`, and
49uses uv as the final fallback. Call `ouroboros_python` directly and quote every
50argument passed to it; the function preserves arguments and heredoc/stdin input.
51Only the probe and child interpreter discard inherited CPython path-selection
52overrides; the caller shell keeps its environment unchanged.
53 
54<!-- ouroboros-python-resolver:start -->
55```bash
56ouroboros_python() {
57 if command -v python3 >/dev/null 2>&1 &&
58 (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
59 then
60 (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python3 "$@")
61 return
62 fi
63 if command -v python >/dev/null 2>&1 &&
64 (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python -c 'import sys; raise SystemExit(sys.version_info < (3, 12))') >/dev/null 2>&1
65 then
66 (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command python "$@")
67 return
68 fi
69 if command -v uv >/dev/null 2>&1; then
70 (unset PYTHONHOME PYTHONPATH PYTHONPLATLIBDIR PYTHONEXECUTABLE __PYVENV_LAUNCHER__; command uv run --no-project --quiet --python '>=3.12' python "$@")
71 return
72 fi
73 printf '%s\n' 'Ouroboros skills require Python >= 3.12 or uv on PATH.' >&2
74 return 127
75}
76```
77<!-- ouroboros-python-resolver:end -->
78 
79---
80 
81### Step 0: Welcome & Motivation (The Hook)
82 
83Start with energy and clear value:
84 
85```
86Welcome to Ouroboros Setup!
87 
88Let's unlock your full AI development potential.
89 
90What you'll get:
91- Visual TUI dashboard for real-time progress tracking
92- 3-stage evaluation pipeline for quality assurance
93- Drift detection to keep projects on track
94- Cost optimization (85% savings on average)
95 
96Setup takes ~2 minutes. Let's go!
97```
98 
99---
100 
101### Step 0.5: Community Support
102 
103Before we begin, check `~/.ouroboros/prefs.json` for `star_asked`. If not `true`, use **AskUserQuestion**:
104 
105```json
106{
107 "questions": [{
108 "question": "Ouroboros is free and open-source. A GitHub star helps other developers discover it. Star the repo?",
109 "header": "Community",
110 "options": [
111 {
112 "label": "Star on GitHub",
113 "description": "Takes 1 second — helps the project grow"
114 },
115 {
116 "label": "Skip for now",
117 "description": "Continue with setup"
118 }
119 ],
120 "multiSelect": false
121 }]
122}
123```
124 
125- **Star on GitHub**: Run `gh api -X PUT /user/starred/Q00/ouroboros`, then merge `{"star_asked": true}` into `~/.ouroboros/prefs.json`
126- **Skip for now**: Merge `{"star_asked": true}` into `~/.ouroboros/prefs.json`
127- **Other**: Merge `{"star_asked": true}` into `~/.ouroboros/prefs.json`
128 
129Create `~/.ouroboros/` directory if it doesn't exist. Preserve any existing keys such as `welcomeShown`, `welcomeCompleted`, and `welcomeVersion` when updating `star_asked`:
130 
131```bash
132ouroboros_python - <<'PY'
133import json, os
134path = os.path.expanduser('~/.ouroboros/prefs.json')
135os.makedirs(os.path.dirname(path), exist_ok=True)
136try:
137 with open(path, encoding='utf-8') as f:
138 prefs = json.load(f)
139 if not isinstance(prefs, dict):
140 prefs = {}
141except Exception:
142 prefs = {}
143prefs['star_asked'] = True
144with open(path, 'w', encoding='utf-8') as f:
145 json.dump(prefs, f, indent=2)
146 f.write('\n')
147PY
148```
149 
150If `star_asked` is already `true`, skip this step silently.
151 
152---
153 
154### Step 1: Environment Detection
155 
156Check the user's environment with clear feedback:
157 
158```bash
159ouroboros_python --version
160which uvx 2>/dev/null && uvx --version 2>/dev/null
161which claude 2>/dev/null
162```
163 
164For diagnostics, list uv-managed Python installations when uv is available:
165 
166```bash
167uv python list 2>/dev/null | grep "cpython-3.1[2-9]"
168```
169 
170The resolver already rejects system Python below 3.12 and provisions a
171compatible uv-managed Python when needed. This does not make the isolated
172`[claude-sdk]` and MCP 2 profiles import-compatible.
173 
174**Report results with personality:**
175 
176```
177Environment Detected:
178━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
179 
180Skill Python 3.12+ [✓] Resolver-selected
181uv Python 3.12+ [✓] Available
182uvx package runner [✓] Available
183Runtime backend [✓] Detected
184 
185→ Full Mode Available (via uvx + uv-managed Python >= 3.12)
186```
187 
188**Decision Matrix:**
189 
190| Environment | Mode | Action |
191|:------------|:-----|:-------|
192| Python >= 3.12 + Claude CLI | **Ready** | Configure `[claude]` SDK/MCP 1 and skills |
193| uvx + Python >= 3.12 | **MCP-capable elsewhere** | Use a supported CLI-backed runtime setup for isolated `ouroboros-ai[mcp]` |
194| Python < 3.12 only | **Install needed** | Run `uv python install 3.12` then proceed |
195| No package runner or Ouroboros package | **Install needed** | Install uv first, then proceed |
196 
197If deps are missing and the user doesn't want to fix manually, recommend uv. Prefer
198package-manager paths over the vendor pipe-to-shell when the user's environment supports
199them (pipx > pip > brew > vendor one-liner):
200```
201Or install uv (recommended — handles deps automatically). Any one of:
202 pipx install uv
203 pip install --user uv
204 brew install uv # macOS / Linuxbrew
205 curl -LsSf https://astral.sh/uv/install.sh | sh # vendor one-liner (last resort)
206Then re-run: ooo setup
207```
208 
209**IMPORTANT**: Never install `[mcp,claude]`, `[mcp,claude-sdk]`, or `[all,mcp]`
210together and never write a direct
211`ouroboros` or `python -m ouroboros` MCP fallback. MCP 2 launchers must use an
212isolated `uvx --isolated --python '>=3.12' --from 'ouroboros-ai[mcp]' ...` or
213`pipx run --spec 'ouroboros-ai[mcp]' ...` process. Only `[mcp,claude-cli]` is
214supported because the CLI worker is out of process. Do not write
215an Ouroboros entry to `~/.claude/mcp.json`; the plugin owns that registration.
216 
217**If prerequisites are missing, show:**
218```
219Ouroboros requires uvx (recommended) or the ouroboros package installed.
220 
221Quick install (< 1 minute) — install uv via any of:
222 pipx install uv
223 pip install --user uv
224 brew install uv # macOS / Linuxbrew
225 curl -LsSf https://astral.sh/uv/install.sh | sh # vendor one-liner (last resort)
226Then:
227 uv python install 3.12
228 
229Then re-run: ooo setup
230```
231 
232**Celebration Checkpoint 1:**
233```
234Great news! You're ready for the full Ouroboros experience.
235```
236 
237---
238 
239### Step 2: MCP Profile Boundary
240 
241**Show progress:**
242```
243━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
244 Verifying Runtime Boundary...
245━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
246 
247The default Claude SDK profile stays on MCP 1.x. The plugin-owned MCP server
248runs MCP 2 separately and selects the `[claude-cli]` worker.
249This setup enables:
250 
251 Visual TUI Dashboard [Watch execution in real-time]
252 3-Stage Evaluation [Mechanical → Semantic → Consensus]
253 Drift Detection [Alert when projects go off-track]
254 Session Replay [Debug any execution from events]
255```
256 
257**Do not create, update, or remove `~/.claude/mcp.json`.** Existing entries may
258be user-managed or belong to another compatible runtime. Explain that advanced
259MCP workflows require a host-managed isolated `[mcp]` launcher. The Claude
260marketplace plugin or another supported host setup owns that registration.
261 
262**Celebration Checkpoint 2:**
263```
264Runtime boundary verified! You can now:
265- Use Claude-native ooo interview, seed, evaluate, and unstuck workflows
266- Use the Claude SDK on MCP 1.x with isolated MCP 2 tools
267- Keep the Claude SDK and MCP 2 dependency graphs conflict-free
268```
269 
270---
271 
272### Step 3: CLAUDE.md Integration (Optional)
273 
274Ask with clear value proposition:
275 
276```
277━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
278 CLAUDE.md Integration
279━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
280 
281Add Ouroboros quick-reference to your CLAUDE.md?
282 
283This gives you instant command reminders without leaving
284your project context.
285 
286What gets added (~40 lines):
287- Philosophy and pipeline overview
288- Command routing table with lazy-loaded agents
289- Agent catalog summary
290 
291A backup will be created: CLAUDE.md.bak
292 
293[Integrate / Skip / Preview first]
294```
295 
296**If "Preview first", show:**
297````markdown
298<!-- ooo:START -->
299<!-- ooo:VERSION:0.55.4 -->
300# Ouroboros — Specification-First AI Development
301 
302> Before telling AI what to build, define what should be built.
303> As Socrates asked 2,500 years ago — "What do you truly know?"
304> Ouroboros turns that question into an evolutionary AI workflow engine.
305 
306Most AI coding fails at the input, not the output. Ouroboros fixes this by
307**exposing hidden assumptions before any code is written**.
308 
3091. **Socratic Clarity** — Question until ambiguity ≤ 0.2
3102. **Ontological Precision** — Solve the root problem, not symptoms
3113. **Evolutionary Loops** — Each evaluation cycle feeds back into better specs
312 
313```
314Interview → Seed → Execute → Evaluate
315 ↑ ↓
316 └─── Evolutionary Loop ─────┘
317```
318 
319## ooo Commands
320 
321Each command loads its agent/MCP on-demand. Details in each skill file.
322 
323| Command | Loads |
324|---------|-------|
325| `ooo` | — |
326| `ooo interview` | `ouroboros:socratic-interviewer` |
327| `ooo seed` | `ouroboros:seed-architect` |
328| `ooo run` | MCP required |
329| `ooo evolve` | MCP: `evolve_step` |
330| `ooo evaluate` | `ouroboros:evaluator` |
331| `ooo unstuck` | `ouroboros:{persona}` |
332| `ooo status` | MCP: `session_status` |
333| `ooo setup` | — |
334| `ooo help` | — |
335 
336## Agents
337 
338Loaded on-demand — not preloaded.
339 
340**Core**: socratic-interviewer, ontologist, seed-architect, evaluator,
341wonder, reflect, advocate, contrarian, judge
342**Support**: hacker, simplifier, researcher, architect
343<!-- ooo:END -->
344````
345 
346**If Integrate:**
3471. Backup existing CLAUDE.md to CLAUDE.md.bak
3482. Append the block above
3493. Confirm successful integration
350 
351**Celebration Checkpoint 3:**
352```
353CLAUDE.md updated! You now have instant Ouroboros reference
354available in every project.
355```
356 
357---
358 
359### Step 4: Quick Verification
360 
361Run verification with visual feedback:
362 
363```
364━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
365 Verifying Setup...
366━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
367```
368 
369Check skills are loadable:
370```bash
371ls skills/ | wc -l # Should show 12+ skills
372```
373 
374Check agents are available:
375```bash
376ls src/ouroboros/agents/*.md | wc -l # Should show 20+ bundled agents
377```
378 
379Confirm the saved Ouroboros config selects the default Claude Agent SDK runtime
380on MCP 1.x while `~/.claude/mcp.json` was not mutated by this setup. The
381dependency-free Claude CLI worker remains a distinct, explicit `[claude-cli]`
382selection for the isolated MCP 2 process.
383 
384---
385 
386### Step 5: Success Summary
387 
388Display with celebration:
389 
390```
391━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
392 Ouroboros Setup Complete!
393━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
394 
395Mode: Claude Agent SDK (MCP 1.x)
396Skills Registered: 15 workflow skills
397Agents Available: 9 specialized agents
398MCP Server: Host-owned (config not mutated)
399CLAUDE.md: ✓ Integrated
400 
401━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
402 You're Ready to Go!
403━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
404 
405Start your first project:
406 ooo interview "your project idea"
407 
408Learn what's possible:
409 ooo help
410 
411Try the interactive tutorial:
412 ooo tutorial
413 
414Join the community:
415 Star us on GitHub! github.com/Q00/ouroboros
416```
417 
418---
419 
420### Step 5.1: Model Choice (Claude Code)
421 
422Before continuing to repository setup, give Claude Code users the same
423optional control over models without making it a requirement. Ask in the
424user's language; for Korean, use:
425 
426```json
427{
428 "questions": [{
429 "question": "설정이 완료됐어요. 기본 모델 설정으로 바로 시작할 수 있고, 모델은 언제든 나중에 바꿀 수 있어요.",
430 "header": "모델 설정",
431 "options": [
432 {
433 "label": "바로 시작하기 (권장)",
434 "description": "기본 모델 설정으로 바로 작업을 시작해요"
435 },
436 {
437 "label": "직접 모델 설정하기",
438 "description": "단계별로 모델을 바꾸거나 목록에 없는 모델 ID를 입력해 고정해요"
439 }
440 ],
441 "multiSelect": false
442 }]
443}
444```
445 
446- **바로 시작하기**: Continue to Step 5.5.
447- **직접 모델 설정하기**: Read and follow `../config/SKILL.md`. In the
448 local Claude Code harness, it opens the same settings UI in the user's
449 browser at a temporary `localhost` address. They can reopen it any time with
450 `ooo config`; this choice never permanently locks a model.
451 
452---
453 
454### Step 5.5: Brownfield Repository Scan
455 
456Scan a root directory for existing git repositories and linked worktrees, then register them in the Ouroboros DB. This enables interviews to use brownfield context for existing projects.
457 
458**Show scanning indicator:**
459```
460━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
461 Scanning for Existing Projects...
462━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
463 
464Looking for git repositories and worktrees up to two directories below the scan root.
465Only repositories and worktrees reached directly by this depth-bounded walk are registered.
466Local repos and repos with any remote name are eligible.
467This may take a moment...
468```
469 
470**Implementation — use MCP tools only, do NOT use CLI or Python scripts:**
471 
472**CRITICAL — deferred-schema guard (prevents "Invalid tool parameters"):**
473`setup` can call `ouroboros_brownfield` before and after a user-selection turn.
474A deferred schema loaded before scan is NOT guaranteed to remain loaded for the
475later `set_defaults` call. Immediately before EVERY `ouroboros_brownfield` call
476in this section, re-run `tool discovery query: "+ouroboros brownfield"` (idempotent —
477a no-op when already loaded). If the load returns no matching tool (and the tool is not already callable — an empty load for an already-exposed tool is an expected no-op, not absence), use the
478non-MCP setup fallback instead of retrying the failing call.
479 
4801. Load the brownfield MCP tool: `tool discovery query: "+ouroboros brownfield"`
4812. Call scan+register:
482 ```
483 Tool: ouroboros_brownfield
484 Arguments: { "action": "scan" }
485 ```
486 This walks `scan_root` up to two directory levels deep for valid seed repos/worktrees and registers them in DB. Each repo or worktree reached directly by the walk is registered self-only. Git worktree families are not expanded, so main or sibling worktrees outside the depth-bounded walk are not pulled in. Existing defaults are preserved.
487 
488**Scan boundaries:**
489- The filesystem walk starts at `scan_root`; when omitted, `scan_root` defaults to the current user's home directory.
490- Repositories are discovered directly by walking directories inside `scan_root`, at most two levels deep.
491- Dot-prefixed directories and known noisy directories such as `node_modules` are not walked as seed locations.
492- Both normal repos with a `.git` directory and linked worktrees with a `.git` file are registered when the walk reaches them.
493- Git worktree families are not expanded. A worktree is registered only when the depth-bounded walk finds it directly.
494- Local repos, repos without remotes, and repos whose remotes are not named `origin` are all eligible.
495 
496The scan response `text` already contains a pre-formatted numbered list with `[default]` markers. **Do NOT make any additional MCP calls to list or query repos.**
497 
498**Display the repos in a plain-text 2-column grid** (NOT a markdown table). Use a code block so columns align. Example:
499 
500```
501Scan complete. 8 repositories registered.
502 
503 1. repo-alpha 5. repo-epsilon
504 2. repo-bravo * 6. repo-foxtrot
505 3. repo-charlie 7. repo-golf *
506 4. repo-delta 8. repo-hotel
507```
508 
509Include `*` markers for defaults exactly as they appear in the scan response. Do not summarize or truncate the list. The user needs to see all repo numbers to pick defaults.
510 
511**If no repos found**, skip the default selection prompt and proceed to Step 6.
512 
513**Default repo selection — end the turn with the list:**
514 
515**Do NOT use `AskUserQuestion` for this selection.** Assistant text emitted
516between tool calls is not guaranteed to render, so a question dialog fired in
517the same turn can appear without the repo list the user needs to answer it.
518Option `preview` fields cannot hold the list either — the preview box has a
519fixed height and silently truncates long lists.
520 
521Instead, **end the turn with the repo grid as the final message** so its
522display is guaranteed, and collect the selection as a plain chat reply.
523 
524Immediately below the grid, append the selection prompt:
525 
526**If defaults exist:**
527```
528Current defaults: <current default names> (numbers <current default numbers>)
529 
530Reply with repo numbers to change defaults (e.g. "6, 18, 19"),
531"keep" to keep the current defaults, or "none" to clear them.
532```
533 
534**If no defaults exist:**
535```
536No defaults set.
537 
538Reply with repo numbers to set defaults (e.g. "6, 18, 19"),
539or "none" to run interviews in greenfield mode.
540```
541 
542Then **end the turn** — no tool calls after the grid.
543 
544On the next turn, parse the user's reply:
545 
546- Numbers (any separator) → those indices
547- "keep" (defaults exist) → skip the MCP call, confirm defaults unchanged, proceed to Step 6
548- "none" → empty indices (clear all)
549- Anything else → ask again in plain text; do not guess
550 
551Then re-run `tool discovery query: "+ouroboros brownfield"` and use ONE MCP call to update all defaults at once:
552 
553```
554Tool: ouroboros_brownfield
555Arguments: { "action": "set_defaults", "indices": "<comma-separated IDs>" }
556```
557 
558Example: if the user picks IDs 6, 18, 19 → `{ "action": "set_defaults", "indices": "6,18,19" }`
559 
560This clears all existing defaults and sets the selected repos as default in one call.
561 
562If "none" → `{ "action": "set_defaults", "indices": "" }` to clear all defaults.
563 
564**Celebration Checkpoint 5.5:**
565```
566Brownfield defaults updated!
567Defaults: podo-app, podo-backend, grape
568 
569These repos will be used as context in interviews.
570```
571 
572Or if "none" selected:
573```
574No default repos set. interviews will run in greenfield mode.
575You can set defaults anytime by running ooo setup again.
576```
577 
578---
579 
580### Step 6: First Project Nudge
581 
582Encourage immediate action:
583 
584```
585 
586Your first Ouroboros project is waiting!
587 
588The best way to learn is by doing. Try:
589 
590 ooo interview "Build a CLI tool for [something you need]"
591 
592Or explore examples:
593 ooo tutorial
594 
595You're going to love seeing vague ideas turn into
596crystal-clear specifications. Let's build something amazing!
597```
598 
599---
600 
601## Progressive Disclosure Schedule
602 
603Reveal features gradually to avoid overwhelm:
604 
605### Immediate (Plugin Mode)
606- `ooo interview` - Socratic clarification
607- `ooo seed` - Specification generation
608- `ooo unstuck` - Lateral thinking
609 
610### After a Supported MCP Host Setup
611- `ooo run` - TUI execution
612- `ooo evaluate` - 3-stage verification
613- `ooo status` - Drift tracking
614 
615### Power User (Discover organically)
616- Evolutionary loop and ralph persistence
617- Cost prediction and optimization
618- Session replay and debugging
619- Custom agents and skills
620 
621---
622 
623## Uninstall
624 
625When invoked with `--uninstall`:
626 
627```
628━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
629 Ouroboros Uninstall
630━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
631 
632This will remove:
633- Ouroboros block from CLAUDE.md
634 
635This will NOT remove:
636- Plugin files in .claude-plugin/
637- Any generated seeds or projects
638- Your project data
639 
640Uninstall Ouroboros configuration? [Yes / No]
641```
642 
643If Yes:
6441. Leave `~/.claude/mcp.json` untouched
6452. Remove `<!-- ooo:START -->` to `<!-- ooo:END -->` block from CLAUDE.md (if exists)
6463. Confirm: "Ouroboros plugin configuration removed. To remove plugin files, run: claude plugin uninstall ouroboros"
647 
648---
649 
650## Setup Troubleshooting
651 
652### "No compatible Python found"
653```
654Plugin mode works without a global Python when uv is on PATH. The skill
655resolver uses a compatible python3, then python, then uv-managed Python >= 3.12.
656 
657If neither a compatible interpreter nor uv is available, install one:
658 macOS: brew install [email protected]
659 Ubuntu: sudo apt install python3.12
660 Windows: python.org/downloads
661```
662 
663### "uvx: command not found"
664```
665uvx is recommended but not required. Alternative:
666 
667For the default Claude SDK runtime:
668 pip install 'ouroboros-ai[claude]'
669 
670`[claude-sdk]` is an explicit alias. Use `[claude-cli]` only for the isolated
671MCP 2 server worker. Do not combine `[claude]`, `[claude-sdk]`, or `[all]` with
672`[mcp]`, and do not add a direct Python fallback to mcp.json.
673```
674 
675### "~/.claude/mcp.json conflicts"
676```
677Ouroboros will merge with existing MCP servers.
678If you see issues, share your ~/.claude/mcp.json content and
679we'll help you resolve conflicts.
680```
681 
682---
683 
684## Conversion Metrics Track
685 
686Track these checkpoints for conversion optimization:
687 
688- [ ] Started setup (skill invoked)
689- [ ] Environment detected successfully
690- [ ] MCP/Claude profile boundary explained
691- [ ] CLAUDE.md integration accepted
692- [ ] Verification passed
693- [ ] Brownfield repos scanned and registered
694- [ ] Default brownfield repo selected
695- [ ] First project started (ooo interview)
696- [ ] First seed generated (ooo seed)
697- [ ] First execution completed (ooo run)
698 
699A fully converted user = all checkpoints passed
700 
701## RFC #1392 State Breadcrumb Footer
702 
703Your final response MUST end with exactly one breadcrumb footer line:
704 
705```
706◆ <current state> → next: <recommended action>
707```
708 
709Derive `<current state>` from live session state via `ouroboros_session_status` when that MCP projection is available; otherwise derive it from this skill's actual outcome. Never use a linear `Step N of M` footer because Ouroboros is an evolutionary loop. When the next action is genuinely a choice, list 2-3 honest options in the `next:` clause. The breadcrumb line must be the last line of the response.
710 

Discussion