|
18 | 18 |
|
19 | 19 | ## 🧭 Why this exists |
20 | 20 |
|
21 | | -`thing` began as a question: how does an agent harness actually work? Rather than trust |
22 | | -a framework's magic, I hand-wrote just enough code to make a single API request, then |
23 | | -let the harness pull itself up by its own bootstraps. The working prototype gained the |
24 | | -`bash` tool by having its human-in-the-loop upload its own source code, fed back in |
25 | | -base64-encoded chunks. Once it could see and edit its own code, I started adding the |
26 | | -features I enjoy from other harnesses, borrowing most heavily from [Pi](https://pi.dev), |
27 | | -which I use every day. |
| 21 | +`thing` started with a simple question: how does an agent harness actually work? I |
| 22 | +hand-wrote the first loop, then uploaded its source code to the running agent in |
| 23 | +base64-encoded chunks. I asked it to implement the `bash` tool and copied its answer |
| 24 | +back into the source. That was the moment the harness began to evolve: it could now |
| 25 | +inspect and edit its own code. |
28 | 26 |
|
29 | | -No vibe-coding. The whole point is to understand how agent loops work. A model may help |
30 | | -guide its own evolution, but nothing ever lands blindly. |
| 27 | +From there, I began adding the features I enjoy in other harnesses, borrowing most |
| 28 | +heavily from [Pi](https://pi.dev), which I use every day. |
| 29 | + |
| 30 | +No vibe-coding. The goal is to understand how agent loops work. A model can help guide |
| 31 | +its own evolution, but nothing lands blindly. |
| 32 | + |
| 33 | +## 🧰 Getting started |
| 34 | + |
| 35 | +`thing` connects to an OpenAI-compatible Chat Completions endpoint. Create |
| 36 | +`~/.config/thing/config.toml` with your model and endpoint: |
| 37 | + |
| 38 | +```toml |
| 39 | +model = "your-model" |
| 40 | +endpoint = "https://your-provider.example/v1/chat/completions" |
| 41 | +reasoning_effort = "medium" # optional |
| 42 | +``` |
| 43 | + |
| 44 | +Then run: |
| 45 | + |
| 46 | +```sh |
| 47 | +./script/run |
| 48 | +``` |
| 49 | + |
| 50 | +On first run, `thing` asks for an API token and stores it in the system keychain. |
| 51 | + |
| 52 | +## ⚠️ Current trust model |
| 53 | + |
| 54 | +Tool calls are not confirmed one by one, and sandboxing is not implemented yet. The |
| 55 | +`bash` tool runs with the permissions of the process, so use `thing` only in a project |
| 56 | +environment where you trust the model and can tolerate its changes. |
31 | 57 |
|
32 | 58 | ## 📚 The paper trail |
33 | 59 |
|
34 | | -The `docs/adr/` directory records *why* decisions were made. If you want to understand |
35 | | -the trade-offs, that's where to look. |
| 60 | +The `docs/adr/` directory captures the reasoning behind the project. It records the |
| 61 | +important decisions, the alternatives considered, and the trade-offs that shaped the |
| 62 | +harness. |
0 commit comments