thing started with a simple question: how does an agent harness actually work? I
hand-wrote the first loop, then uploaded its source code to the running agent in
base64-encoded chunks. I asked it to implement the bash tool and copied its answer
back into the source. That was the moment the harness began to evolve: it could now
inspect and edit its own code.
From there, I began adding the features I enjoy in other harnesses, borrowing most heavily from Pi, which I use every day.
No vibe-coding. The goal is to understand how agent loops work. A model can help guide its own evolution, but nothing lands blindly.
thing connects to an OpenAI-compatible Chat Completions endpoint. Create
~/.config/thing/config.toml with your model and endpoint:
model = "your-model"
endpoint = "https://your-provider.example/v1/chat/completions"
connection_timeout = 600 # optional; seconds per model request
reasoning_effort = "medium" # optionalThen run:
./script/runOn first run, thing asks for an API token and stores it in the system keychain.
Tool calls are not confirmed one by one, and sandboxing is not implemented yet. The
bash tool runs with the permissions of the process, so use thing only in a project
environment where you trust the model and can tolerate its changes.
