{{ t.bcRoot }} / {{ t.bcHere }}
// {{ t.ov.kicker }} · 01
{{ t.ov.h1 }}
{{ t.ov.lead }}
i
{{ t.ov.calloutTitle }}
{{ t.ov.calloutBody }}
// 01 · {{ t.qs.kicker }}
{{ t.qs.h2 }}
{{ t.qs.lead }}
{{ t.qs.codeLabel }}node ≥ 18
# {{ t.qs.cm1 }}
npm install
# {{ t.qs.cm2 }}
npx playwright install chromium
cp .env.example .env
npm start # http://localhost:3000
{{ t.qs.note }}
// 02 · {{ t.sh.kicker }}
{{ t.sh.h2 }}
{{ t.sh.lead }}
docker{{ t.sh.codeMeta }}
docker compose up -d # → http://localhost:3000
# {{ t.sh.cm1 }} ./data/okami-samm.db
{{ t.sh.cloud }}
cloudflare pagesfrontend + proxy
npx wrangler pages deploy # public/
npx wrangler pages secret put BACKEND_URL
// 03 · {{ t.as.kicker }}
{{ t.as.h2 }}
{{ t.as.lead }}
{{ t.as.note }}
// 04 · {{ t.q.kicker }}
{{ t.q.h2 }}
{{ t.q.lead }}
i
{{ t.q.scaleTitle }}
{{ t.q.scaleNote }}
{{ sc.w }}{{ sc.label }}
{{ pr.code }}{{ pr.name }}
A · {{ pr.a }}B · {{ pr.b }}
{{ t.q.lookFor }}
- {{ g }}
{{ t.q.note }}
// 05 · {{ t.sc.kicker }}
{{ t.sc.h2 }}
{{ t.sc.lead }}
{{ lv.n }}{{ lv.t }}{{ lv.d }}
{{ t.sc.note }}
// 06 · {{ t.rp.kicker }}
{{ t.rp.h2 }}
{{ t.rp.lead }}
// 07 · {{ t.api.kicker }}
{{ t.api.h2 }}
{{ t.api.lead }}
GET/healthz{{ t.api.r1 }}
POST/api/auth/login{{ t.api.r2 }}
GET/api/assessments{{ t.api.r3 }}
POST/api/assessments{{ t.api.r4 }}
GET/…/report.pdf{{ t.api.r5 }}
POST/mcp{{ t.api.r6 }}
{{ t.api.note }}
// 08 · {{ t.mcp.kicker }}
{{ t.mcp.h2 }}
{{ t.mcp.lead }}
claude codemcp
# {{ t.mcp.cm1 }}
claude mcp add --transport http okami-samm https://your-instance/mcp
# {{ t.mcp.cm2 }}
claude mcp add okami-samm -- node server/mcp-stdio.js
{{ t.mcp.note }}
// 09 · {{ t.ai.kicker }}
{{ t.ai.h2 }}
{{ t.ai.lead }}
{{ t.ai.connectH }}
{{ t.ai.connect }}
i
{{ t.ai.methodsTitle }}
{{ t.ai.methodsBody }}
{{ t.ai.provH }}
{{ p.name }}{{ p.auth }}{{ p.how }}
openai · codex{{ t.ai.oauthMeta }}
# {{ t.ai.oauthC1 }}
Settings → Sign in with OpenAI → auth.openai.com
→ {{ t.ai.oauthC2 }}
{{ t.ai.modelsH }}
{{ t.ai.models }}
{{ t.ai.sugH }}
{{ t.ai.sug }}
- {{ s }}
{{ t.ai.envH }}
{{ t.ai.env }}
.env{{ t.ai.envMeta }}
AI_PROVIDER=openai # openai · anthropic
AI_MODEL=gpt-5.4-mini
AI_BASE_URL=https://…/v1 # {{ t.ai.envC1 }}
AI_API_KEY=sk-…
{{ t.ai.note }}
// 10 · {{ t.ac.kicker }}
{{ t.ac.h2 }}
{{ t.ac.lead }}
admin cli{{ t.ac.codeMeta }}
npm run admin -- list
npm run admin -- create-admin <user> <password>
npm run admin -- set-password <user> <password>
npm run admin -- reset # {{ t.ac.cm1 }}
{{ t.ac.note }}
// 11 · {{ t.dt.kicker }}
{{ t.dt.h2 }}
{{ t.dt.lead }}
GET/api/backup{{ t.dt.r1 }}
POST/api/restore{{ t.dt.r2 }}
i
{{ t.dt.mobileTitle }}
{{ t.dt.mobileBody }}
{{ t.dt.note }}
// 12 · {{ t.fq.kicker }}
{{ t.fq.h2 }}
{{ t.fq.lead }}
{{ f.q }}
{{ f.a }}