Beagle is a revision control system for modern workflows: a comfortable client for local multi-branch, multi-worktree development. Its data format and syncing protocol are 100% git, so it stays compatible with the existing mass of git repos; everything above that is reworked. The command language can express any git operation, but the model steers toward tree-structured, rebase-centric branching, and the project dogfoods from day one.
feature/fix).be command language
The dispatcher is be. It uses standard URI arguments and the Verbs of the HTTP dictionary, which cover every data maneuver — not a zoo of flags. The verbs are orthogonal — one cannot supplement another — and uphold the Invariants.
Every non-flag argument is one URI, scheme:host/path?query#fragment, and each component reflects one aspect of the command. Changing the URI shape changes the semantics — patch becomes merge, rebase, or cherry-pick depending on the shape.
scheme is the app/protocol, host a remote, path a file path relative to the project root.query selects project/branch/tag/commit; Beagle is multi-project — one Store hosts many projects, each keyed by Title.fragment is free-form payload: a commit-message body, a line jump, an extension filter.?/project/branch/tag absolute, ?branch/ relative branch, ?v1.2.3 tag, ?./fix/?.. branch-relative.?abc1234 sha-prefix, ?free text message search, ?null/?back magic (no-branch / prev-branch).
The common loop is clone or switch, edit the worktree, stage, commit, then push — each one a be verb over a URI.
be get ssh://host/repo.git # clone: fetch + checkout
be get ?feat/ # switch to branch feat
vim file.c # edit the worktree
be put file.c # stage the change
be post 'wonderful changes' # commit on cur
be post //origin # ff-push to the remote
Apart from verbs, Beagle has projections — read-only, presentation-only verbless views. Projections accept URIs of any shape and never mutate, so they compose freely with the rest of the language; the full set is the Projector catalog.
be diff:?other_branch diffs against a branch; be log:file.c shows a file's history.be grep:TODO does literal search; be spot:#FuncName does structural search across the repo.be diff://host/file.c?remote_branch; the Projector page lists every scheme.The repo is structured into dogs — each with its purview, the data and functions it owns, all following one Dog convention. Dogs coordinate to carry out complex tasks; new dogs may join, old dogs learn new tricks.
Building Beagle needs libsodium, libcurl, lz4, zlib and cmake; ninja is recommended.
mkdir build && cd build
CC=clang CXX=clang++ cmake -GNinja \
-DCMAKE_BUILD_TYPE=Release ..
ninja && ls bin/
Two framing questions about what Beagle is and how it is built.
Beagle stands on prior art for its indexing, scanning and storage layers.