Skip to content

Commit b36f818

Browse files
committed
docs: improve readme narrative and setup
1 parent 36dfe88 commit b36f818

1 file changed

Lines changed: 39 additions & 12 deletions

File tree

README.md

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# 🖐 thing
44

5-
**An agent harness built from first principles**
5+
**A minimal, self-evolving agent harness built from first principles**
66

77
![Go](https://img.shields.io/badge/Go-1.26-00ADD8?logo=go&logoColor=white&style=flat-square)
88
[![License: GPLv3](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat-square)](COPYING)
@@ -18,18 +18,45 @@
1818

1919
## 🧭 Why this exists
2020

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.
2826

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.
3157

3258
## 📚 The paper trail
3359

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

Comments
 (0)