Skip to content

Architecture

Switch to Zen Mode
graph TD
A["Agent A (write)<br/>Claude Code"] --> T["mutsumi.json"]
B["Agent B<br/>Codex CLI"] --> T
C["Agent C<br/>custom script"] --> T
T -->|"watchdog watch"| TUI["Mutsumi TUI<br/>(render + UX)"]
T -->|"watchdog watch"| EV["events.jsonl<br/>(reverse notify)"]
TUI -->|"user clicks done"| T
ComponentResponsibilityTechnology
TUI RendererRender task list, handle user interactionTextual
File WatcherWatch mutsumi.json, trigger re-renderwatchdog
Data LayerRead/write mutsumi.json, schema validationpydantic v2
CLI InterfaceNon-TUI command-line CRUDclick
Config LoaderLoad user configtomllib (stdlib)
i18n EngineUI text multi-language switchingCustom dict-based
Event EmitterReverse-notify Agent via event logFile append-write
LayerChoiceRationale
LanguagePython 3.12+Textual ecosystem, dev speed
Package MgruvBlazing fast, modern
TUI FrameworkTextualMouse support, CSS-like styling
CLI FrameworkclickMature & stable
Validationpydantic v2Type-safe JSON validation
File WatchwatchdogCross-platform, event-driven
Config FormatTOMLHuman-readable, stdlib support
Distributionuv tool installZero-dependency install
graph LR
A["Agent reads<br/>mutsumi.json"] --> B["Modify<br/>in memory"] --> C["Write<br/>.mutsumi.json.tmp"] --> D["os.replace()"] --> E["watchdog<br/>detects"] --> F["Re-render<br/>(100ms debounce)"]
graph LR
A["User clicks<br/>checkbox"] --> B["Mutsumi writes<br/>mutsumi.json"] --> C["Appends<br/>events.jsonl"] --> D["Agent tails<br/>event log"]
ScenarioHandling
TUI modifiesRead latest → modify → atomic write
Agent modifieswatchdog detects → reload → re-render
Simultaneous writesLast Write Wins; self-heals on next trigger
JSON corruptionError badge, retains last valid state