Octowiz setup
Octowiz gives Claude Code agents memory-backed engineering doctrine — cached by role, refreshed by project state, and routed through planning, TDD, review, and QA workflows.
npx -y skills add raelli/octowiz --skill octowiz-setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Setup orchestrator for the Octowiz Bridge. Re-runs the live environment check, builds a gap list, and runs only the phases needed: plugins, memory, repo, verify. Invoked automatically by octowiz:octowiz when hard gaps are detected.
SKILL.md
10.2 KB, as published. Nobody here has run it
octowiz:setup
Setup orchestrator for the Octowiz Bridge. Runs only the phases with gaps.
When invoked
Invoked by octowiz:octowiz when the live check reports gaps. Do not invoke directly.
Pre-flight: run the live check
octowiz-cache check
Parse the JSON output. Store hard_gaps and advisory_gaps.
If hard_gaps is empty: delete ONBOARDING.md from the current directory if it exists, then return control to octowiz:octowiz to show the A/B/C/D menu.
Create ONBOARDING.md
If .octowiz/setup-state.json does not exist in the current directory, create ONBOARDING.md:
# Octowiz Setup
## Environment (per-machine)
- [STATUS] superpowers plugin
- [STATUS] mattpocock-skills plugin
- [STATUS] antfu-skills plugin
- [STATUS] LiteLLM env vars (LITELLM_BASE_URL + API key)
- [STATUS] LiteLLM routing cache (verified within 24h)
- [STATUS] Project namespace seeded in LiteLLM Memory
## Project (per-repo)
- [STATUS] antfu skills setup (if TypeScript/Vue stack)
- [STATUS] Agent instructions file (AGENTS.md / CLAUDE.md / GEMINI.md)
- [STATUS] mattpocock-skills section in agent file (## Agent skills)
## Next step
[What is about to run]
Use [x] for passing checks, [ ] for gaps, [!] for advisory items.
Phase 1: Plugins
Run if any of these are in hard_gaps: plugin_superpowers, plugin_mattpocock-skills, plugin_antfu-skills
For each missing plugin, explain what it does and why it is required, then show the install command. Verify after each install.
superpowers
Provides workflow discipline skills — TDD, brainstorming, code review, git worktrees, subagent-driven development.
claude plugins install superpowers
Verify: ls ~/.claude/plugins/cache/*/superpowers/ 2>/dev/null | head -1
mattpocock-skills
Provides domain documentation and issue management skills — grill-with-docs, to-prd, to-issues, triage, diagnose, prototype.
Note: install ID is mattpocock-skills; slash-command namespace is /mattpocock-skills: — these match.
claude plugins install mattpocock-skills
Verify: ls ~/.claude/plugins/cache/*/mattpocock-skills/ 2>/dev/null | head -1
antfu-skills
Provides TypeScript/Vue/Vite code quality skills — ESLint config, Vitest setup, Vite configuration, UnoCSS integration.
claude plugins install antfu-skills
Verify: ls ~/.claude/plugins/cache/*/antfu-skills/ 2>/dev/null | head -1
After all plugins are installed, update machine-state.json:
python3 -c "
import sys; sys.path.insert(0, '$(which octowiz-cache | xargs dirname 2>/dev/null || echo .)')
from packages.memory_client.env import init_machine_state, save_machine_state, MACHINE_STATE_PATH
state = init_machine_state()
for pid in ['superpowers', 'mattpocock-skills', 'antfu-skills']:
state.plugins[pid] = 'verified'
save_machine_state(state)
print('machine-state.json updated')
"
Phase 2: Memory
Run if any of these are in hard_gaps: litellm_env, litellm_cache
Also run Step 2.4 alone if hard_gaps has no Memory entries but setup-state.json has no project_id (i.e. this is the first /octowiz run in this repo on a machine already fully configured). Check with:
python3 -c "
from packages.memory_client.env import load_repo_state
import pathlib
s = load_repo_state(pathlib.Path('.'))
print('seeded' if s and s.project_id else 'not-seeded')
"
If the output is not-seeded, skip Steps 2.1–2.3 and run only Step 2.4.
This phase covers all LiteLLM operations in sequence: env vars → role cache → project namespace seed.
Step 2.1: LiteLLM env vars
If litellm_env is in hard_gaps, check current state:
echo "LITELLM_BASE_URL: ${LITELLM_BASE_URL:-<not set>}"
echo "LITELLM_ADMIN_API_KEY: ${LITELLM_ADMIN_API_KEY:-<not set>}"
echo "LITELLM_API_KEY: ${LITELLM_API_KEY:-<not set>}"
Guide the developer to add to ~/.claude/settings.json:
{
"env": {
"LITELLM_BASE_URL": "http://your-litellm-server:4000",
"LITELLM_ADMIN_API_KEY": "your-admin-key-here"
}
}
Ask them to reload Claude Code so the env vars take effect, then verify before continuing.
Step 2.2: Build role bundles
octowiz-cache build --all --namespace "${OCTOWIZ_NAMESPACE:-allspark}"
If this fails, check: Is LiteLLM running? curl -s "${LITELLM_BASE_URL}/health"
Step 2.3: Verify routing bundle
octowiz-cache get --role routing --namespace "${OCTOWIZ_NAMESPACE:-allspark}" > /dev/null
If exit code is 0, record routing_verified_at:
python3 -c "
from packages.memory_client.env import init_machine_state, save_machine_state, MACHINE_STATE_PATH, _now_iso
state = init_machine_state()
state.litellm['routing_verified_at'] = _now_iso()
save_machine_state(state)
print('routing_verified_at recorded')
"
Step 2.4: Seed project namespace
Seed the project namespace into LiteLLM Memory (idempotent — safe to re-run):
octowiz-cache seed
This writes project:{id}:octowiz:config and project:{id}:octowiz:rules if they do not already exist. The project_id is derived from the git remote URL (UUID fallback) and stored in .octowiz/setup-state.json for stability across runs.
If this fails with a connection error, LiteLLM is not reachable. Revisit Steps 2.1 and 2.2 before retrying.
Phase 3: Repo
Run if any of these are in hard_gaps or advisory_gaps: antfu, agent_file, mattpo_skills_setup
Step 3.1: Scan the repo
octowiz-cache check
Also detect manually:
- Agent file: check for
AGENTS.md,CLAUDE.md,GEMINI.md(in that priority order) - Stack: check
package.jsonfor vue/vite/react/typescript; check forpyproject.toml - Check for
CONTEXT.mdanddocs/adr/
Update the "Project (per-repo)" section of ONBOARDING.md with findings.
Step 3.2: mattpocock-skills setup
If mattpo_skills_setup is in advisory gaps and the agent file exists but has no ## Agent skills section, invoke:
/mattpocock-skills:setup-matt-pocock-skills
If no agent file exists: note in ONBOARDING.md that this step is deferred. Do not create the file.
Update setup-state.json:
python3 -c "
from packages.memory_client.env import init_repo_state, save_repo_state
import pathlib
state = init_repo_state(pathlib.Path('.'))
state.mattpocock_setup = True
save_repo_state(state, pathlib.Path('.'))
"
Step 3.3: Antfu setup
ts_vue or polyglot stack only.
If agent file exists, detect which antfu sub-skills are relevant from package.json and append to ## Agent skills:
- /antfu-skills:vue — Vue 3 composition API patterns
- /antfu-skills:vite — Vite configuration and build optimization
- /antfu-skills:vitest — Vitest setup and patterns
- /antfu-skills:pnpm — pnpm workspace commands
- /antfu-skills:unocss — UnoCSS integration
Update setup-state.json:
python3 -c "
from packages.memory_client.env import init_repo_state, save_repo_state
import pathlib
state = init_repo_state(pathlib.Path('.'))
state.antfu_setup = True
state.antfu_relevant = True
save_repo_state(state, pathlib.Path('.'))
"
If no agent file exists or stack is not ts_vue/polyglot: note in ONBOARDING.md, set antfu_relevant = False if applicable.
Step 3.4: Flag lazy-creation items
In ONBOARDING.md, note any items that follow lazy-creation:
CONTEXT.mdabsent:[!] CONTEXT.md — not present; will be created lazily by /grill-with-docsdocs/adr/absent:[!] docs/adr/ — not present; will be created lazily by /grill-with-docs
Do NOT create these files now.
Phase 4: Verify
Always run last, after all other phases complete.
Step 4.1: Re-run the live check
octowiz-cache check
Step 4.1b: Background services
Both services self-heal on version skew at session start (Node daemon since 0.9.17, Python A2A server since 0.9.18) — verify they are up and current:
# Node daemon (launchd)
launchctl list de.integrahub.octowiz-daemon 2>/dev/null || echo "daemon: not loaded"
# Python A2A server — version must match the installed plugin
curl -s -m 3 "http://localhost:${OCTOWIZ_A2A_PORT:-8765}/health" 2>/dev/null \
|| echo "a2a: down (starts on next session open)"
If either is missing or stale, route to /octowiz:octowiz-doctowiz (fixes
daemon_start and aelli_python) rather than fixing inline here.
Step 4.2: If hard_gaps is empty — setup complete
- Delete
ONBOARDING.mdfrom the current directory:rm -f ONBOARDING.md - Report: "Setup complete. All required plugins are installed, LiteLLM Memory is configured and seeded, repo setup is done. Proceeding to the workflow menu."
- Return control to
octowiz:octowizto show the A/B/C/D menu.
Step 4.3: If hard_gaps remain — offer escape hatch
Report remaining gaps. For each:
| Gap ID | Message |
|---|---|
plugin_superpowers | superpowers plugin not found. Run: claude plugins install superpowers |
plugin_mattpocock-skills | mattpocock-skills plugin not found. Run: claude plugins install mattpocock-skills |
plugin_antfu-skills | antfu-skills plugin not found. Run: claude plugins install antfu-skills |
litellm_env | LITELLM_BASE_URL or API key not set. Add to ~/.claude/settings.json under "env". |
litellm_cache | LiteLLM routing bundle not verified. Run: octowiz-cache build --all |
antfu | Antfu setup needed for this TypeScript/Vue project. Re-run Phase 3. |
Offer the escape hatch:
"Setup is incomplete. You can skip this and proceed anyway — but some features may not work.
To skip a specific check: respond with the check ID (e.g.,
litellm_env). To skip all and proceed: respondskip all. To fix: respondfix."
To dismiss a check:
python3 -c "
from packages.memory_client.env import dismiss_check, MACHINE_STATE_PATH
import pathlib
dismiss_check('<check_id>', pathlib.Path('.'), MACHINE_STATE_PATH)
print('check dismissed')
"
Advisory gaps (agent_file, mattpo_skills_setup) are noted but do not block Phase 4 from passing.