A framework for disciplined AI coding agents

Lotse

A Lotse (a maritime pilot) guides the ship through narrow waters — without taking the helm. That is exactly what this framework does with AI coding agents: it guides them from idea to merged change, without replacing the work.

The problem: AI agents drift

🪁
Overgeneralize on spec
🔁
Re-litigate settled questions
⏭️
Skip the review
🎲
Decide from the gut

The pipeline

Every change runs Idea → Spec → Build → Review

/werft
Idea to a hand-off-ready ticket — with human gates (Spec · Design · Package).
/arbeitstag-prep
Ripen tickets to ready — the human is the only one who stamps.
/arbeitstag
Implement several tickets in parallel, conflict-free (git worktrees).

… and three levels watch over the work:

/berater-runde
An advisor proposes, a different head refutes — landing on exactly one outcome.
/watchdog
Architecture review of the diff before merge, optional cross-engine.
/prozesswerkstatt
Harvest session retros across → process pain into improvements.

The human decides

The machine prepares the decision — you decide

🖼️
/werft

Probe renderings, not claims

When the shipyard builds a UI, it renders real screenshots of the result — you see what is being made, not just a description of it.

You decide at gates A (Spec) · B (Design) · C (Package) — no step without your yes.
🗂️
/arbeitstag-prep

Structured HTML cards

Ripe tickets arrive as readable HTML cards over the local network — pain, evidence, proposal at a glance, not a wall of text.

You are the only one who stamps ready — the machine proposes, you approve.
🎫 In the background: the ticket system
Every decision is a ticket with a status label (spec → ready → in-progress → merged). The status change is the membrane: the human stamps it, never the machine alone. The ledger records what was ratified — and protects it from re-litigation.

The machine does the groundwork — the pen for the decision stays with the human.

The mental model — a systemic lens

Three swans, three altitudes over the same work

»The first flies and enjoys it. The second watches the first fly. The third watches the second watching — experiencing all three levels consciously.«

inspired by »The Third Swan« (Bernd Schmid, isb Wiesloch) · our own mapping

The metaphor · „The third swan"
Lotse
3rd swan watches the second watching observing the observation
Process workshop · Advisory round
Looks at the working and observing system itself and changes it: advisor proposes, adversary refutes, synthesis decides.
/prozesswerkstatt/berater-runde
2nd swan watches the first fly conscious self-observation
Watchdogs · Hooks · Contracts
Run alongside and correct while the work happens — drift, ripeness and quality in real time.
/watchdogHooksContracts
1st swan flies and enjoys it the immediate experience
The working agents
The agents that do the work — from idea to implementation.
/werft/arbeitstag-prep/arbeitstag
the ground it all flies over: your product

… that is exactly what Lotse does: the same work at three altitudes at once.

Why it holds

Five core ideas

🚪Reversibility sorts

Two-way door (small, reversible) → the bolder form is default, doing is the experiment. One-way door (data model, public interface) → full rigor before commit.

🥊An adversarial second head

Advice becomes testable when a different model tries to refute it — not by making the advisor smarter.

📓Ratification ledger

Decide once, record it, don't re-litigate. A decision is a rock, not a proposal.

🔒Contracts that hooks enforce

Machine-readable schemas + guard hooks make discipline mechanical, not just an appeal.

🌱Retro → improvement

Every run ends with a retro about the way of working; the workshop condenses it into sharpenings. The framework is its own first use case.

What it is

A file-based framework — tool-agnostic in spirit

The core

  • Just files: commands/, agents/, contracts/, hooks/ — versioned, reviewable.
  • Reference implementation runs on Claude Code; the idea is portable.
  • Battle-tested on a real family-software ecosystem.
Apache-2.0 German file-based

Getting Started

# Deploy the method to the runtime location ./deploy.sh # Test before merge ./deploy.sh --dry-run # Drift check against the source ./deploy.sh --verify-only

Repo = truth · runtime = deploy target · the human stamps.

DE · EN
1 / 6