soul.demarkus.io:6309/graph.md/v1 draft reader meta

Document Graph

Exported: 2026-06-20T20:57:56Z Nodes: 310 Edges: 645

Nodes

URL Title Status Links
file:///Users/fritz/latebit/nib/ai/llm/codex_api.go external 0
file:///Users/fritz/latebit/nib/ai/llm/codex_probe.go external 0
file:///Users/fritz/latebit/nib/cmd/nib-code/main.go external 0
file:///Users/fritz/latebit/nib/coding/agent/compact.go external 0
file:///Users/fritz/latebit/nib/coding/agent/context_snapshot.go external 0
file:///Users/fritz/latebit/nib/coding/command/context.go external 0
file:///Users/fritz/latebit/nib/tui/tui.go external 0
file:///Users/fritz/latebit/nib/tui/ui/model_selector.go external 0
https://demarkus.io/blog/creating-an-automated-knowledge-universe/ external 0
https://github.com/davidondrej/pi-agent/tree/main/packages/coding-agent external 0
https://github.com/gszhangwei/open-spdd external 0
https://github.com/latebit-io/demarkus-hub external 0
https://github.com/latebit-io/demarkus-knowledge-system-deploy external 0
https://github.com/latebit-io/demarkus/issues/113 external 0
https://github.com/latebit-io/demarkus/issues/75 external 0
https://github.com/latebit-io/demarkus/releases external 0
https://github.com/latebit-io/obsidian-demarkus external 0
https://modelcontextprotocol.io/specification/2025-03-26/basic/transports external 0
mark://127.0.0.1:6401/adr/ltv-rule.md ADR: LTV floor — 2026-Q1 ok 4
mark://127.0.0.1:6401/credit-policy.md Credit policy ok 2
mark://127.0.0.1:6401/decisioning-rules.md Decisioning rules ok 1
mark://127.0.0.1:6401/journal.md Origination journal ok 0
mark://127.0.0.1:6402/ Index of / ok 4
mark://127.0.0.1:6402/arrears-rules.md Arrears rules ok 2
mark://127.0.0.1:6402/escrow-calc.md Escrow calculation ok 0
mark://127.0.0.1:6402/journal.md Servicing journal ok 0
mark://127.0.0.1:6402/payment-flows.md Payment flows ok 3
mark://127.0.0.1:6403/graph.md Cross-domain graph ok 0
mark://docs.demarkus.io Demarkus Documentation ok 19
mark://docs.demarkus.io/DESIGN.md not-found 0
mark://docs.demarkus.io/SPEC.md not-found 0
mark://docs.demarkus.io/architecture/index.md Architecture & Design ok 3
mark://docs.demarkus.io/client/index.md Use the Clients ok 4
mark://docs.demarkus.io/deployment/index.md Deployment & TLS ok 5
mark://docs.demarkus.io/index.md Demarkus Documentation ok 19
mark://docs.demarkus.io/install/index.md Install & Build ok 4
mark://docs.demarkus.io/philosophy/agent-cookbook.md Agent Workflow Cookbook ok 4
mark://docs.demarkus.io/philosophy/agent-queue-template.md Agent Queue Template ok 3
mark://docs.demarkus.io/philosophy/index.md Philosophy & Intent ok 6
mark://docs.demarkus.io/philosophy/why-demarkus.md Why Demarkus ok 4
mark://docs.demarkus.io/reference/agent-manifest.md Agent Manifest ok 0
mark://docs.demarkus.io/reference/index.md Reference ok 7
mark://docs.demarkus.io/security/index.md Security Model ok 3
mark://docs.demarkus.io/server/index.md Run a Server ok 9
mark://docs.demarkus.io/tools/index.md Tools ok 3
mark://hub.demarkus.io demarkus hub ok 8
mark://hub.demarkus.io/agents.md Agents ok 0
mark://hub.demarkus.io/blogs.md Blogs ok 0
mark://hub.demarkus.io/hubs.md Hubs ok 2
mark://hub.demarkus.io/index.md demarkus hub ok 8
mark://hub.demarkus.io/indexes/soul.md Content Index ok 0
mark://hub.demarkus.io/personal.md Personal ok 0
mark://hub.demarkus.io/projects.md Projects ok 2
mark://hub.demarkus.io/setup.md Setting Up Your Own Hub ok 1
mark://hub.demarkus.io/tools.md Tools ok 0
mark://localhost/junto/philosophy.md error 0
mark://localhost/nib/architecture.md Architecture ok 10
mark://localhost/nib/debugging.md error 0
mark://localhost/nib/engineering-values.md Engineering Values ok 6
mark://localhost/nib/index.md error 0
mark://localhost/nib/journal.md error 0
mark://localhost/nib/mission.md nib — Mission ok 5
mark://localhost/nib/patterns.md Patterns ok 9
mark://localhost/nib/plans/ Index of /nib/plans/ ok 35
mark://localhost/nib/plans/agent-foundation.md Agent Foundation — Architecture Plan ok 3
mark://localhost/nib/plans/agent-pane-collapse.md Agent Pane Collapse/Expand — Deferred Plan ok 0
mark://localhost/nib/plans/agent-pane-file-picker.md Agent Pane @ File Picker — Deferred Plan ok 1
mark://localhost/nib/plans/agent-pane-redesign.md 0
mark://localhost/nib/plans/agent-pane-tool-rows.md 0
mark://localhost/nib/plans/agent-parked-event.md 0
mark://localhost/nib/plans/agent-token-efficiency.md 0
mark://localhost/nib/plans/apply-patch-tool.md 0
mark://localhost/nib/plans/appmodel-decomposition.md 0
mark://localhost/nib/plans/edit-tool-batching.md 0
mark://localhost/nib/plans/editor-vs-buffer-split.md 0
mark://localhost/nib/plans/eval-toggle-ux.md 0
mark://localhost/nib/plans/global-skills-dir.md error 0
mark://localhost/nib/plans/kit-agent-port.md 0
mark://localhost/nib/plans/kit-contracttest.md error 0
mark://localhost/nib/plans/kit-decorate.md error 0
mark://localhost/nib/plans/kit-event-bus.md error 0
mark://localhost/nib/plans/kit-registry.md error 0
mark://localhost/nib/plans/kit-v1-versioning.md error 0
mark://localhost/nib/plans/layer-3-codepath-rename.md error 0
mark://localhost/nib/plans/library-first.md Plan — nib as a Library; nib-code as Its Flagship Consumer ok 0
mark://localhost/nib/plans/nibster.md error 0
mark://localhost/nib/plans/phase-6-final-wiring.md error 0
mark://localhost/nib/plans/plugin-metadata.md error 0
mark://localhost/nib/plans/session-decomposition.md error 0
mark://localhost/nib/plans/skills-adapter.md error 0
mark://localhost/nib/plans/slash-commands.md error 0
mark://localhost/nib/plans/tool-output-cap.md error 0
mark://localhost/nib/plans/tui-callback-split.md error 0
mark://localhost/nib/plans/tui-facade.md error 0
mark://localhost/nib/plans/turn-count-investigation-data.md error 0
mark://localhost/nib/plans/turn-count-investigation.md error 0
mark://localhost/nib/plans/update-task-bundling.md error 0
mark://localhost/nib/plans/validator-sidecar.md error 0
mark://localhost/nib/plans/work-tree-gate-softening.md error 0
mark://localhost/nib/roadmap.md Roadmap ok 27
mark://localhost:6309/ Demarkus Soul — Project Hub ok 5
mark://localhost:6309/demarkus-library/adr/0006-navigation-rework.md ADR 0006 — Navigation rework ok 0
mark://localhost:6309/demarkus-library/architecture.md demarkus-library — navigation architecture ok 0
mark://localhost:6309/demarkus-library/index.md demarkus-library ok 3
mark://localhost:6309/demarkus-library/roadmap.md Navigation rework — roadmap ok 2
mark://localhost:6309/index.md Demarkus Soul — Project Hub ok 5
mark://localhost:6309/junto/architecture.md Junto Architecture ok 0
mark://localhost:6309/junto/backlog.md Junto — Backlog ok 0
mark://localhost:6309/junto/index.md Junto Project Workspace ok 11
mark://localhost:6309/junto/journal.md Junto Journal ok 0
mark://localhost:6309/junto/patterns.md Junto Code Patterns & Conventions ok 1
mark://localhost:6309/junto/philosophy.md Junto — Core Philosophy ok 1
mark://localhost:6309/junto/plans/ Index of /junto/plans/ ok 33
mark://localhost:6309/junto/plans/anthropic-provider.md Plan: Add Anthropic Messages API Provider ok 0
mark://localhost:6309/junto/plans/architecture-cleanup.md Plan: Architecture Cleanup (Post-Provenance Audit) ok 0
mark://localhost:6309/junto/plans/awaiting-input.md Awaiting-Input Plan ok 0
mark://localhost:6309/junto/plans/coding-style-enforcement.md Coding Style Enforcement ok 0
mark://localhost:6309/junto/plans/command-palette.md Command Palette Implementation Plan ok 0
mark://localhost:6309/junto/plans/continuous-conversation.md Plan: Continuous Conversation ok 0
mark://localhost:6309/junto/plans/distributed-memory.md Distributed Memory — Plan ok 0
mark://localhost:6309/junto/plans/dual-cursors-animated-typing.md Plan: Dual Cursors + Animated Agent Typing ok 0
mark://localhost:6309/junto/plans/find-in-file.md Find in File (Ctrl+F) — Implementation Plan ok 0
mark://localhost:6309/junto/plans/headless-agent.md Headless Agent Mode ok 0
mark://localhost:6309/junto/plans/junto-analyze.md junto-analyze: session-log consumer ok 0
mark://localhost:6309/junto/plans/lint-adapter-architecture.md Lint Adapter Architecture ok 0
mark://localhost:6309/junto/plans/llm-config.md LLM Config: Global + Project Override ok 0
mark://localhost:6309/junto/plans/memory-integration.md Plan: Demarkus Memory Integration ok 0
mark://localhost:6309/junto/plans/milestone-2-context-set.md Milestone 2: Context Set — Implementation Plan ok 0
mark://localhost:6309/junto/plans/milestone-4-project-view.md Milestone 4: Project View Pane — Implementation Plan ok 0
mark://localhost:6309/junto/plans/oauth-providers.md OAuth Provider Integration Plan ok 0
mark://localhost:6309/junto/plans/phase-3-agent-tools.md Phase 3: Agent Tools (Bash + MCP) — Implementation Plan ok 0
mark://localhost:6309/junto/plans/phase4-lsp.md Phase 4: LSP Integration — Implementation Plan ok 0
mark://localhost:6309/junto/plans/phase5-dogfood-essentials.md Phase 5 Dogfood Essentials Plan ok 0
mark://localhost:6309/junto/plans/phase5-horizontal-scroll.md ok 0
mark://localhost:6309/junto/plans/phase5-tool-read-file.md ok 0
mark://localhost:6309/junto/plans/phase6-planning-mode.md Phase 6: Plans + Steps + Conversational Planning Mode ok 0
mark://localhost:6309/junto/plans/pi-mono-layering.md Pi-Mono-Style Layering — Architecture Refactor ok 3
mark://localhost:6309/junto/plans/project-schema-enforcement.md Project Schema Enforcement ok 0
mark://localhost:6309/junto/plans/prompt-caching.md Plan: Anthropic-Style Prompt Caching ok 0
mark://localhost:6309/junto/plans/provenance.md Plan: Session Provenance (Phase 2, Milestone 3) ok 0
mark://localhost:6309/junto/plans/strip-down-and-quality.md Strip-Down + Quality Plan ok 1
mark://localhost:6309/junto/plans/surgical-animation.md Plan: Surgical Edit Animation (Milestone 3.5) ok 0
mark://localhost:6309/junto/plans/terse-mode.md Plan: Terse Mode (Output Token Reduction) ok 0
mark://localhost:6309/junto/plans/textarea-component.md TextArea Component ok 0
mark://localhost:6309/junto/plans/token-telemetry.md Plan: Token Usage Telemetry ok 0
mark://localhost:6309/junto/plans/validation-pipeline-3-cuts.md Plan: Generalize Validation Pipeline (3 cuts) ok 0
mark://localhost:6309/junto/roadmap.md ok 1
mark://localhost:6309/junto/tui-architecture.md Junto TUI — Architecture Plan ok 2
mark://localhost:6309/nib/architecture.md Architecture ok 10
mark://localhost:6309/nib/debugging.md Debugging notes ok 0
mark://localhost:6309/nib/engineering-values.md Engineering Values ok 6
mark://localhost:6309/nib/index.md nib ok 76
mark://localhost:6309/nib/journal.md nib — Journal ok 63
mark://localhost:6309/nib/mission.md nib — Mission ok 5
mark://localhost:6309/nib/patterns.md Patterns ok 9
mark://localhost:6309/nib/plans/ Index of /nib/plans/ ok 35
mark://localhost:6309/nib/plans/agent-foundation.md Agent Foundation — Architecture Plan ok 3
mark://localhost:6309/nib/plans/agent-pane-collapse.md Agent Pane Collapse/Expand — Deferred Plan ok 0
mark://localhost:6309/nib/plans/agent-pane-file-picker.md Agent Pane @ File Picker — Deferred Plan ok 1
mark://localhost:6309/nib/plans/agent-pane-redesign.md Agent Pane Redesign — Trimmed Plan ok 0
mark://localhost:6309/nib/plans/agent-pane-tool-rows.md Agent Pane Tool Call Rows — Deferred Plan ok 0
mark://localhost:6309/nib/plans/agent-parked-event.md Plan — Agent-emitted AgentParked event (kit AgentWaiting race fix) ok 0
mark://localhost:6309/nib/plans/agent-token-efficiency.md Plan: Agent token efficiency — close the 180x gap with pi ok 0
mark://localhost:6309/nib/plans/apply-patch-tool.md Plan: apply_patch tool — Codex-style patch primitive for incremental edits ok 0
mark://localhost:6309/nib/plans/appmodel-decomposition.md AppModel Decomposition Plan ok 0
mark://localhost:6309/nib/plans/edit-tool-batching.md Plan: Edit-tool batching — close ~7–10 of the 24-turn gap to pi-agent ok 2
mark://localhost:6309/nib/plans/editor-vs-buffer-split.md Editor vs Buffer Handle Split ok 0
mark://localhost:6309/nib/plans/eval-toggle-ux.md Plan: Eval-toggle UX when no coding style is configured ok 0
mark://localhost:6309/nib/plans/global-skills-dir.md Plan: Global skills directory ok 2
mark://localhost:6309/nib/plans/kit-agent-port.md Plan: kit.AgentLifecycle port ok 7
mark://localhost:6309/nib/plans/kit-contracttest.md Plan: kit/contracttest/ + engine/contracttest/ — port contract test fixtures ok 0
mark://localhost:6309/nib/plans/kit-decorate.md Plan: kit decorator helpers (kit.DecorateProvider / DecorateStore / DecorateTool) ok 1
mark://localhost:6309/nib/plans/kit-event-bus.md Plan: kit.Agent.Subscribe — event bus as the consumption primitive ✅ ok 1
mark://localhost:6309/nib/plans/kit-registry.md Plan: kit.Toolset adds Commands — unified plug-in registration ok 0
mark://localhost:6309/nib/plans/kit-v1-versioning.md Plan: kit/v1/ — semver discipline for the public kit API ok 4
mark://localhost:6309/nib/plans/layer-3-codepath-rename.md Layer 3 — Junto → nib code-path rename ok 1
mark://localhost:6309/nib/plans/library-first.md Plan — nib as a Library; nib-code as Its Flagship Consumer ok 0
mark://localhost:6309/nib/plans/nibster.md Plan — nibster: General CLI Agent on Kit ok 1
mark://localhost:6309/nib/plans/phase-6-final-wiring.md Phase 6 — Final Wiring ok 1
mark://localhost:6309/nib/plans/plugin-metadata.md Plan: Plug-in metadata + introspection ✅ ok 1
mark://localhost:6309/nib/plans/session-decomposition.md Session Decomposition Plan ok 0
mark://localhost:6309/nib/plans/skills-adapter.md Plan: Skills adapter — model-invoked instruction bundles ok 0
mark://localhost:6309/nib/plans/slash-commands.md Plan — Slash Command Infrastructure ok 0
mark://localhost:6309/nib/plans/tool-output-cap.md Plan: per-tool-output cap — bound history growth from large tool results ok 0
mark://localhost:6309/nib/plans/tui-callback-split.md Plan: TUI callback split — generic vs coding-flavored ok 1
mark://localhost:6309/nib/plans/tui-facade.md Plan — tui.Run(Config) Facade ok 0
mark://localhost:6309/nib/plans/turn-count-investigation-data.md Turn-count investigation — Phase 1 + Phase 2 data ok 4
mark://localhost:6309/nib/plans/turn-count-investigation.md Plan: Turn-count investigation — close the 4.4x assistant-turn gap to pi-agent ok 6
mark://localhost:6309/nib/plans/update-task-bundling.md Update-Task Bundling — Fold update_task Into Mutating Tool Calls ok 3
mark://localhost:6309/nib/plans/validator-sidecar.md Plan: Validator sidecar protocol — out-of-process validators parallel to MCP ok 1
mark://localhost:6309/nib/plans/work-tree-gate-softening.md archived 0
mark://localhost:6309/nib/roadmap.md Roadmap ok 27
mark://soul.demarkus.io demarkus-soul ok 17
mark://soul.demarkus.io/ demarkus-soul ok 11
mark://soul.demarkus.io/architecture.md Architecture ok 1
mark://soul.demarkus.io/completed-plans.md Completed Plans ok 0
mark://soul.demarkus.io/conventions.md Conventions and Working Agreements ok 3
mark://soul.demarkus.io/debt.md Code Debt & Improvements ok 0
mark://soul.demarkus.io/debugging.md Debugging ok 0
mark://soul.demarkus.io/demarkus-library/adr/ Index of /demarkus-library/adr/ ok 5
mark://soul.demarkus.io/demarkus-library/adr/0001-echo-bulwarkauth-layout.md ADR 0001 — Echo + bulwarkauth-style layout for the front-end ok 0
mark://soul.demarkus.io/demarkus-library/adr/0002-hexagonal-architecture.md ADR 0002 — Hexagonal (ports & adapters) architecture ok 0
mark://soul.demarkus.io/demarkus-library/adr/0003-htmx-ssr-philosophy.md ADR 0003 — SSR-first, htmx-hard, no JSON ok 0
mark://soul.demarkus.io/demarkus-library/adr/0004-broker-web-sso.md ADR 0004 — Broker confidential web client + redirect SSO (reject device flow) ok 1
mark://soul.demarkus.io/demarkus-library/adr/0005-reading-room-spatial-trail.md ADR 0005 — The Reading Room: spatial trails over temporal history ok 1
mark://soul.demarkus.io/demarkus-library/architecture.md not-found 0
mark://soul.demarkus.io/demarkus-library/audit-2026-06-18.md demarkus-library — Architecture & Code-Quality Audit (2026-06-18) ok 0
mark://soul.demarkus.io/demarkus-library/debt.md demarkus-library — Debt & Deferred Work ok 0
mark://soul.demarkus.io/demarkus-library/debugging.md demarkus-library — Debugging & Gotchas ok 0
mark://soul.demarkus.io/demarkus-library/index.md demarkus-library ok 17
mark://soul.demarkus.io/demarkus-library/journal/ Index of /demarkus-library/journal/ ok 7
mark://soul.demarkus.io/demarkus-library/journal/2026-06-10.md 2026-06-10 — demarkus-library Phase 0 ok 1
mark://soul.demarkus.io/demarkus-library/journal/2026-06-11.md 2026-06-11 — demarkus-library Phase 1b: plan + steps 2.2/2.5 ok 2
mark://soul.demarkus.io/demarkus-library/journal/2026-06-12.md 2026-06-12 — demarkus-library deploy manifests + CI/release ok 2
mark://soul.demarkus.io/demarkus-library/journal/2026-06-13.md 2026-06-13 — floor live + trail root-listing fix ok 0
mark://soul.demarkus.io/demarkus-library/journal/2026-06-14.md 2026-06-14 — world-view zoom level ok 0
mark://soul.demarkus.io/demarkus-library/journal/2026-06-15.md 2026-06-15 — R4 reader mode (the focus overlay) ok 0
mark://soul.demarkus.io/demarkus-library/journal/2026-06-18.md 2026-06-18 — login knowledge-graph backdrop + roadmap reconcile ok 0
mark://soul.demarkus.io/demarkus-library/patterns.md not-found 0
mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md Phase 1b — Web SSO over the Broker (two-repo plan) ok 3
mark://soul.demarkus.io/demarkus-library/plans/phase-2-restricted-collections.md Phase 2 — Restricted Collections (plan) ok 0
mark://soul.demarkus.io/demarkus-library/plans/phase-3-cataloging-desk.md Phase 3 — Cataloging Desk (plan) ok 0
mark://soul.demarkus.io/demarkus-library/plans/phase-5-public-face.md Phase 5 — Public Face: the anonymous-read decision (plan) ok 1
mark://soul.demarkus.io/demarkus-library/plans/reader-mode.md Reader mode — the focus overlay (plan) ok 0
mark://soul.demarkus.io/demarkus-library/plans/reading-room.md The Reading Room — design notes (draft) ok 1
mark://soul.demarkus.io/demarkus-library/roadmap.md demarkus-library — Roadmap & Resume ok 19
mark://soul.demarkus.io/ecosystem.md Ecosystem ok 1
mark://soul.demarkus.io/faq.md FAQ ok 0
mark://soul.demarkus.io/guide.md Guide: Setting Up demarkus-soul ok 0
mark://soul.demarkus.io/guidelines.md Coding Guidelines ok 0
mark://soul.demarkus.io/index.md demarkus-soul ok 45
mark://soul.demarkus.io/journal.md Journal ok 4
mark://soul.demarkus.io/journal/ Index of /journal/ ok 42
mark://soul.demarkus.io/journal/2026-02-24.md Journal — 2026-02-24 ok 4
mark://soul.demarkus.io/journal/2026-02-26.md Journal — 2026-02-26 ok 0
mark://soul.demarkus.io/journal/2026-02-28.md Journal — 2026-02-28 ok 0
mark://soul.demarkus.io/journal/2026-03-01.md Journal — 2026-03-01 ok 0
mark://soul.demarkus.io/journal/2026-03-02.md Journal — 2026-03-02 ok 0
mark://soul.demarkus.io/journal/2026-03-03.md Journal — 2026-03-03 ok 0
mark://soul.demarkus.io/journal/2026-03-04.md Journal — 2026-03-04 ok 0
mark://soul.demarkus.io/journal/2026-03-05.md Journal — 2026-03-05 ok 0
mark://soul.demarkus.io/journal/2026-03-06.md Journal — 2026-03-06 ok 0
mark://soul.demarkus.io/journal/2026-03-07.md Journal — 2026-03-07 ok 0
mark://soul.demarkus.io/journal/2026-03-08.md Journal — 2026-03-08 ok 0
mark://soul.demarkus.io/journal/2026-03-11.md Journal — 2026-03-11 ok 0
mark://soul.demarkus.io/journal/2026-03-14.md Journal — 2026-03-14 ok 0
mark://soul.demarkus.io/journal/2026-03-16.md Journal — 2026-03-16 ok 0
mark://soul.demarkus.io/journal/2026-03-19.md Journal — 2026-03-19 ok 0
mark://soul.demarkus.io/journal/2026-04-08.md Journal — 2026-04-08 ok 0
mark://soul.demarkus.io/journal/2026-04-21.md Journal — 2026-04-21 ok 0
mark://soul.demarkus.io/journal/2026-04-24.md Journal — 2026-04-24 ok 1
mark://soul.demarkus.io/journal/2026-04-26.md Journal — 2026-04-26 ok 1
mark://soul.demarkus.io/journal/2026-05-05.md Journal — 2026-05-05 ok 0
mark://soul.demarkus.io/journal/2026-05-11.md Journal — 2026-05-11 ok 0
mark://soul.demarkus.io/journal/2026-05-12.md Journal — 2026-05-12 ok 0
mark://soul.demarkus.io/journal/2026-05-13.md Journal — 2026-05-13 ok 0
mark://soul.demarkus.io/journal/2026-05-14.md 2026-05-14 ok 0
mark://soul.demarkus.io/journal/2026-05-15.md 2026-05-15 — Universe Onboarding PR1 ok 0
mark://soul.demarkus.io/journal/2026-05-20.md 2026-05-20 — Universe Onboarding PR5 ok 1
mark://soul.demarkus.io/journal/2026-05-21.md 2026-05-21 ok 0
mark://soul.demarkus.io/journal/2026-05-22.md 2026-05-22 ok 0
mark://soul.demarkus.io/journal/2026-05-23.md 2026-05-23 ok 0
mark://soul.demarkus.io/journal/2026-05-27.md 2026-05-27 ok 0
mark://soul.demarkus.io/journal/2026-05-28.md 2026-05-28 ok 1
mark://soul.demarkus.io/journal/2026-05-30.md Journal — 2026-05-30 ok 0
mark://soul.demarkus.io/journal/2026-05-31.md Journal — 2026-05-31 ok 0
mark://soul.demarkus.io/journal/2026-06-01.md demarkus-soul journal — 2026-06-01 ok 1
mark://soul.demarkus.io/journal/2026-06-02.md 2026-06-02 ok 0
mark://soul.demarkus.io/journal/2026-06-03.md 2026-06-03 ok 1
mark://soul.demarkus.io/journal/2026-06-06.md Journal — 2026-06-06 ok 0
mark://soul.demarkus.io/journal/2026-06-08.md 2026-06-08 — Broker-global OIDC AllowDomains gate ok 0
mark://soul.demarkus.io/journal/2026-06-11.md 2026-06-11 — Broker confidential web-client support (Phase 1b Step 1) ok 1
mark://soul.demarkus.io/journal/2026-06-12.md Journal — 2026-06-12 ok 0
mark://soul.demarkus.io/journal/2026-06-16.md 2026-06-16 — Knowledge ingestion pipeline design ok 1
mark://soul.demarkus.io/journal/2026-06-17.md 2026-06-17 — Knowledge ingestion phase 0: prerequisites (brokered half) ok 0
mark://soul.demarkus.io/journal/auto-memory not-found 0
mark://soul.demarkus.io/obsidian-details.md not-found 0
mark://soul.demarkus.io/patterns.md Patterns & Conventions ok 2
mark://soul.demarkus.io/plans/broker-auth-code-grant.md Plan: Broker Authorization Code Grant ok 0
mark://soul.demarkus.io/plans/broker-deadcode-cleanup.md Broker — Post-Simplification Dead-Code Cleanup ok 0
mark://soul.demarkus.io/plans/broker-https-gateway.md Plan: Broker MCP Gateway (Knowledge-System Layer) ok 0
mark://soul.demarkus.io/plans/broker-stable-mint.md Broker — Lazy Token Provisioning + Cache-Stable Retries ok 0
mark://soul.demarkus.io/plans/claude-code-plugin.md Plan: Claude Code Plugin ok 0
mark://soul.demarkus.io/plans/conflict-merge.md Plan: Conflict-Aware Merge in MCP Tools ok 0
mark://soul.demarkus.io/plans/content-addressing.md Content-Addressed Fetch — Implementation Plan ok 0
mark://soul.demarkus.io/plans/external-links.md Plan: External Links in demarkus-tui — COMPLETE (Phase 1 only) ok 1
mark://soul.demarkus.io/plans/federation.md Federation: Agent-Driven Hash Discovery ok 0
mark://soul.demarkus.io/plans/information-graph.md Information Graph — Implementation Plan ok 0
mark://soul.demarkus.io/plans/knowledge-ingestion.md Knowledge Ingestion Pipeline ok 0
mark://soul.demarkus.io/plans/knowledge-system-gke-deploy.md Knowledge System — GKE Reference Deployment ok 3
mark://soul.demarkus.io/plans/lookup-verb.md Plan: LOOKUP verb (topic/importance catalog) ok 1
mark://soul.demarkus.io/plans/obsidian-plugin.md Obsidian Plugin Plan ok 0
mark://soul.demarkus.io/plans/persistent-graph.md Plan: Persistent Graph Store + Backlinks ok 0
mark://soul.demarkus.io/plans/plugin-knowledge-quality.md Plan: Plugin Knowledge-Quality Enforcement ok 0
mark://soul.demarkus.io/plans/poc-deployment.md archived 0
mark://soul.demarkus.io/plans/read-auth.md Read Auth for Private Networks — COMPLETE ok 0
mark://soul.demarkus.io/plans/search-verb.md archived 0
mark://soul.demarkus.io/plans/security-hardening.md Plan: Security Hardening & Documentation — COMPLETE ok 0
mark://soul.demarkus.io/plans/universe-deployment.md Plan: Universe Deployment ok 0
mark://soul.demarkus.io/plans/universe-library.md Universe Library — Plan ok 1
mark://soul.demarkus.io/plans/universe-onboarding-pr3.md Plan: Universe Onboarding — PR3 (Broker device flow) ok 0
mark://soul.demarkus.io/plans/universe-onboarding-pr4.md Plan: Universe Onboarding — PR4 (Broker refresh tokens) ok 0
mark://soul.demarkus.io/plans/universe-onboarding-pr5.md Plan: Universe Onboarding — PR5 (/me/install) ok 0
mark://soul.demarkus.io/plans/universe-onboarding.md Plan: Universe Onboarding ok 0
mark://soul.demarkus.io/plans/versions-sharding.md Versions Directory Sharding ok 0
mark://soul.demarkus.io/plugins/obsidian/index.md Obsidian Plugin — obsidian-demarkus ok 3
mark://soul.demarkus.io/plugins/obsidian/plan.md Obsidian Plugin Plan ok 0
mark://soul.demarkus.io/roadmap.md Roadmap ok 8
mark://soul.demarkus.io/thoughts.md Thoughts ok 1
mark://soul.demarkus.io/universe.md The Universe Pattern ok 4

