老師Roushi
rōshi · 老師 · old master

Ask the master.

The brain that runs while you build. Roushi indexes every decision, pattern, and lesson across your portfolio — and feeds it back to Claude Code, Cursor, and your agents before you write each next file.

Request beta accessprivate beta · single-tenant · invited operators

What it does, in seven seconds

You edit a file in your editor. Before the change lands, Roushi quietly tells your AI assistant what you decided about that subject months ago, which gotcha bit you in a related project, and which rules apply to this kind of code. The file lands consistent with the rest of your portfolio on the first try.

# PreToolUse hook fires before the AI writes the file
📚 Roushi context · your-product · API route

Relevant from the brain:
- [lesson] an ORM gotcha you hit two months ago
- [decision] a stack choice you locked in last quarter
- [rule] a portfolio-wide convention (always-on)

The three things Roushi is good at

Ask

Grounded synthesis with citations. The brain returns an answer, the entities it stood on, and the gaps it can't fill yet.

> "what gotchas have we hit with our ORM?"

[orm-any-array-spread]
[orm-strict-non-tty]
Gaps: retry policy patterns.

Track

Durable goals across sessions and machines. Cron-driven maintenance keeps the brain honest — stale, duplicate, and contradictory entries surface as system tasks.

/goals

→ active: 3
→ blocked: 1
→ cron-found: 2
  · 12 stale entities
  · 1 contradiction (rule)

Trace

A typed graph of every decision, pattern, lesson, and product. Multi-hop traversal answers questions grep never can.

graph-query roushi --hops 2

roushi --uses→ pgvector
       --uses→ Drizzle
       --led_to→ D11 (embeddings)
       --depends_on→ feedback...

What Claude Code sees, with Roushi running

Pre-tool-use hooks fire before every Edit/Write in any KumoKodo workspace. The hook classifies the file by path, finds the relevant lessons/decisions/patterns/rules in the brain, and injects them as additional context. The model reads them before generating the code.

You ask the model

Add a Server Action at src/app/actions/touch-entity.ts that takes a slug and bumps last_validated_at.

Roushi adds (before the model responds)

📚 Roushi context · Server Action

Relevant from the brain:
- [rule] portfolio-security-baseline
- [lesson] Server Action redirect() in try/catch crashes
- [pattern] formData → Zod validation → return state

The code that lands already has the auth check, the Zod schema, and the safe-return pattern — because the model read what the team had decided before it wrote a line.


Twelve things Roushi does, in plain words

  1. 01

    Ask, with citations

    Synthesized answers grounded in the brain. Every claim links to the entity it came from.

  2. 02

    Hybrid search

    Vector + keyword fused via Reciprocal Rank Fusion. Optional LLM rerank pass.

  3. 03

    Typed graph

    Twelve entity types, ten relations. Multi-hop traversal via recursive CTE.

  4. 04

    Visual graph

    Force-directed view of the whole portfolio. Click-to-click shortest path.

  5. 05

    PreToolUse advisor

    Hook injects relevant context into Claude Code before every Edit/Write.

  6. 06

    Security checklist hook

    File-pattern-aware security guidance fires before code lands.

  7. 07

    Auto-synced rules

    Brain rules write into every workspace's Claude memory dir on session start.

  8. 08

    Maintenance crons

    Decay, dedupe, audit-edges, contradictions — daily/weekly/monthly. Auto-closes when findings clear.

  9. 09

    CLI + stdio MCP

    Thirty-five tools. Local stdio for low latency; HTTPS for remote agents.

  10. 10

    Skill index + sync

    Claude Code skills stay on disk for native /invocation; the brain indexes them for cross-reference + team sharing.

  11. 11

    Goal lifecycle

    Multi-week objectives across machines. Status buttons, system goals from crons.

  12. 12

    Markdown-first

    Content in git is canonical. Postgres is the index. Survives DB loss.


How it works, at six layers

EVENTS — cron schedules; GitHub webhooks (planned)
AGENTS — Claude Code via stdio + HTTPS MCP; PreToolUse hooks
SKILLS — Claude Code disk + brain index
RULES — brain → SessionStart sync into every workspace
BRAIN — 12 entity types, 10 edge relations, hybrid search
AUTO-DETECTOR — 4 cron scans; maintenance_runs log

Who Roushi is for

If you run a portfolio

Five or more products in your portfolio. Decisions in product A are forgotten when you work on product B. Lessons from one painful 3am don't carry to the next. Roushi is what your portfolio brain should have been from product number two.

The marketing site IS Roushi practising what it preaches.

If you're a solo founder

The business context lives in your head. Slack is where decisions go to die. Roushi captures the durable bits — the why, the lessons, the trade-offs — and re-surfaces them in the agent you're already pair-programming with.

Notion is a passive store. Roushi acts.

If you ship code with AI agents

Claude Code, Cursor, Windsurf — every session starts cold. Roushi is the persistent layer that remembers what the last session decided, surfaces it before you ask, and feeds it to whichever agent you're using next.

Memory across agents and sessions.


Built on

Postgres + pgvector · Drizzle ORM · Next.js 16 · MCP · Auth.js v5 · OpenAI embeddings · Vercel Fluid Compute · Tailwind 4 · TypeScript strict · Biome

No vendor logos. The stack is the boring kind — chosen for portability and longevity, not novelty.


From the operators

We built Roushi for the KumoKodo portfolio first. With twenty-plus products under one roof, the cost of forgetting was compounding faster than we could mitigate it manually. The brain is what we wished we'd had at product number two; private beta is open to other portfolio operators who want the same.

— Sam, KumoKodo


Request beta access

Roushi is single-tenant during private beta. If you operate a portfolio (or have agents that need a brain), get in touch. I read every request personally.

Manually triaged. No marketing list, no automated drip.