- JavaScript 56%
- Svelte 37.2%
- CSS 6.2%
- Shell 0.4%
- HTML 0.2%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| content | ||
| public | ||
| scripts | ||
| src | ||
| tests | ||
| tools | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| index.html | ||
| jsconfig.json | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| stryker.conf.js | ||
| svelte.config.js | ||
| vite.config.js | ||
| vitest.browser.config.js | ||
| vitest.config.js | ||
| vitest.node.config.js | ||
The Monastery
Janus Fluency Monastery — From A Haiku to Zen Mastery.
A six-week programming retreat where you go to learn mastery. Not a tutorial series. A survival exercise. You arrive as a beginner; you leave fluent.
The Monastery ships the Fishing Boat Method: total immersion, forced recall under pressure, repeated failure, rebuilding from memory. No copy-paste. No AI. No escape hatches.
Architecture
┌──────────────────────────────────────────────────────────┐
│ Browser (Monastery Gate) — CodeMirror editor, Anvil UI │
└──┬───────────┬───────────────┬──────────────┬────────────┘
│ LSP │ Anvil events │ Space Agent │ Codex/Lore
│ (JSON-RPC)│ (SBI frames) │ (SBI frames) │ (HTTP/Graf)
▼ ▼ ▼ ▼
┌──────┐ ┌────────────┐ ┌────────────┐ ┌──────────┐
│ LSP │ │ Anvil │ │ Space │ │ Codex │
│ srv │ │ Harness │ │ Agent │ │ static │
└──────┘ │ (:service) │ │ (:service) │ │ content │
└────────────┘ └────────────┘ └──────────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────────┐
│ SovereignKV │ │ Janus Compiler │
│ (learner DB)│ │ (libjanus) │
└─────────────┘ └─────────────────┘
Four channels, four authorities:
- LSP owns language correctness (diagnostics, hover, completion)
- Anvil owns mastery truth (learner state, tests, struggle budget)
- Space Agent owns judgment (Socratic hints, capability-gated)
- Codex owns lore (haikus, hints, ideology, doctrine)
Components
| Component | Name | Role |
|---|---|---|
| Browser entry | Monastery Gate | CodeMirror + Anvil + Codex in browser |
| Harness | Anvil | Test runner, mastery model, hint ladder, boss fights |
| AI tutor | Space Agent | Constrained Socratic tutor, capability tokens prevent cheating |
| Mobile companion | Pilgrim | Flashcards, recall, review — no IDE pretense |
| Lore/ideology | Codex | Haikus, hints, nuggets, Libertaria doctrine |
Learning Model
- Mandatory once: Fisherman Way intro (
:scriptfluency foundation) - Then learner choice: pick any next track based on goals; AI mentor guides pathing; no forced hierarchy
| Track | Typical Duration | Focus |
|---|---|---|
:script (mandatory intro) |
6 weeks | AOT scripting, $-pipelines, std.text.* |
:core |
3 weeks | Minimal transparent systems profile: explicit allocators, capability discipline, error model |
:service |
4 weeks | Async, structured concurrency |
:compute |
5 weeks | SIMD, numeric tower, profiling |
:sovereign |
4 weeks | Bare-metal, capabilities, Libertaria stack |
:cluster |
6 weeks | Actors, supervision, distributed failure |
:libertaria |
opt-in | Exitarian doctrine, sovereign philosophy |
| Domain electives | variable | Game, industrial, aerospace, climate and beyond |
Ideology is a portal, not a toll booth. The chalice is offered, never poured.
What simplicity means in Janus
Janus optimizes for transparent simplicity: you can read code and predict behavior.
No hidden allocations, no ambient authority, no magic dispatch. :script reduces surface for beginners; :core keeps costs visible for serious systems work.
Three Commandments
1. No Copying — Every line must pass through the learner's nervous system. Not from the internet. Not from yesterday. Not from the docs. Write it again from memory. Every time.
2. No Oracles — No AI. No Stack Overflow. No solution search. Only the struggle budget unlocks hints: 0-20min pure memory, 20-45min compiler only, 45-90min reference manual, 90-120min hint level 1, 2-4h hint level 2, next day hint level 3, then (only then) read and rewrite from memory.
3. No Dead Pain — Every failure must produce a logged hypothesis, a test, or a rewrite. Pain without reflection evaporates into mood. Pain with an error journal becomes doctrine.
Quick Start
cd janus-monastery
npm install
npm run dev
Open http://localhost:5173 in your browser. You are at the Gate.
Project Structure
janus-monastery/
├── public/ # Static assets
├── src/
│ ├── components/ # Svelte components
│ │ ├── Haiku.svelte
│ │ ├── HintCard.svelte
│ │ ├── Nugget.svelte
│ │ ├── Codex.svelte
│ │ ├── Anvil.svelte
│ │ └── Pilgrim.svelte
│ ├── pages/
│ │ ├── Gate.svelte # Browser entry — the monastery gate
│ │ ├── Forge.svelte # The coding harness
│ │ ├── CodexPage.svelte# Lore, haikus, doctrine
│ │ ├── PilgrimPage.svelte
│ │ └── settings.svelte
│ ├── lib/
│ │ ├── anvil.js # Anvil harness client (SBI)
│ │ ├── space-agent.js # Space Agent client (SBI)
│ │ ├── sovereign-kv.js # SovereignKV interface
│ │ └── sbi.js # SBI wire protocol
│ ├── styles/
│ │ └── theme.css # Japanese monastery + Libertaria theme
│ └── content/
│ ├── haikus/ # .md haiku files
│ ├── hints/ # .md hint stubs per concept
│ └── nuggets/ # .md wisdom nuggets
└── content/
└── packages/ # Hinge packages: monastery-script, etc.
The Stack Eating Itself
The Monastery is not a learning platform with Janus content. It is the Janus stack dogfooding itself:
- Learner state lives in SovereignKV — sovereign by construction
- Wire protocol is SBI — the protocol Janus already ships
- Content is Hinge packages — the package manager Janus already ships
- Artifacts are Graf repos — version control Janus already ships
- The browser IDE runs Janus via wasm32-wasi — the target Janus already ships
- Mobile sync is DMP — the distributed messaging Janus already ships
The course doesn't use the stack. The course IS the stack.
Status
MVP-0: The Gate. Initial scaffolding. Browser entry with haiku theme, Codex reader, basic navigation. Actual test-running and Space Agent integration come after the directory structure and visual identity are ratified.
Build the Gate first. Ship two weeks of :script content. Prove the loop closes.