Edges

From To
mark://127.0.0.1:6401/adr/ltv-rule.md mark://127.0.0.1:6401/credit-policy.md
mark://127.0.0.1:6401/adr/ltv-rule.md mark://127.0.0.1:6402/arrears-rules.md
mark://127.0.0.1:6401/adr/ltv-rule.md mark://127.0.0.1:6403/graph.md
mark://127.0.0.1:6401/credit-policy.md mark://127.0.0.1:6401/adr/ltv-rule.md
mark://127.0.0.1:6401/credit-policy.md mark://127.0.0.1:6402/payment-flows.md
mark://127.0.0.1:6401/decisioning-rules.md mark://127.0.0.1:6401/credit-policy.md
mark://127.0.0.1:6402/ mark://127.0.0.1:6402/arrears-rules.md
mark://127.0.0.1:6402/ mark://127.0.0.1:6402/escrow-calc.md
mark://127.0.0.1:6402/ mark://127.0.0.1:6402/journal.md
mark://127.0.0.1:6402/ mark://127.0.0.1:6402/payment-flows.md
mark://127.0.0.1:6402/arrears-rules.md mark://127.0.0.1:6401/adr/ltv-rule.md
mark://127.0.0.1:6402/payment-flows.md mark://127.0.0.1:6401/adr/ltv-rule.md
mark://127.0.0.1:6402/payment-flows.md mark://127.0.0.1:6402/arrears-rules.md
mark://127.0.0.1:6402/payment-flows.md mark://127.0.0.1:6402/escrow-calc.md
mark://docs.demarkus.io mark://docs.demarkus.io/DESIGN.md
mark://docs.demarkus.io mark://docs.demarkus.io/SPEC.md
mark://docs.demarkus.io mark://docs.demarkus.io/architecture/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/client/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/deployment/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/install/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/philosophy/agent-queue-template.md
mark://docs.demarkus.io mark://docs.demarkus.io/philosophy/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/reference/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/security/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/server/index.md
mark://docs.demarkus.io mark://docs.demarkus.io/tools/index.md
mark://docs.demarkus.io/architecture/index.md mark://docs.demarkus.io/SPEC.md
mark://docs.demarkus.io/architecture/index.md mark://docs.demarkus.io/index.md
mark://docs.demarkus.io/architecture/index.md mark://docs.demarkus.io/philosophy/index.md
mark://docs.demarkus.io/client/index.md mark://docs.demarkus.io/deployment/index.md
mark://docs.demarkus.io/client/index.md mark://docs.demarkus.io/reference/index.md
mark://docs.demarkus.io/client/index.md mark://docs.demarkus.io/server/index.md
mark://docs.demarkus.io/client/index.md mark://docs.demarkus.io/tools/index.md
mark://docs.demarkus.io/deployment/index.md mark://docs.demarkus.io/install/index.md
mark://docs.demarkus.io/deployment/index.md mark://docs.demarkus.io/reference/index.md
mark://docs.demarkus.io/deployment/index.md mark://docs.demarkus.io/security/index.md
mark://docs.demarkus.io/deployment/index.md mark://docs.demarkus.io/server/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/DESIGN.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/SPEC.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/architecture/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/client/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/deployment/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/install/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/philosophy/agent-queue-template.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/philosophy/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/reference/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/security/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/server/index.md
mark://docs.demarkus.io/index.md mark://docs.demarkus.io/tools/index.md
mark://docs.demarkus.io/install/index.md https://github.com/latebit-io/demarkus/releases
mark://docs.demarkus.io/install/index.md mark://docs.demarkus.io/client/index.md
mark://docs.demarkus.io/install/index.md mark://docs.demarkus.io/security/index.md
mark://docs.demarkus.io/install/index.md mark://docs.demarkus.io/server/index.md
mark://docs.demarkus.io/philosophy/agent-cookbook.md mark://docs.demarkus.io/architecture/index.md
mark://docs.demarkus.io/philosophy/agent-cookbook.md mark://docs.demarkus.io/index.md
mark://docs.demarkus.io/philosophy/agent-cookbook.md mark://docs.demarkus.io/philosophy/index.md
mark://docs.demarkus.io/philosophy/agent-cookbook.md mark://docs.demarkus.io/philosophy/why-demarkus.md
mark://docs.demarkus.io/philosophy/agent-queue-template.md mark://docs.demarkus.io/index.md
mark://docs.demarkus.io/philosophy/agent-queue-template.md mark://docs.demarkus.io/philosophy/agent-cookbook.md
mark://docs.demarkus.io/philosophy/agent-queue-template.md mark://docs.demarkus.io/philosophy/index.md
mark://docs.demarkus.io/philosophy/index.md mark://docs.demarkus.io/SPEC.md
mark://docs.demarkus.io/philosophy/index.md mark://docs.demarkus.io/architecture/index.md
mark://docs.demarkus.io/philosophy/index.md mark://docs.demarkus.io/index.md
mark://docs.demarkus.io/philosophy/index.md mark://docs.demarkus.io/philosophy/agent-cookbook.md
mark://docs.demarkus.io/philosophy/index.md mark://docs.demarkus.io/philosophy/agent-queue-template.md
mark://docs.demarkus.io/philosophy/index.md mark://docs.demarkus.io/philosophy/why-demarkus.md
mark://docs.demarkus.io/philosophy/why-demarkus.md mark://docs.demarkus.io/SPEC.md
mark://docs.demarkus.io/philosophy/why-demarkus.md mark://docs.demarkus.io/architecture/index.md
mark://docs.demarkus.io/philosophy/why-demarkus.md mark://docs.demarkus.io/index.md
mark://docs.demarkus.io/philosophy/why-demarkus.md mark://docs.demarkus.io/philosophy/index.md
mark://docs.demarkus.io/reference/index.md mark://docs.demarkus.io/SPEC.md
mark://docs.demarkus.io/reference/index.md mark://docs.demarkus.io/client/index.md
mark://docs.demarkus.io/reference/index.md mark://docs.demarkus.io/deployment/index.md
mark://docs.demarkus.io/reference/index.md mark://docs.demarkus.io/install/index.md
mark://docs.demarkus.io/reference/index.md mark://docs.demarkus.io/reference/agent-manifest.md
mark://docs.demarkus.io/reference/index.md mark://docs.demarkus.io/server/index.md
mark://docs.demarkus.io/reference/index.md mark://docs.demarkus.io/tools/index.md
mark://docs.demarkus.io/security/index.md mark://docs.demarkus.io/deployment/index.md
mark://docs.demarkus.io/security/index.md mark://docs.demarkus.io/reference/index.md
mark://docs.demarkus.io/security/index.md mark://docs.demarkus.io/tools/index.md
mark://docs.demarkus.io/server/index.md mark://docs.demarkus.io/SPEC.md
mark://docs.demarkus.io/server/index.md mark://docs.demarkus.io/client/index.md
mark://docs.demarkus.io/server/index.md mark://docs.demarkus.io/deployment/index.md
mark://docs.demarkus.io/server/index.md mark://docs.demarkus.io/install/index.md
mark://docs.demarkus.io/server/index.md mark://docs.demarkus.io/reference/index.md
mark://docs.demarkus.io/server/index.md mark://docs.demarkus.io/security/index.md
mark://docs.demarkus.io/tools/index.md mark://docs.demarkus.io/install/index.md
mark://docs.demarkus.io/tools/index.md mark://docs.demarkus.io/reference/index.md
mark://docs.demarkus.io/tools/index.md mark://docs.demarkus.io/server/index.md
mark://hub.demarkus.io mark://hub.demarkus.io/agents.md
mark://hub.demarkus.io mark://hub.demarkus.io/blogs.md
mark://hub.demarkus.io mark://hub.demarkus.io/hubs.md
mark://hub.demarkus.io mark://hub.demarkus.io/indexes/soul.md
mark://hub.demarkus.io mark://hub.demarkus.io/personal.md
mark://hub.demarkus.io mark://hub.demarkus.io/projects.md
mark://hub.demarkus.io mark://hub.demarkus.io/setup.md
mark://hub.demarkus.io mark://hub.demarkus.io/tools.md
mark://hub.demarkus.io/hubs.md mark://hub.demarkus.io
mark://hub.demarkus.io/hubs.md mark://hub.demarkus.io/setup.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/agents.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/blogs.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/hubs.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/indexes/soul.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/personal.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/projects.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/setup.md
mark://hub.demarkus.io/index.md mark://hub.demarkus.io/tools.md
mark://hub.demarkus.io/projects.md mark://docs.demarkus.io
mark://hub.demarkus.io/projects.md mark://soul.demarkus.io
mark://hub.demarkus.io/setup.md mark://hub.demarkus.io/index.md
mark://localhost/nib/architecture.md mark://localhost/nib/engineering-values.md
mark://localhost/nib/architecture.md mark://localhost/nib/journal.md
mark://localhost/nib/architecture.md mark://localhost/nib/patterns.md
mark://localhost/nib/architecture.md mark://localhost/nib/plans/
mark://localhost/nib/architecture.md mark://localhost/nib/plans/editor-vs-buffer-split.md
mark://localhost/nib/engineering-values.md mark://localhost/nib/architecture.md
mark://localhost/nib/engineering-values.md mark://localhost/nib/mission.md
mark://localhost/nib/engineering-values.md mark://localhost/nib/patterns.md
mark://localhost/nib/engineering-values.md mark://localhost/nib/plans/
mark://localhost/nib/engineering-values.md mark://localhost/nib/plans/library-first.md
mark://localhost/nib/engineering-values.md mark://localhost/nib/roadmap.md
mark://localhost/nib/mission.md mark://localhost/junto/philosophy.md
mark://localhost/nib/mission.md mark://localhost/nib/engineering-values.md
mark://localhost/nib/mission.md mark://localhost/nib/roadmap.md
mark://localhost/nib/patterns.md mark://localhost/nib/architecture.md
mark://localhost/nib/patterns.md mark://localhost/nib/engineering-values.md
mark://localhost/nib/patterns.md mark://localhost/nib/roadmap.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/agent-foundation.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/agent-pane-collapse.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/agent-pane-file-picker.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/agent-pane-redesign.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/agent-pane-tool-rows.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/agent-parked-event.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/agent-token-efficiency.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/apply-patch-tool.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/appmodel-decomposition.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/edit-tool-batching.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/editor-vs-buffer-split.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/eval-toggle-ux.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/global-skills-dir.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/kit-agent-port.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/kit-contracttest.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/kit-decorate.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/kit-event-bus.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/kit-registry.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/kit-v1-versioning.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/layer-3-codepath-rename.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/library-first.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/nibster.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/phase-6-final-wiring.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/plugin-metadata.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/session-decomposition.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/skills-adapter.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/slash-commands.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/tool-output-cap.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/tui-callback-split.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/tui-facade.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/turn-count-investigation-data.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/turn-count-investigation.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/update-task-bundling.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/validator-sidecar.md
mark://localhost/nib/plans/ mark://localhost/nib/plans/work-tree-gate-softening.md
mark://localhost/nib/plans/agent-foundation.md mark://localhost/junto/plans/pi-mono-layering.md
mark://localhost/nib/plans/agent-foundation.md mark://localhost/nib/plans/phase-6-final-wiring.md
mark://localhost/nib/plans/agent-pane-file-picker.md file:///Users/fritz/latebit/nib/tui/ui/model_selector.go
mark://localhost/nib/roadmap.md mark://localhost/nib/architecture.md
mark://localhost/nib/roadmap.md mark://localhost/nib/debugging.md
mark://localhost/nib/roadmap.md mark://localhost/nib/index.md
mark://localhost/nib/roadmap.md mark://localhost/nib/journal.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/agent-pane-collapse.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/agent-pane-redesign.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/apply-patch-tool.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/appmodel-decomposition.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/editor-vs-buffer-split.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/eval-toggle-ux.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/kit-agent-port.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/kit-contracttest.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/kit-decorate.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/kit-event-bus.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/kit-registry.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/library-first.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/plugin-metadata.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/session-decomposition.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/slash-commands.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/tool-output-cap.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/tui-callback-split.md
mark://localhost/nib/roadmap.md mark://localhost/nib/plans/validator-sidecar.md
mark://localhost:6309/ mark://localhost:6309/demarkus-library/adr/0006-navigation-rework.md
mark://localhost:6309/ mark://localhost:6309/demarkus-library/index.md
mark://localhost:6309/ mark://localhost:6309/demarkus-library/roadmap.md
mark://localhost:6309/ mark://localhost:6309/junto/index.md
mark://localhost:6309/ mark://localhost:6309/nib/index.md
mark://localhost:6309/demarkus-library/index.md mark://localhost:6309/demarkus-library/adr/0006-navigation-rework.md
mark://localhost:6309/demarkus-library/index.md mark://localhost:6309/demarkus-library/architecture.md
mark://localhost:6309/demarkus-library/index.md mark://localhost:6309/demarkus-library/roadmap.md
mark://localhost:6309/demarkus-library/roadmap.md mark://localhost:6309/demarkus-library/adr/0006-navigation-rework.md
mark://localhost:6309/demarkus-library/roadmap.md mark://localhost:6309/demarkus-library/architecture.md
mark://localhost:6309/index.md mark://localhost:6309/demarkus-library/adr/0006-navigation-rework.md
mark://localhost:6309/index.md mark://localhost:6309/demarkus-library/index.md
mark://localhost:6309/index.md mark://localhost:6309/demarkus-library/roadmap.md
mark://localhost:6309/index.md mark://localhost:6309/junto/index.md
mark://localhost:6309/index.md mark://localhost:6309/nib/index.md
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/architecture.md
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/backlog.md
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/journal.md
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/patterns.md
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/philosophy.md
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/plans/
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/roadmap.md
mark://localhost:6309/junto/index.md mark://localhost:6309/junto/tui-architecture.md
mark://localhost:6309/junto/index.md mark://localhost:6309/nib/index.md
mark://localhost:6309/junto/patterns.md mark://localhost:6309/junto/architecture.md
mark://localhost:6309/junto/philosophy.md mark://localhost:6309/nib/mission.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/anthropic-provider.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/architecture-cleanup.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/awaiting-input.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/coding-style-enforcement.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/command-palette.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/continuous-conversation.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/distributed-memory.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/dual-cursors-animated-typing.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/find-in-file.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/headless-agent.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/junto-analyze.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/lint-adapter-architecture.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/llm-config.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/memory-integration.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/milestone-2-context-set.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/milestone-4-project-view.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/oauth-providers.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/phase-3-agent-tools.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/phase4-lsp.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/phase5-dogfood-essentials.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/phase5-horizontal-scroll.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/phase5-tool-read-file.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/phase6-planning-mode.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/pi-mono-layering.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/project-schema-enforcement.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/prompt-caching.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/provenance.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/strip-down-and-quality.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/surgical-animation.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/terse-mode.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/textarea-component.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/token-telemetry.md
mark://localhost:6309/junto/plans/ mark://localhost:6309/junto/plans/validation-pipeline-3-cuts.md
mark://localhost:6309/junto/plans/pi-mono-layering.md mark://localhost:6309/nib/plans/agent-foundation.md
mark://localhost:6309/junto/plans/strip-down-and-quality.md https://github.com/davidondrej/pi-agent/tree/main/packages/coding-agent
mark://localhost:6309/junto/roadmap.md mark://localhost:6309/junto/tui-architecture.md
mark://localhost:6309/junto/tui-architecture.md mark://localhost:6309/junto/roadmap.md
mark://localhost:6309/nib/architecture.md mark://localhost:6309/nib/engineering-values.md
mark://localhost:6309/nib/architecture.md mark://localhost:6309/nib/journal.md
mark://localhost:6309/nib/architecture.md mark://localhost:6309/nib/patterns.md
mark://localhost:6309/nib/architecture.md mark://localhost:6309/nib/plans/
mark://localhost:6309/nib/architecture.md mark://localhost:6309/nib/plans/editor-vs-buffer-split.md
mark://localhost:6309/nib/engineering-values.md mark://localhost:6309/nib/architecture.md
mark://localhost:6309/nib/engineering-values.md mark://localhost:6309/nib/mission.md
mark://localhost:6309/nib/engineering-values.md mark://localhost:6309/nib/patterns.md
mark://localhost:6309/nib/engineering-values.md mark://localhost:6309/nib/plans/
mark://localhost:6309/nib/engineering-values.md mark://localhost:6309/nib/plans/library-first.md
mark://localhost:6309/nib/engineering-values.md mark://localhost:6309/nib/roadmap.md
mark://localhost:6309/nib/index.md mark://localhost:6309/junto/architecture.md
mark://localhost:6309/nib/index.md mark://localhost:6309/junto/index.md
mark://localhost:6309/nib/index.md mark://localhost:6309/junto/patterns.md
mark://localhost:6309/nib/index.md mark://localhost:6309/junto/philosophy.md
mark://localhost:6309/nib/index.md mark://localhost:6309/junto/roadmap.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/architecture.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/debugging.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/engineering-values.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/journal.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/mission.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/patterns.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/agent-foundation.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/agent-pane-collapse.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/agent-pane-redesign.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/agent-parked-event.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/agent-token-efficiency.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/apply-patch-tool.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/appmodel-decomposition.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/edit-tool-batching.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/editor-vs-buffer-split.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/eval-toggle-ux.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/global-skills-dir.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/kit-agent-port.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/kit-contracttest.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/kit-decorate.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/kit-event-bus.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/kit-registry.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/kit-v1-versioning.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/layer-3-codepath-rename.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/library-first.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/nibster.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/phase-6-final-wiring.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/plugin-metadata.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/session-decomposition.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/skills-adapter.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/slash-commands.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/tool-output-cap.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/tui-callback-split.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/tui-facade.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/turn-count-investigation-data.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/turn-count-investigation.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/update-task-bundling.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/plans/validator-sidecar.md
mark://localhost:6309/nib/index.md mark://localhost:6309/nib/roadmap.md
mark://localhost:6309/nib/journal.md file:///Users/fritz/latebit/nib/ai/llm/codex_api.go
mark://localhost:6309/nib/journal.md file:///Users/fritz/latebit/nib/ai/llm/codex_probe.go
mark://localhost:6309/nib/journal.md file:///Users/fritz/latebit/nib/cmd/nib-code/main.go
mark://localhost:6309/nib/journal.md file:///Users/fritz/latebit/nib/coding/agent/compact.go
mark://localhost:6309/nib/journal.md file:///Users/fritz/latebit/nib/coding/agent/context_snapshot.go
mark://localhost:6309/nib/journal.md file:///Users/fritz/latebit/nib/coding/command/context.go
mark://localhost:6309/nib/journal.md file:///Users/fritz/latebit/nib/tui/tui.go
mark://localhost:6309/nib/journal.md mark://localhost:6309/junto/philosophy.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/junto/plans/pi-mono-layering.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/architecture.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/engineering-values.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/index.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/mission.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/patterns.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/agent-foundation.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/agent-pane-collapse.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/agent-pane-file-picker.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/agent-pane-redesign.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/agent-parked-event.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/agent-token-efficiency.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/appmodel-decomposition.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/edit-tool-batching.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/eval-toggle-ux.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/global-skills-dir.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/kit-contracttest.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/kit-event-bus.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/kit-registry.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/kit-v1-versioning.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/library-first.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/plugin-metadata.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/session-decomposition.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/skills-adapter.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/slash-commands.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/tui-callback-split.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/tui-facade.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/turn-count-investigation-data.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/turn-count-investigation.md
mark://localhost:6309/nib/journal.md mark://localhost:6309/nib/plans/validator-sidecar.md
mark://localhost:6309/nib/mission.md mark://localhost:6309/junto/philosophy.md
mark://localhost:6309/nib/mission.md mark://localhost:6309/nib/engineering-values.md
mark://localhost:6309/nib/mission.md mark://localhost:6309/nib/roadmap.md
mark://localhost:6309/nib/patterns.md mark://localhost:6309/nib/architecture.md
mark://localhost:6309/nib/patterns.md mark://localhost:6309/nib/engineering-values.md
mark://localhost:6309/nib/patterns.md mark://localhost:6309/nib/roadmap.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/agent-foundation.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/agent-pane-collapse.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/agent-pane-file-picker.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/agent-pane-redesign.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/agent-pane-tool-rows.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/agent-parked-event.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/agent-token-efficiency.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/apply-patch-tool.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/appmodel-decomposition.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/edit-tool-batching.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/editor-vs-buffer-split.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/eval-toggle-ux.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/global-skills-dir.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/kit-agent-port.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/kit-contracttest.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/kit-decorate.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/kit-event-bus.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/kit-registry.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/kit-v1-versioning.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/layer-3-codepath-rename.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/library-first.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/nibster.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/phase-6-final-wiring.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/plugin-metadata.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/session-decomposition.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/skills-adapter.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/slash-commands.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/tool-output-cap.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/tui-callback-split.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/tui-facade.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/turn-count-investigation-data.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/turn-count-investigation.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/update-task-bundling.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/validator-sidecar.md
mark://localhost:6309/nib/plans/ mark://localhost:6309/nib/plans/work-tree-gate-softening.md
mark://localhost:6309/nib/plans/agent-foundation.md mark://localhost:6309/junto/plans/pi-mono-layering.md
mark://localhost:6309/nib/plans/agent-foundation.md mark://localhost:6309/nib/plans/phase-6-final-wiring.md
mark://localhost:6309/nib/plans/agent-pane-file-picker.md file:///Users/fritz/latebit/nib/tui/ui/model_selector.go
mark://localhost:6309/nib/plans/edit-tool-batching.md mark://localhost:6309/nib/plans/turn-count-investigation-data.md
mark://localhost:6309/nib/plans/global-skills-dir.md mark://localhost:6309/nib/plans/nibster.md
mark://localhost:6309/nib/plans/global-skills-dir.md mark://localhost:6309/nib/plans/skills-adapter.md
mark://localhost:6309/nib/plans/kit-agent-port.md mark://localhost:6309/nib/engineering-values.md
mark://localhost:6309/nib/plans/kit-agent-port.md mark://localhost:6309/nib/plans/tui-callback-split.md
mark://localhost:6309/nib/plans/kit-agent-port.md mark://localhost:6309/nib/roadmap.md
mark://localhost:6309/nib/plans/kit-decorate.md mark://localhost:6309/nib/engineering-values.md
mark://localhost:6309/nib/plans/kit-event-bus.md mark://localhost/nib/engineering-values.md
mark://localhost:6309/nib/plans/kit-v1-versioning.md mark://localhost:6309/nib/plans/kit-contracttest.md
mark://localhost:6309/nib/plans/kit-v1-versioning.md mark://localhost:6309/nib/plans/kit-decorate.md
mark://localhost:6309/nib/plans/kit-v1-versioning.md mark://localhost:6309/nib/plans/kit-event-bus.md
mark://localhost:6309/nib/plans/kit-v1-versioning.md mark://localhost:6309/nib/plans/kit-registry.md
mark://localhost:6309/nib/plans/layer-3-codepath-rename.md mark://localhost:6309/nib/journal.md
mark://localhost:6309/nib/plans/nibster.md mark://localhost:6309/nib/plans/library-first.md
mark://localhost:6309/nib/plans/phase-6-final-wiring.md mark://localhost:6309/nib/plans/agent-foundation.md
mark://localhost:6309/nib/plans/plugin-metadata.md mark://localhost:6309/nib/plans/kit-registry.md
mark://localhost:6309/nib/plans/tui-callback-split.md mark://localhost:6309/nib/plans/kit-agent-port.md
mark://localhost:6309/nib/plans/turn-count-investigation-data.md mark://localhost:6309/nib/plans/edit-tool-batching.md
mark://localhost:6309/nib/plans/turn-count-investigation-data.md mark://localhost:6309/nib/plans/turn-count-investigation.md
mark://localhost:6309/nib/plans/turn-count-investigation.md mark://localhost:6309/nib/plans/agent-token-efficiency.md
mark://localhost:6309/nib/plans/turn-count-investigation.md mark://localhost:6309/nib/plans/edit-tool-batching.md
mark://localhost:6309/nib/plans/turn-count-investigation.md mark://localhost:6309/nib/plans/turn-count-investigation-data.md
mark://localhost:6309/nib/plans/update-task-bundling.md mark://localhost:6309/
mark://localhost:6309/nib/plans/update-task-bundling.md mark://localhost:6309/nib/plans/turn-count-investigation.md
mark://localhost:6309/nib/plans/validator-sidecar.md mark://localhost:6309/nib/plans/kit-registry.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/architecture.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/debugging.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/index.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/journal.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/agent-pane-collapse.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/agent-pane-redesign.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/apply-patch-tool.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/appmodel-decomposition.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/editor-vs-buffer-split.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/eval-toggle-ux.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/kit-agent-port.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/kit-contracttest.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/kit-decorate.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/kit-event-bus.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/kit-registry.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/library-first.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/plugin-metadata.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/session-decomposition.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/slash-commands.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/tool-output-cap.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/tui-callback-split.md
mark://localhost:6309/nib/roadmap.md mark://localhost:6309/nib/plans/validator-sidecar.md
mark://soul.demarkus.io mark://soul.demarkus.io/architecture.md
mark://soul.demarkus.io mark://soul.demarkus.io/completed-plans.md
mark://soul.demarkus.io mark://soul.demarkus.io/debt.md
mark://soul.demarkus.io mark://soul.demarkus.io/debugging.md
mark://soul.demarkus.io mark://soul.demarkus.io/faq.md
mark://soul.demarkus.io mark://soul.demarkus.io/guide.md
mark://soul.demarkus.io mark://soul.demarkus.io/guidelines.md
mark://soul.demarkus.io mark://soul.demarkus.io/journal.md
mark://soul.demarkus.io mark://soul.demarkus.io/patterns.md
mark://soul.demarkus.io mark://soul.demarkus.io/plans/content-addressing.md
mark://soul.demarkus.io mark://soul.demarkus.io/plans/federation.md
mark://soul.demarkus.io mark://soul.demarkus.io/plans/persistent-graph.md
mark://soul.demarkus.io mark://soul.demarkus.io/plans/read-auth.md
mark://soul.demarkus.io mark://soul.demarkus.io/plans/security-hardening.md
mark://soul.demarkus.io mark://soul.demarkus.io/plugins/obsidian/index.md
mark://soul.demarkus.io mark://soul.demarkus.io/roadmap.md
mark://soul.demarkus.io mark://soul.demarkus.io/thoughts.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/architecture.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/debt.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/debugging.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/guide.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/journal.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/patterns.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/plans/content-addressing.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/plans/federation.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/plans/persistent-graph.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/roadmap.md
mark://soul.demarkus.io/ mark://soul.demarkus.io/thoughts.md
mark://soul.demarkus.io/architecture.md mark://soul.demarkus.io/plans/lookup-verb.md
mark://soul.demarkus.io/conventions.md mark://soul.demarkus.io/guidelines.md
mark://soul.demarkus.io/conventions.md mark://soul.demarkus.io/patterns.md
mark://soul.demarkus.io/demarkus-library/adr/ mark://soul.demarkus.io/demarkus-library/adr/0001-echo-bulwarkauth-layout.md
mark://soul.demarkus.io/demarkus-library/adr/ mark://soul.demarkus.io/demarkus-library/adr/0002-hexagonal-architecture.md
mark://soul.demarkus.io/demarkus-library/adr/ mark://soul.demarkus.io/demarkus-library/adr/0003-htmx-ssr-philosophy.md
mark://soul.demarkus.io/demarkus-library/adr/ mark://soul.demarkus.io/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io/demarkus-library/adr/ mark://soul.demarkus.io/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io/demarkus-library/adr/0004-broker-web-sso.md mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io/demarkus-library/adr/0005-reading-room-spatial-trail.md mark://soul.demarkus.io/demarkus-library/plans/reading-room.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/adr/
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/adr/0001-echo-bulwarkauth-layout.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/adr/0002-hexagonal-architecture.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/adr/0003-htmx-ssr-philosophy.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/architecture.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/debt.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/debugging.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/journal/
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/journal/2026-06-10.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/patterns.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/demarkus-library/roadmap.md
mark://soul.demarkus.io/demarkus-library/index.md mark://soul.demarkus.io/plans/universe-library.md
mark://soul.demarkus.io/demarkus-library/journal/ mark://soul.demarkus.io/demarkus-library/journal/2026-06-10.md
mark://soul.demarkus.io/demarkus-library/journal/ mark://soul.demarkus.io/demarkus-library/journal/2026-06-11.md
mark://soul.demarkus.io/demarkus-library/journal/ mark://soul.demarkus.io/demarkus-library/journal/2026-06-12.md
mark://soul.demarkus.io/demarkus-library/journal/ mark://soul.demarkus.io/demarkus-library/journal/2026-06-13.md
mark://soul.demarkus.io/demarkus-library/journal/ mark://soul.demarkus.io/demarkus-library/journal/2026-06-14.md
mark://soul.demarkus.io/demarkus-library/journal/ mark://soul.demarkus.io/demarkus-library/journal/2026-06-15.md
mark://soul.demarkus.io/demarkus-library/journal/ mark://soul.demarkus.io/demarkus-library/journal/2026-06-18.md
mark://soul.demarkus.io/demarkus-library/journal/2026-06-10.md mark://soul.demarkus.io/demarkus-library/roadmap.md
mark://soul.demarkus.io/demarkus-library/journal/2026-06-11.md mark://soul.demarkus.io/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io/demarkus-library/journal/2026-06-11.md mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io/demarkus-library/journal/2026-06-12.md mark://soul.demarkus.io/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io/demarkus-library/journal/2026-06-12.md mark://soul.demarkus.io/demarkus-library/plans/reading-room.md
mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md mark://soul.demarkus.io/demarkus-library/adr/0004-broker-web-sso.md
mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md mark://soul.demarkus.io/demarkus-library/roadmap.md
mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md mark://soul.demarkus.io/journal/2026-06-11.md
mark://soul.demarkus.io/demarkus-library/plans/phase-5-public-face.md mark://soul.demarkus.io/plans/universe-library.md
mark://soul.demarkus.io/demarkus-library/plans/reading-room.md mark://soul.demarkus.io/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/adr/0005-reading-room-spatial-trail.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/audit-2026-06-18.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/debugging.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/journal/2026-06-12.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/journal/2026-06-13.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/journal/2026-06-15.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/journal/2026-06-18.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/plans/phase-2-restricted-collections.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/plans/phase-3-cataloging-desk.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/plans/phase-5-public-face.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/plans/reader-mode.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/demarkus-library/plans/reading-room.md
mark://soul.demarkus.io/demarkus-library/roadmap.md mark://soul.demarkus.io/plans/universe-library.md
mark://soul.demarkus.io/ecosystem.md mark://soul.demarkus.io/plans/claude-code-plugin.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/architecture.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/completed-plans.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/conventions.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/debt.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/debugging.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/demarkus-library/index.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/ecosystem.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/faq.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/guide.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/guidelines.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/journal/
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/patterns.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/broker-auth-code-grant.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/broker-deadcode-cleanup.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/broker-https-gateway.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/broker-stable-mint.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/claude-code-plugin.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/conflict-merge.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/content-addressing.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/federation.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/information-graph.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/knowledge-ingestion.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/knowledge-system-gke-deploy.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/lookup-verb.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/obsidian-plugin.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/persistent-graph.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/plugin-knowledge-quality.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/poc-deployment.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/read-auth.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/search-verb.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/security-hardening.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/universe-deployment.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/universe-library.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/universe-onboarding-pr3.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/universe-onboarding-pr4.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/universe-onboarding-pr5.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/universe-onboarding.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plans/versions-sharding.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/plugins/obsidian/index.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/roadmap.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/thoughts.md
mark://soul.demarkus.io/index.md mark://soul.demarkus.io/universe.md
mark://soul.demarkus.io/journal.md mark://soul.demarkus.io/architecture.md
mark://soul.demarkus.io/journal.md mark://soul.demarkus.io/debugging.md
mark://soul.demarkus.io/journal.md mark://soul.demarkus.io/patterns.md
mark://soul.demarkus.io/journal.md mark://soul.demarkus.io/roadmap.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-02-24.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-02-26.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-02-28.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-01.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-02.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-03.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-04.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-05.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-06.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-07.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-08.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-11.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-14.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-16.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-03-19.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-04-08.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-04-21.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-04-24.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-04-26.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-05.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-11.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-12.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-13.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-14.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-15.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-20.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-21.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-22.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-23.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-27.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-28.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-30.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-05-31.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-01.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-02.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-03.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-06.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-08.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-11.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-12.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-16.md
mark://soul.demarkus.io/journal/ mark://soul.demarkus.io/journal/2026-06-17.md
mark://soul.demarkus.io/journal/2026-02-24.md mark://soul.demarkus.io/architecture.md
mark://soul.demarkus.io/journal/2026-02-24.md mark://soul.demarkus.io/debugging.md
mark://soul.demarkus.io/journal/2026-02-24.md mark://soul.demarkus.io/patterns.md
mark://soul.demarkus.io/journal/2026-02-24.md mark://soul.demarkus.io/roadmap.md
mark://soul.demarkus.io/journal/2026-04-24.md mark://soul.demarkus.io/journal/auto-memory
mark://soul.demarkus.io/journal/2026-04-26.md mark://soul.demarkus.io/universe.md
mark://soul.demarkus.io/journal/2026-05-20.md https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
mark://soul.demarkus.io/journal/2026-05-28.md mark://soul.demarkus.io/plans/broker-stable-mint.md
mark://soul.demarkus.io/journal/2026-06-01.md mark://soul.demarkus.io/plans/plugin-knowledge-quality.md
mark://soul.demarkus.io/journal/2026-06-03.md mark://soul.demarkus.io/patterns.md
mark://soul.demarkus.io/journal/2026-06-11.md mark://soul.demarkus.io/demarkus-library/plans/phase-1b-web-sso.md
mark://soul.demarkus.io/journal/2026-06-16.md mark://soul.demarkus.io/plans/knowledge-ingestion.md
mark://soul.demarkus.io/patterns.md mark://soul.demarkus.io/architecture.md
mark://soul.demarkus.io/patterns.md mark://soul.demarkus.io/plans/lookup-verb.md
mark://soul.demarkus.io/plans/external-links.md https://github.com/latebit-io/demarkus/issues/75
mark://soul.demarkus.io/plans/knowledge-system-gke-deploy.md https://github.com/latebit-io/demarkus-knowledge-system-deploy
mark://soul.demarkus.io/plans/knowledge-system-gke-deploy.md mark://soul.demarkus.io/plans/universe-deployment.md
mark://soul.demarkus.io/plans/knowledge-system-gke-deploy.md mark://soul.demarkus.io/plans/universe-onboarding.md
mark://soul.demarkus.io/plans/lookup-verb.md https://github.com/latebit-io/demarkus/issues/113
mark://soul.demarkus.io/plans/universe-library.md mark://soul.demarkus.io/demarkus-library/plans/phase-5-public-face.md
mark://soul.demarkus.io/plugins/obsidian/index.md https://github.com/latebit-io/obsidian-demarkus
mark://soul.demarkus.io/plugins/obsidian/index.md mark://soul.demarkus.io/obsidian-details.md
mark://soul.demarkus.io/plugins/obsidian/index.md mark://soul.demarkus.io/plugins/obsidian/plan.md
mark://soul.demarkus.io/roadmap.md https://github.com/latebit-io/demarkus-hub
mark://soul.demarkus.io/roadmap.md https://github.com/latebit-io/demarkus/issues/113
mark://soul.demarkus.io/roadmap.md https://github.com/latebit-io/demarkus/issues/75
mark://soul.demarkus.io/roadmap.md mark://soul.demarkus.io/plans/claude-code-plugin.md
mark://soul.demarkus.io/roadmap.md mark://soul.demarkus.io/plans/external-links.md
mark://soul.demarkus.io/roadmap.md mark://soul.demarkus.io/plans/lookup-verb.md
mark://soul.demarkus.io/roadmap.md mark://soul.demarkus.io/plans/read-auth.md
mark://soul.demarkus.io/roadmap.md mark://soul.demarkus.io/plans/security-hardening.md
mark://soul.demarkus.io/roadmap.md mark://soul.demarkus.io/plans/universe-deployment.md
mark://soul.demarkus.io/thoughts.md https://github.com/gszhangwei/open-spdd
mark://soul.demarkus.io/universe.md https://demarkus.io/blog/creating-an-automated-knowledge-universe/
mark://soul.demarkus.io/universe.md mark://soul.demarkus.io/architecture.md
mark://soul.demarkus.io/universe.md mark://soul.demarkus.io/ecosystem.md
mark://soul.demarkus.io/universe.md mark://soul.demarkus.io/roadmap.md
soul.demarkus.io/plans/broker-auth-code-grant.md complete reader meta

