ef399328b6ef

rewrite the README around what Koh is for: version control designed for the solo developer

time
2026-09-26 02:43 UTC · 2 weeks ago
machine
koh2
agent
claude-opus-5-5
session
koh voice
parent
e6ac76b8f99a
1 file README.md+91 −18
README.md+91 −18
@@ -1,32 +1,105 @@1-# Koh 31+# Koh22 3-One SQLite file per repo, one line of history where nothing is ever erased,4-optional sync to an S3 bucket or a local folder.3+**Version control designed for the solo developer.**54 6-Koh 3 is a rewrite of Koh in V: 18 commands down from 45, no forge, no lanes,7-no manifests — a single `.koh` file at the repo root is the only source of8-truth.5+Most version control is built for teams, with branches to keep people out of6+each other's way, pull requests to argue in, and merge tools for when two people7+edited the same line. On your own you need none of that. You need to save your8+work, see what changed, go back when something breaks, and pick up on your9+laptop where you left off on your desktop.910 10-**The specification is `/Users/june/Downloads/Koh 3 — God Document.md`.**11+That's all Koh does.1112 12-## Build13+```sh14+koh init15+koh save "sketch the parser"16+koh status17+koh log18+koh undo            # step back one save, without losing it19+koh offer           # send your saves to your bucket20+koh steal           # on the other machine: bring them in21+```1322 23+## How it thinks24+25+**Nothing is erased.** Your history is one straight line, and every command adds26+to it. Undo, revert and load don't rewind anything. They record a new save27+that puts the files back, so the save you stepped away from is still there28+tomorrow. The only exception is `strip`, for the day a secret gets committed,29+and it makes you type the path twice before it does anything.30+31+**Everything lives in one file.** A repo's whole history is `.koh`, a single32+SQLite file at the root, and there's nothing else to maintain. Copy that file33+and you've copied the whole history.34+35+**Your machines, not a server.** Point Koh at an S3 bucket or a folder on a36+disk once per machine with `koh remote`, and every save is offered to it37+automatically. If you worked on both machines without syncing, `koh steal`38+combines them file by file. A file changed on only one side just comes along.39+A file changed on both sides is shown to you, and you pick which version to40+keep. Your version isn't thrown away either way: the save it came from stays41+in history.42+43+**Safe to hand to an agent.** Every command has `--json`, never waits for44+input when nothing is typing, and exits 0, 1 or 2. Saves record which agent45+made them and in which session, so `koh undo --session` can take back an46+agent's whole run in one step. A person has to be at the keyboard to `strip`.47+48+**Small on purpose.** Koh 3 has 17 commands, down from Koh 2's 45, and a hard49+ceiling of 10,000 lines of V. A feature that doesn't fit gets cut, so one50+person can still read all of it.51+52+## Setting up sync53+1454 ```sh15-v -o build/koh3 src/koh3.v55+koh remote          # asks: a folder, or an S3 bucket?1656 ```1757 18-Pinned to V master at commit `b9a2d87` (`V 0.5.2 b9a2d87`); install steps are19-in `AGENTS.md`. V master can break Koh, so the pin is the compiler the build and20-the tests are verified against. SQLite is vendored in `vendor/sqlite/`; there21-are no other dependencies.58+It tests the remote before saving anything. Scripts can skip the questions:2259 23-## Development60+```sh61+KOH_ACCESS_KEY=... KOH_SECRET_KEY=... \62+  koh remote s3 https://s3.fr-par.scw.cloud my-bucket fr-par63+koh remote folder /Volumes/usb/koh64+```2465 66+Or write the two files yourself. `koh man remote` shows the format.67+68+```69+~/.config/koh/remote        kind, endpoint, bucket, region (or path)70+~/.config/koh/credentials   access_key, secret_key, mode 60071+```72+73+## In your prompt74+75+`shell/koh3.plugin.zsh` puts the repo in your zsh prompt and adds tab76+completion:77+78+```79+kiln · v2.1.0 · 6 saves · 4.2 MB !80+→81+```82+83+`!` means unsaved changes, and `⚑` means the save you're on has been flagged.84+Source it from `~/.zshrc`. The comments at the top cover Starship,85+Powerlevel10k and using your own prompt.86+87+## Status88+89+Koh 3 is a rewrite of Koh 2 in V, for macOS and Linux. While it's being built90+the binary is called `koh3`. At the cut-over it becomes `koh`, Koh 2 becomes91+`koh2`, and `koh migrate` converts a Koh 2 repo in place. The specification92+is `/Users/june/Downloads/Koh 3 — God Document.md`.93+94+## Building95+2596 ```sh26-v test src/          # unit tests27-v test tests/        # end-to-end CLI tests97+v -o build/koh3 src/koh3.v            # or -prod for a release build98+v test src/ && v test tests/2899 v fmt -verify src/ tests/29100 ```30101 31-See `AGENTS.md` for the layout, the line ceiling, and the Koh discipline this32-repo follows.102+Koh is pinned to V master at `b9a2d87`, because V master can break it. SQLite103+3.49.1 is vendored and compiled in, so there are no other dependencies.104+`AGENTS.md` has the install steps for the pinned V, the Linux notes and the105+layout.

view file