Concepts

Smalti is the control surface for a software factory. These are the terms used in the app and in these docs. Each one says whether it exists today.

Software factory

A set of coding agents, machines, checks and a forge that together turn intent into shipped, verified changes. A typical one is several Claude Code sessions, a Mac and a few other machines on a Tailscale network, each project's tests, and the Commitwell forge for review and CI. Smalti does not replace any of these. It is where one person directs them, sees what needs attention, and checks the output.

Canvas and panels available

The macOS app's main view. Terminals, browsers, notes, session graphs and CI runs are panels on a pannable, zoomable canvas. See Panels and the canvas.

Session available

One Claude Code conversation, stored by Claude Code as a JSONL transcript under ~/.claude/projects. Smalti indexes these, groups them by project, and links each to the terminal it is running in. See Sessions and the graph.

Governor available

Keeps a group of agents from taking down the machine they run on. It measures whole process trees rather than single processes and acts before the operating system does. See Resource governor.

Inbox and attention available

The question the default view should answer is "what needs me right now?". On macOS the Needs you list shows sessions waiting on an answer, sessions that have finished and failed CI runs, and ⌘J jumps to the next one. See Attention. Telling permission prompts apart from questions, and approving or denying from a phone notification, are still being built.

Done means verified in development

An agent saying it has finished is a claim. Smalti will run each project's check commands when a session stops and show the session as done only if they pass.

smaltid in development

A small daemon that runs on every machine that hosts agents. It indexes sessions, tracks attention state through Claude Code hooks, measures resources, applies the governor policy, manages tmux sessions, and serves one HTTP API over Tailscale. The macOS, Windows and iOS apps become thin clients of it.

Conductor in development

One long-lived orchestration agent that you talk to instead of to each session. A request becomes a mission: the goal, a short plan of tasks, and a card for each task showing its session, host, state and last result. The Conductor uses the same tools a person has in the app (start a session, send it a message, approve within a policy, run checks, land a change), so anything it does can be seen, undone or done by hand. You set what it may do without asking, and every action it takes is logged. A prototype exists (smalti-conductor, an MCP server, a launcher for Claude Code and a web view). The Mac app shows its missions in a Mission panel and sends it messages from the Conductor bar (⌘I).

Agent library in development

Reusable agent definitions (a role, tools and policy, checks, and lessons learned) that propose edits to themselves after each run, which you accept or reject as diffs. Agents you already have, such as Claude Code subagents or other agent CLIs, can be used as they are. See Agents.

Decision timeline available

How a project was steered: the goals, redirects, interrupts, approvals and answers in its sessions, in order. See Decision timeline.

Fleet in development

All the machines that host agents. Smalti will place new sessions by available memory, CPU and GPU and by whether the machine's owner is using it, and move sessions between machines with their branch, transcript and terminal state. A first version is in smaltid: it moves a session that is not running, by packing its repository origin, branch, commit and transcript, checking the same commit out on the other machine, and resuming it there through that machine's governor.

Design rules

  • Attention is the scarce resource. The default view shows what needs you; everything else is one keystroke away.
  • Keyboard first. Every command is in one registry that feeds the palette, the menus and the shortcut overlay.
  • Local and private. Data stays on your machines, remote access goes over Tailscale, and there is no telemetry.
  • Use what already works: Claude Code hooks, tmux, git and Tailscale, rather than replacements for them.