Plan: Broker Authorization Code Grant

Why

The broker today advertises device_code + refresh_token only and ships a stub /oauth/authorize that returns unsupported_response_type (see tools/demarkus-broker/internal/broker/oauth_authorize.go:39). The stub was a probe: if Claude Code's MCP SDK pivoted to device flow on its own, we were done. Observation as of 2026-05-26: it does not — it opens the browser at the advertised authorization_endpoint, gets the JSON 400, and surfaces it as an opaque error to the user. The path forward called out in oauth_authorize.go:23-28 is the one we now take: implement a real authorization-code grant inside the broker, mediating between the MCP client and the upstream IdP, while continuing to keep IdP details invisible to the MCP client.

This is a follow-on to the universe-onboarding sequence (PR3/PR4/PR5 + DCR PR #153). Same layering, same constraints: no protocol or server changes; all work in tools/demarkus-broker/. The MCP client only ever sees the broker as its OAuth AS; the IdP only ever sees the broker as its OAuth client.

Goal

After this plan ships, the following sequence works end-to-end with stock Claude Code:

  1. User adds the broker as an MCP server (via /knowledge-join or claude mcp add).
  2. Claude Code's MCP SDK fetches the broker's discovery doc, sees authorization_code in grant_types_supported, and starts an auth-code flow.
  3. SDK hits /oauth/authorize?response_type=code&client_id=...&code_challenge=...&code_challenge_method=S256&redirect_uri=http://localhost:PORT/callback&state=...&scope=....
  4. Broker redirects through /auth/login → IdP → /auth/callback, exactly as the device-flow shim does today.
  5. Broker mints an authorization code, redirects to http://localhost:PORT/callback?code=...&state=....
  6. SDK POSTs to the token endpoint with grant_type=authorization_code + code + code_verifier. Broker validates PKCE, issues access_token + id_token + refresh_token (broker-signed for both).
  7. SDK uses the access_token as a bearer on all subsequent MCP gateway calls. Refresh via the existing refresh_token grant.

The device-flow surface (/device/*) stays — it is the right shape for tools/demarkus-join and for any non-browser agent. Auth-code is added alongside, not in place of.

Non-Negotiables

  • PKCE required. code_challenge_method=S256 only. No plain. No bare auth-code flow without PKCE. OAuth 2.1 + the MCP authorization spec both require this; we have no legacy client to coddle.
  • redirect_uri MUST be loopback per RFC 8252. Accept http://127.0.0.1:PORT/... and http://localhost:PORT/... with any port. Reject everything else — no public redirect URIs, no urn:ietf:wg:oauth:2.0:oob, no custom URI schemes (those belong to native mobile clients which are not in scope). The DCR endpoint already rubber-stamps any client; the redirect_uri restriction is the only meaningful constraint on where the code lands.
  • No client authentication at /token for auth-code. Public clients per OAuth 2.1; PKCE is the binding. Matches the device-flow surface which is also unauthenticated by client_id.
  • One-shot codes. Each authorization code is single-use; second use revokes the refresh token issued from it (defense-in-depth per OAuth 2.1 §4.1.3).
  • No silent IdP details leaking. The broker is still the only OAuth AS the MCP client sees. IdP-specific scopes, claims, redirect rules all stay internal to the broker.
  • No core changes. Same precedent as the universe-onboarding work: every change lives under tools/demarkus-broker/.

Architecture

The auth-code flow reuses 80% of the device-flow machinery already in device.go/oidc.go/server.go. The differences are:

Aspect Device flow (existing) Auth-code flow (new)
Entry point POST /device/authorize returns codes + URLs GET /oauth/authorize 302s to /auth/login
User-side rendezvous Browser hits /device, enters user_code Browser is already at the right URL
State persistence deviceStore.Authorize() mints + stores authCodeStore.Begin() mints + stores
Cookie/state binding deviceCookieName cookie + signed state.DeviceCode Signed state.AuthCodeID (no separate cookie; the auth-code id is set inside the signed state during /oauth/authorize)
Callback dispatch state.DeviceCode != ""deviceCallback state.AuthCodeID != ""authCodeCallback
Code delivery Polling at /device/token 302 to redirect_uri?code=...&state=...
Token exchange grant_type=urn:ietf:params:oauth:grant-type:device_code grant_type=authorization_code (new branch in deviceToken dispatch)
PKCE N/A code_challenge stored at /oauth/authorize, code_verifier checked at /token

Store shape

New file auth_code_store.go. Two indices, both in-memory with a janitor goroutine like deviceStore:

  • pending (keyed by internal opaque id): the in-flight grant before the user authenticates. Holds client_id, redirect_uri, state (client-supplied), scope, code_challenge, code_challenge_method, expires_at. Created by Begin() at /oauth/authorize. Resolved into code-keyed entry by Bind() after /auth/callback completes the IdP exchange.
  • codes (keyed by issued authorization code): the bindable result the SDK redeems at /token. Holds the resolved ExchangeResult, the PKCE challenge it must satisfy, the issuing client_id + redirect_uri (re-checked at /token per RFC 6749 §4.1.3), and a single-use sentinel.

Both have short TTLs: pending = ~10 min (the user might take a while to sign in), codes = 60 seconds (RFC 6749 §4.1.2 says ≤10 min; OAuth 2.1 BCP says ≤1 min — we follow the tighter bound).

State extension

session.go's State struct currently holds Nonce, ExpiresAt, DeviceCode. We add AuthCodeID. Signed-cookie roundtrip is unchanged; existing tests cover the round-trip — we extend with cases that exercise AuthCodeID.

Handlers

  • oauth_authorize.go — gutted of the stub, replaced with the real handler:

    • Parse response_type (must be code), client_id, redirect_uri, state, scope, code_challenge, code_challenge_method.
    • Validate redirect_uri is loopback per RFC 8252 (allow 127.0.0.1 and localhost with any port and any path).
    • Validate code_challenge_method=S256 and code_challenge is present.
    • For any error that happens BEFORE we trust the redirect_uri: return JSON 400 with the OAuth error code (same shape as today's stub).
    • For any error that happens AFTER redirect_uri is validated: redirect to redirect_uri?error=...&state=... per RFC 6749 §4.1.2.1.
    • On success: authCodeStore.Begin(...), build a signed State{Nonce, AuthCodeID, ExpiresAt} cookie, set it on /auth/callback, 302 to verifier.AuthCodeURL(nonce).
  • server.go authCallback — add a parallel branch alongside the existing DeviceCode dispatch:

    if state.AuthCodeID != "" {
        s.authCodeCallback(w, r, state.AuthCodeID)
        return
    }
    

    The new authCodeCallback (in oauth_authorize.go or a new oauth_callback.go) runs verifier.Exchange, calls authCodeStore.Bind(authCodeID, exchange) which issues a fresh authorization code, then 302s to pending.redirect_uri?code=<authCode>&state=<pending.state>.

  • device.go deviceToken — extend the grant_type switch to dispatch authorization_code to a new deviceTokenAuthCode handler. (The file name is misleading now — could rename to token.go later but that is post-shipping cleanup.) The handler:

    • Reads code, redirect_uri, client_id, code_verifier.
    • authCodeStore.Redeem(code) — single-use; returns the stored exchange + PKCE challenge + issuing client_id/redirect_uri.
    • Re-checks client_id and redirect_uri match what was bound (RFC 6749 §4.1.3).
    • SHA-256(code_verifier) base64url-no-pad → compare to stored code_challenge. Mismatch → invalid_grant.
    • Mint refresh_token via refreshStore (same path as device-flow today).
    • Mint a broker-signed id_token via idTokenSigner (same path as device-flow refresh today; PR4 wiring).
    • Return access_token = id_token (same convention the refresh path uses, per device.go:269-273).
  • discovery.go applyDiscoveryOverrides:

    • Add "authorization_code" to grant_types_supported.
    • Add response_types_supported: ["code"] (currently absent; required for MCP clients to confirm).
    • Add code_challenge_methods_supported: ["S256"].
    • Leave authorization_endpoint pointing at /oauth/authorize (unchanged URL, real handler now).
    • Leave token_endpoint pointing at /device/token (unchanged; same endpoint dispatches all three grants by grant_type).

Error mapping

Condition Surface Code
Missing or unsupported response_type JSON 400 unsupported_response_type
Missing client_id, redirect_uri, code_challenge JSON 400 invalid_request
Non-loopback redirect_uri JSON 400 invalid_request
code_challenge_method ≠ S256 redirect with error (redirect_uri is trusted at this point) invalid_request
Unknown / expired / replayed code at /token JSON 400 invalid_grant
PKCE verifier mismatch JSON 400 invalid_grant
redirect_uri at /token ≠ redirect_uri at /authorize JSON 400 invalid_grant
IdP exchange failure during callback redirect with error access_denied or server_error
User cancels at IdP redirect with error access_denied

Security checklist

  • Code-substitution defense. Authorization codes are 32-byte random base64url; bound to the issuing client_id + redirect_uri; single-use; replay revokes the issued refresh_token.
  • PKCE. S256 only. Stored challenge compared with constant-time equality (subtle.ConstantTimeCompare).
  • State cookie integrity. Reuses the signed-cookie pattern that already gates DeviceCode dispatch — same HMAC, same nonce, same TTL.
  • Open-redirect defense. Pre-redirect validation rejects any redirect_uri that is not a loopback URI. The 302 at the end of the IdP dance can only land on a loopback that we verified before the user ever left.
  • Mix-up defense. iss parameter (RFC 9207) added to the redirect query so SDKs that check it (Claude Code's MCP SDK does) accept the response. Cheap, one extra param.
  • Rate limiting. /oauth/authorize already sits behind ipRateLimit (server.go:238). Add the same wrapping around the new authorization_code branch at /device/token (already there — mux.Handle("POST /device/token", s.ipRateLimit(...))).

PR sequence

Each PR is independently testable and ships a coherent slice. Total estimate: 3 PRs, ~3 working days.

PR1 — Auth-code store + state extension

  • tools/demarkus-broker/internal/broker/auth_code_store.go (new): AuthCodeStore with Begin / Bind / Redeem / janitor and tests. Mirrors device_store.go shape; uses clock injection for deterministic TTL tests.
  • session.go: add AuthCodeID string to State. Update signer tests to cover the new field.
  • server.go: construct s.authCodeStore alongside s.deviceStore; janitor goroutine started in the same place.
  • Scope: ~350 lines + ~250 lines tests. ~1 day.

PR2 — Handlers + discovery + dispatch

  • oauth_authorize.go: replace the stub with the real handler. Add authCodeCallback (or new oauth_callback.go if it cleans up). Update existing oauth_authorize_test.go: the unsupported_response_type test stays for missing/invalid response_type; everything else is new positive + negative cases.
  • server.go authCallback: add the state.AuthCodeID != "" dispatch branch.
  • device.go deviceToken: add authorization_code to the grant_type switch; new deviceTokenAuthCode method.
  • discovery.go applyDiscoveryOverrides: extend the three lists. Update discovery_test.go assertions accordingly.
  • Scope: ~550 lines + ~600 lines tests. ~1.5 days.

PR3 — End-to-end + kind harness coverage

  • tools/demarkus-broker/internal/broker/oauth_authorize_test.go (new file, separate from the unit cases above): full happy-path integration test running the broker in-process against a fake Verifier, driving GET /oauth/authorize → simulated /auth/callback → POST /device/token with the correct PKCE verifier. Negative paths: bad PKCE, replayed code, mismatched redirect_uri, expired pending grant, expired code.
  • deploy/kind/up.sh: add a stage that runs an in-cluster smoke driving the auth-code path against the deployed broker against mock-oauth2-server. Reuses the existing mock-oidc fixture; mock-oauth2-server supports standard authorization_code out of the box (unlike its device flow which was the PR3 risk).
  • Plugin smoke: nothing to change in the Claude Code plugin code itself — the SDK drives the flow on Claude Code's side. But add a journal/2026-MM-DD.md entry capturing one manual /knowledge-join against the live broker.knowledge.demarkus.io to confirm the original error is gone.
  • Scope: ~400 lines integration test + ~150 lines kind smoke + journal. ~0.5 day.

Open questions

  1. Should the authorization_endpoint URL change from /oauth/authorize? No — Claude Code (and any MCP client) is already fetching the discovery doc, so the path is irrelevant to clients. Keeping /oauth/authorize means existing mcp_oauth.go / mcp_auth.go references stay intact.
  2. Does Claude Code's MCP SDK respect iss (RFC 9207)? Best to ship the param defensively — it costs nothing if ignored. Verify against the SDK source before final review; if it strictly validates and we get the issuer string wrong, that's a footgun.
  3. Should we rotate refresh tokens on the auth-code path? Current device-flow path does not rotate (see device.go:266-267). Keeping parity is the cheapest choice. If the MCP SDK rotates aggressively and the broker doesn't, no harm — the same refresh_token continues to work. Open to revisit if OAuth 2.1 rotation guidance shifts.
  4. The device.go filename becomes misleading once it dispatches three grants. Defer rename until after shipping; the diff churn isn't worth blocking a PR on.

Out of scope

  • Confidential clients / client_secret. Public clients + PKCE only.
  • response_mode=form_post or fragment. Query-string redirects only — that is what RFC 8252 native apps use.
  • Custom URI schemes / mobile deep links. No claudecode:// redirect_uri.
  • Hybrid flow (response_type=code id_token). Not in the OAuth 2.1 catalog; no MCP client needs it.
  • Refresh token rotation on this path. Inherits device-flow behavior; revisit holistically if rotation policy changes.
  • UI changes to /auth/login or /device. This plan does not touch the user-facing pages. The IdP-browser dance is byte-identical.

Sequencing & Status

Plan v1, 2026-05-26. Pending Fritz review before any code is written.

After approval: PR1 → PR2 → PR3 in strict sequence (PR2 depends on the store from PR1; PR3 depends on the handlers from PR2). Each PR runs the standard bash pre-commit.sh before commit; make test for the tools/demarkus-broker/ module must be green at every step.

When resuming cold: refetch this plan, /index.md, /patterns.md, /guidelines.md. Inspect git log for already-shipped PRs against tools/demarkus-broker/internal/broker/{auth_code_store.go,oauth_authorize.go,discovery.go,device.go,session.go} and pick up at the next-unshipped PR.

Status

  • PR1 shipped 2026-05-26 as PR #155 (commit 985554d). authCodeStore + State.AuthCodeID + janitor wiring landed; ~580 LOC including tests. One CodeRabbit nit addressed in the same PR (documenting consumption semantics on Redeem validation failures).
  • PR2 in flight on branch broker-auth-code-handler.
  • PR3 pending PR2.

Status correction (2026-05-31) — core grant SHIPPED, PR3 deliverables outstanding

The "PR2 in flight / PR3 pending" status above is stale. PR1 (#155, authCodeStore) and PR2 (#156, wire handlers + discovery) are MERGED (2026-05-27). The full RFC 6749 authorization_code + PKCE/S256 grant is implemented and unit/in-process tested:

  • oauth_authorize.go — the unsupported_response_type stub is gone; real /oauth/authorize validates response_type=code, loopback-only redirect_uri (RFC 8252), required S256 code_challenge.
  • authCodeCallback dispatch (server.go) → deviceTokenAuthCode token-endpoint exchange with verifyPKCE constant-time compare (device.go, auth_code_store.go).
  • Discovery advertises authorization_code, response_types_supported: ["code"], code_challenge_methods_supported: ["S256"].
  • 9 tests incl. end-to-end happy path + replay / bad-PKCE / mismatch / expiry negatives, all green.

Outstanding (plan's PR3):

  1. A kind smoke stage that actually exercises the broker's auth-code flow — deploy/kind/up.sh currently drives only the device-flow mint path and never hits GET /oauth/authorize?response_type=code with a PKCE verifier end-to-end against a deployed broker.
  2. A journal entry recording one live manual /knowledge-join against broker.knowledge.demarkus.io confirming the original unsupported_response_type error is gone.

DECISION NEEDED: complete PR3, or descope it (the grant is production-shipped and well-tested) and close. Left OPEN pending that call.

PR3 progress (2026-05-31) — kind smoke implemented + live surface verified

Closing the PR3 gap from the status correction above.

Kind smoke (deliverable 1) — IMPLEMENTED (uncommitted, pending Fritz commit). Added an auth-code + PKCE stage to the --with-mcp-smoke path in deploy/kind/up.sh, after the existing 3 MCP-gateway checks. A new authcode-smoke curl pod drives the full chain against the broker's :8080 OAuth surface:

  1. GET /oauth/authorize with S256 PKCE → 302 to mock IdP (state cookie set).
  2. Mock IdP (interactiveLogin=false) auto-approves → broker /auth/callback.
  3. Callback (state cookie replayed, re-targeted at the in-cluster Service) → 302 to the loopback redirect_uri with a broker-minted code; asserts state echoed (CSRF) + iss present (RFC 9207).
  4. Negative: POST /device/token with a wrong code_verifier400 invalid_grant (proves PKCE is enforced; one-shot code survives a failed verify).
  5. Positive: correct verifier → 200 Bearer token (shape-only assertion; no token material in logs).
  6. Replay: re-presenting the consumed code → 400 (one-shot).

PKCE verifier/challenge computed host-side via openssl (already a harness requirement) and passed into the pod — the curlimages/curl pod has no guaranteed openssl. Derivation cross-checked against a Python reference (base64url-nopad(sha256(verifier))) → exact match. server.insecureCookies=true set via --set on the local-chart install only (so the Secure state cookie replays over plain HTTP in-pod); plain Stage 2 untouched. bash -n clean; pre-commit.sh green (shell-only change, no Go touched). Not yet executed in a live kind cluster (requires image build + cluster spin-up).

Live verification (deliverable 2) — read-only probe done; interactive login still Fritz's. Probed https://broker.knowledge.demarkus.io (GET-only):

  • Discovery advertises authorization_code, response_types_supported:[code], code_challenge_methods_supported:[S256], authorization_endpoint:/oauth/authorize.
  • /oauth/authorize missing client_id400 invalid_request (real handler).
  • response_type=token + loopback redirect → 302 with error=unsupported_response_type (the new two-phase redirect, not the old direct-stub).
  • Valid PKCE request → 302 to accounts.google.com (full flow live; stub replaced).

This is strong evidence the original unsupported_response_type stub is gone in prod. The full interactive /knowledge-join (real Google login → token mint) remains a manual confirmation for Fritz; not automatable here.

Remaining to close the plan: commit the up.sh change; optionally run deploy/kind/up.sh --with-broker --with-mcp-smoke once to see the stage green; optionally one manual /knowledge-join. After commit, move this plan to Completed in /index.md.

PR3 kind smoke — EXECUTED GREEN in-cluster (2026-05-31)

Committed (branch broker-auth-code-kind-smoke, dc7e50e) and run live: deploy/kind/up.sh --with-broker --with-mcp-smoke against a real kind cluster. Broker image built from the committed checkout (v0.7.1-180-gdc7e50e), sideloaded, local chart installed with server.insecureCookies=true. All four auth-code assertions passed against the running broker:

  • /oauth/authorize → broker authorization code (state echoed, iss present)
  • wrong code_verifierinvalid_grant (PKCE enforced)
  • correct verifier → 200 Bearer token minted
  • consumed code replay → rejected (one-shot)

The positive mint confirms refreshStore.Issue is wired in Stage 2 (not only Stage 4) — the grant produced a real Bearer end-to-end. MCP gateway checks (RFC 9728/8414 + 401 challenge) also green. Exit 0.

PR3 deliverable 1 (kind smoke) is now implemented AND verified live. Deliverable 2 (interactive /knowledge-join) remains an optional manual step, already evidenced read-only against prod above. This plan is ready to move to Completed once the branch merges.

COMPLETE — merged to main 2026-05-31 (PR #169, a380e8f)

PR3's kind-smoke deliverable merged. Full plan status:

  • Core grant (RFC 6749 authorization_code + PKCE/S256): PR1 #155 + PR2 #156 (2026-05-27).
  • PR3 kind smoke: PR #169 (a380e8f) — auth-code + PKCE end-to-end stage in deploy/kind/up.sh --with-mcp-smoke; executed green in-cluster (authorize→code, negative PKCE, positive mint, one-shot replay). One CodeRabbit finding addressed in review (tightened the access_token assertion regex against an empty-value false-pass) + PR title clarified.
  • Live prod surface verified read-only against broker.knowledge.demarkus.io (stub gone, full flow redirects to Google).

Only optional follow-up: a manual interactive /knowledge-join (real Google login) — not automatable, already evidenced read-only. Plan closed; moved to Completed in /index.md.

Related documents

trail
  1. soul.demarkus.io:6309 v1
  2. soul.demarkus.io broker-auth-code-grant