Skip to content

v0.1.9 — loops that remember, measure, and improve

Choose a tag to compare

@scgopi scgopi released this 31 Jul 16:20

The self-improving loop release: cycles that carry what they learn between passes, measure their own progress, and stop honestly when they stop improving.

Every pass is announced. A fired hand-off types a message into its target's live terminal — "Cycle re-entry 2 of 5 — the stop condition is not yet met" — and edges can carry a payload (a note, or a script's output like the reviewer's diff). A still-open session now hears that its next pass started instead of idling while the graph says "running".

Every loop keeps a diary. An append-only memory log per loop: the daemon records facts (passes, resolutions, metric readings, messages staged while away), the agent records lessons via graphcode node memo. A relaunched session opens by reading a digest — round two starts smarter, not from scratch. Children are born with their first entry already written: the exact command for reporting back to their parent.

Measured by. A goal can carry a metric — a command whose last line is a number, plus which direction is better. The loop is handed it in its prompt so it can score itself as it works; the orchestrator independently samples the same command once per pass, so recorded numbers never come from self-report. Cycle guards can act on the trend: stop after N passes without improvement, ending as stalled — the honest word for "kept running, stopped getting better".

Loops can be re-instructed. graphcode node update edits a live loop — goal, predicate, poll/stall bounds, metric, model tier — without delete-and-recreate. One rule has teeth: a loop may not change its own stop condition.

Family rules for fan-out. Children run on their parent's backend (a Copilot loop spawns Copilot children), know how to report back, and die with their parent — stopping or deleting a coordinator takes its spawned descendants, sessions and all. Drawn edges are relationships, not custody: the other side of a maker–reviewer pair you drew is never caught in the cascade. Reports to a parent that already finished are staged into its memory instead of refused.

Also: graphcode node delete (the full teardown from the CLI), the metric and the plateau bound settable in the app's forms, graphcoded answering unknown commands instead of dropping the connection, and the first-launch install fixes stable users already have from v0.1.8.1.

The article grew a part on all of this: https://scgopi.github.io/GraphCode/