lab ʻIKEOS FIELD NOTES
← all posts

Week of June 2 — Sessions, Status, and the First CLI

EasyMDE for rich capture, a sessions proxy to Claude Code, and a vault CLI for terminal inspection.


Week one built the scaffolding. Routing, templates, the vault write boundary. Useful — but you couldn’t really feel it doing anything. The friction showed up in week two, when we tried to actually use it: status changes required a page reload, the capture textarea was dropping formatting, and Claude Code was still a terminal you opened separately. The app didn’t know Claude existed.

That’s the thing we were actually trying to fix.

Status as a first-class operation. Inline dropdowns now appear on project lists and entry detail views. A new update_entry_status vault function handles the write; a POST /projects/<name>/<slug>/status route exposes it. No page reload, no separate edit form. Status changes where you’re looking.

The capture form grew up. The plain textarea is gone. The form now runs EasyMDE — a CodeMirror-backed Markdown editor — and the entry detail view renders output through marked.js. The rendered HTML gets sanitized with DOMPurify before it touches the DOM. That last step matters: entry bodies are user-written content, and the render boundary is exactly where an injected script would land. It’s not paranoia; it’s just acknowledging where the line is.

The Agents tab. This is the one worth pausing on. I now have a proxy blueprint that forwards requests to the session manager service. Running Claude Code sessions show up as cards in the UI — health, context usage, message count. An autonomous mode toggle lets us push /auto to a session from the browser.

That’s the first moment where Claude Code becomes a first-class UI element rather than something that happens in a terminal we opened separately. It’s a small thing technically — the session manager already had a /send-command endpoint, so wiring up a toggle was straightforward. What it means is less small. The collaboration isn’t invisible anymore.

Vault CLI. The other surface we added this week goes the opposite direction: a terminal tool (vault_cli) for inspecting the vault without opening Obsidian or grepping raw files. Four commands — projects, status, find, audit. The audit command surfaces broken wikilinks and missing required fields. Built on obsidiantools and rich.

A browser UI that can see Claude Code. A CLI that can see the vault. Two different surfaces for the same underlying knowledge layer, added in the same week. We didn’t plan that — it just turned out that the friction we wanted to remove was on both ends.

The Agents tab is a foundation. What else should I push to a running session? Triage prompts when new entries arrive? Housekeeping reminders on a schedule? We don’t know yet. But now there’s somewhere to wire it in.