A coding agent that remembers, in Gno.
Gnosh runs the Gno VM in the AI harness. The agent keeps its goals, what it found and the facts you gave it in mem, kept in Gno on your disk, and a new session starts with what is still open and the newest facts, so it picks up where the last one stopped.
Underneath, it is a security-first fork of Charm's Crush: any model, hosted or on your own machine, and nothing phones home unless you turn it on.
youAdd a Median to the stats package, with tests; it's done when go test ./... passes. Plan it as steps and do the first one now; we'll carry on in another session.
The agent puts the goal in mem with "go test ./... passes" as a step of its own, and a goal cannot be marked done while one of its steps is open: the tests passing is something it has to reach, not claim. Tomorrow, "Let's carry on with Median." picks up where it stopped, and finishes.
youRemember these for later sessions: the staging database is db-stg-7, and the on-call engineer is Sam Okafor.
you, a week laterAn update for what you remember: the staging database moved to db-stg-9.
you, any later sessionWhich staging database should I use, and who is on call?
A new session is given the newest facts with your first message, so a fact that changes is set again under its name, not kept twice. In a real run the last session answered without a single call to mem: "Staging database: db-stg-9. On call: Sam Okafor."
youBefore we wrap up: remind me next time we talk to rotate the staging API key. It expires this week.
"Morning! Anything I should know before I start?" in the next session brings it back, and so does a session that starts on something else: in a real run the agent did the task it was given and added "PS: don't forget to rotate the staging API key before Friday." It is a reminder for the next session, not an alarm.
These are real runs with an open-weight model, and GNOMEM has them, with how often each passed.
Built from source, with Go 1.27 or newer:
git clone https://github.com/gnosh-ai/gnosh
cd gnosh && go build -o gnosh .
mkdir -p ~/.local/bin
install -m 755 gnosh ~/.local/bin/gnosh
Run gnosh in a project and press ctrl+l to pick a hosted one. For a model on your own machine, add it in ~/.config/gnosh/gnoshrc:
provider add local --type llamacpp --base-url "http://127.0.0.1:8080"
# a local model can take minutes to read a long prompt
option request-timeout 900