- Rust 96.8%
- Python 2.3%
- CSS 0.7%
- Shell 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
first-release.md's section 7 taken further with the user, 2026-10-23,
and its body replaced by a pointer. Structure becomes settings, rules
stay text that runs read; settings live in the store, never in
temper.json, a missing one taking the binary's default; a change is one
decision, proposed by the agent and accepted by an owner; new work
follows it while running work keeps the charter it started under, in
revisions side by side. upgrades.md's reference follows.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gate-Tree:
|
||
| .config | ||
| crates | ||
| docs | ||
| lab | ||
| scripts | ||
| testing | ||
| tests | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| clippy.toml | ||
| LICENSE | ||
| README.md | ||
| rustfmt.toml | ||
temper
Agent-driven software development on a forge.
People decide what to build and why; agents do the work, from first draft to landed change.
The idea
- People direct, agents develop. People decide at the level of goals, designs and plans, and step in where agents cannot decide. Agents write, check, review and land the changes; feedback on code is their business.
- Mechanics are code, judgement is an LLM's. A change's way to landing is a procedure: checked by CI, reviewed by gates, repaired, brought up to date, landed through a queue per branch. An agent is woken only for what needs judgement: making a change, repairing a failure, reviewing, resolving a conflict, revising a plan.
- A careful guest on the forge. Repositories are adopted as they are. temper writes only to what it owns, never forces a push, and merges exactly the head its decision saw. A change it did not make to what it owns is drift: the work relying on it is held, and nothing is written over. Forgejo is the forge today.
- Built from the family. jig's engine runs the work, smith's agents do it under the charters temper writes and with the tools it serves, and skein carries the bytes, the forge's calls among them.
- One binary, standalone first.
temper serveruns the engine and a worker on one person's machine,temper openis that person's terminal, andtemper forgeandtemper boxset up and run a forge beside it. - Tested as it runs. Worlds with a fake forge and a fake LLM, then the real loop, then the binary against an owned Forgejo with its runner and real git, then a real model.
Start here
docs/design/README.md: what temper is, what it is built from, and where each part of its design lives.docs/guide/box.md: a local temper box, with its own Forgejo, on loopback.docs/guide/github.md: GitHub connected from temper's client, through temper's own App.docs/guide/forgejo.md: a Forgejo connected from temper's client, managed, owned or connected.docs/design/STATUS.md: how far the code is from the design.- skein's foundation, which temper follows:
programming-model.md,testing-strategy.mdandnotes.md.
Before changing code, read AGENTS.md and
docs/development/workflow.md. main
moves only through skein's land, which runs the gate,
scripts/check.sh.
The family
These are the repositories of Fabrig, an agent-driven software factory: write, prove, run.
| Repository | Builds on | |
|---|---|---|
| skein | One thread, one loop, no async | |
| smith | Protocol-driven agent loop for AI applications | skein |
| jig | Engine for agentic applications | skein, smith |
| temper | Agent-driven software development on a forge | skein, smith, jig |
| hearth | Immutable machines, built from a revision | skein |
Commands that read the deployment use <config>/temper.json and accept
--config DIR --data DIR --cache DIR after their command words. Each flag
falls back to TEMPER_CONFIG, TEMPER_DATA or TEMPER_CACHE, then the
corresponding XDG directory under temper. Relative flags are joined to
the working directory once at startup. Data and cache must be private.
temper init --config ./config --data ./data --cache ./cache writes the
initial configuration, worker secret and charters. It refuses existing
temper.json, worker.secret or worker.digest files.
After starting temper, open the accounts page and add an OpenAI API key. The initial configuration uses OpenAI's public Responses API. ChatGPT sign-in will be available later.