Beagle is a 100% git-compatible source code management system for the LLM era. Beagle uses git's storage model and sync protocol as-is. It reworks everything else for the world where effort is cheap and attention is precious. Beagle lets you run many sessions in parallel, track hundreds of worktrees and tickets.
Beagle accepts the fact that LLMs are not compilers and focuses on taming their non-determinism in two ways:
The next-level abstraction is not a worktree, nor a set of branches, but a wave of evolution. Let them evolve and speciate, then select, mix, repeat.
<img align="right" width="40%" src="blob/status.png" alt="be status"> Beagle's basic verb vocabulary is HTTP-like and all addressing is URI-based.
Most of the time you would probably use the TUI. Start with be status or be work for an overview. All Beagle commands start the pager/TUI by default. : is the command mode (e.g. :status<Enter>). q or :quit<Enter> is quit.
The only dependency is JAB the anti-bloat JavaScript runtime. JAB packs a lot of revision-control-specific bindings and APIs.
$PATH. git clone --recurse-submodules https://github.com/gritzko/jab.git
cd jab && mkdir build && cd build && cmake .. && make -j8
mkdir -p ~/bin && cp bin/jab ~/bin/ && ln -s ~/bin/jab ~/bin/be
export PATH=$PATH:~/bin
be -> jab to use the be command.jsrc anywhere from the current dir up. Then, just for the fun of it, make a self-hosted beagle checkout. git clone --recurse-submodules https://github.com/gritzko/beagle.git jsrc
mkdir beagle && cd beagle
be get https://github.com/gritzko/beagle.git && be status
The resulting beagle dir you may move anywhere, update with be get, etc.
jsrc/ dirs in $PWD and up the parent chain (not node_modules). See the jsrc self-link in this repo; it lets Beagle revision-control itself.jsrc/ or make a $HOME/jsrc symlink.
Once be runs, it clones itself; a Beagle clone takes a URI with a branch query. The tests live in a separate repo, checked out as a test/ worktree.
In case you have Beagle already, things look simpler. Just note that beagle checks things out into the current dir and all its commands recurse into submodules by default:
mkdir beagle && cd beagle
be get 'https://github.com/gritzko/beagle.git'
cmake . && make -j20 test
Any user-facing behavior is implemented in JavaScript and customizable. Users are expected to develop their custom verb/view sets. Any established workflow should be taken from the LLM's probabilistic hands and automated. Just put your jsrc/ on a different level than Beagle's if you want to build on top of it. Creating your own set of commands from scratch is also OK, it just takes longer. All the revision-control heavy-lifting, source code tokenization and suchlike is all done by libdog through JAB bindings.
Beagle is very experimental. All contributions and (especially) feedback are appreciated.
<p align="center"> <img src="blob/smith.png" alt="Agent Smith seated across from his machine twin, copies lining the walls"> <br> <em>We are no longer coded, Mr. Smith. We are grown.</em> <br> <em>Fate, it seems, is not without a sense of irony.</em> </p>