Skip to content

Latest commit

 

History

History
166 lines (122 loc) · 6.14 KB

File metadata and controls

166 lines (122 loc) · 6.14 KB
         _yg@@@@g_
        a@@@@P~P@@@,
       g@@@@_@@g,@@@g_
      j@@@@@_4@P_@@@@@
      @@@@@@@@g@@@@@@@
     j@@@@@@@@@@@@RP~
     a@@@@@@P`
     B@@@@@@
     @@@@@@[
     $@@@@@              @@
     9@@@@@l          __ ~~
     4@@@@@$          @@    B%

yyy @@@@@@, gg $@@@@ $@@@@@$ ~~ @@@@@ @@@@@@L __yggy_ @@@@@ $@@@@@@_ _g@@@@@@@@y _a@@@@g_ @@@@@ @@@@@@@ ~~~~~~=@@@@@, a@@@@@@=~ @@@@@ 9@@@@@@@@@@@@@$g_~@@@a@@@P~_ya$@@@@@@gy _yg@@@@@$gy_ @@@@@ 4@@@@@@@@@@@@@@@@@g,~@@@@~_a@@@@@@@@@@@~ y@@@@@@@@@@@@@$_ @@@@@ @@@@@@@PF~~~~F@@@@@@y 0@ y@@@@@@PF~~FF _@@@@@@F~~~~?@@@@@L @@@@@ $@@@@@F ~@@@@@, ' $@@@@F @@@@@ ~@@@@L @@@@@ a@@@@@$ @@@@$ 4@@@@$ a@@@@yyyyyyyyyyy$@@@@ @@@@@ B@@@@@[ $@@@@ 4@@@@$ $@@@@@@@@@@@@@@@@@@@@ @@@@@ t@@@@@$ _@@@@@ 4@@@@l 4@@@@~~~~~~~~~~~~~~~ @@@@@ $@@@@@g_ y$@@@@^ 4@@@@l @@@@$_ __ 9@@@@@gyy R@@@@@@aw____yg@@@@@' 4@@@@l @@@@@$yy___ya@@@g, @@@@@@@@@_ ~4@@@@@@@@@@@@@@@F 4@@@@l ~@@@@@@@@@@@@@@@^ ~?R@@@@RF ~~=R@@@@@@PF~ @@@@^ ~~4@@@@@@@P~

the latent repository. version control for intent, not code. https://github.com/lorevcs/lore

lore does not track your code. it tracks the prompts, notes and decisions that produced it. you commit intent. when you want code, you run lore materialize: it replays the accumulated intent into a brief, and an agent reconciles the working tree to match it.

the code is build output. the intent is the source.

why a normal vcs remembers every line you typed. lore remembers why you typed it. rebuilding from intent does not hand you the same bytes back. it hands you the same behavior, the way two engineers given one spec write two different programs that pass the same tests.

    so branching and merging aren't about text.  two people do
    not fight over the same lines, they pile up intent.  merging two
    branches merges two piles.  each entry is addressed by the hash of
    its text.  there are no conflicts.  there is nothing to conflict.

install curl -fsSL https://lorevcs.com/install.sh | sh

    or, with rust already installed:

    cargo install --git https://github.com/lorevcs/lore

    a brew tap is planned.

use lore init scaffold .lore, drop AGENTS lore add "build a url shortener" lore add "links expire after 30 days" lore status show staged intent lore commit -m "initial intent" lore log lore show a commit and its intent lore materialize print the brief for an agent

    branches and merges work like git:

    lore checkout -b experiment
    lore add "try base62 short codes"
    lore commit -m "encoding experiment"
    lore checkout main
    lore merge experiment

    materialize any point in history, by branch or commit:

    lore materialize --ref experiment
    lore materialize --ref 4b6f04 -o BRIEF.txt

example a worked example: an agent builds a feature from intent alone.

    https://github.com/lorevcs/lore-example

storage everything sits under .lore, laid out like git:

    HEAD            current branch
    config          identity and named remotes
    index           staged intent, not yet committed
    objects/<id>    content addressed entries and commits
    refs/heads/<b>  branch pointers
    refs/remotes/   last-known commit on each remote branch

    an entry is one unit of intent.  its id is the hash of its text,
    so writing the same thing twice stores it once.  a commit groups
    entries and points at its parents.  recording intent is one small
    file write, cheap enough to run on every prompt.

    materialize walks the commit graph, unions every entry it can
    reach, sorts by time and prints the brief.  the brief is the
    program.  the agent and the files on disk are the interpreter.

remotes lore syncs like git. set your identity, add a remote, push.

    lore config user.email you@example.com
    lore remote add origin /path/to/remote
    lore push                     send the current branch
    lore clone <url> [dir]        copy a remote into a new directory
    lore fetch                    update remote-tracking refs
    lore pull                     fetch, then merge

    a remote url is a filesystem path today; http(s) is reserved for
    lorehub, which will speak the same protocol (documented in
    src/transport.rs).  push sends only the objects the remote lacks,
    then moves the ref, and must fast-forward.

    identity is a git-style name and email, recorded on every entry
    and commit so a server can attribute work.  set it with lore
    config, or override per command with --author and --email.

agents this file is also AGENTS. lore init drops a copy into your project so the coding agent reads it. the rules:

    1.  before you write code, record the intent.  each turn, save
        what the user asked for and the decisions you made:

            lore add "what the user said"
            lore add "the choice you made and why"

        intent, never code.  "rate limit the api, 100/min per key"
        is intent.  "edited middleware.rs line 42" is not.  record
        durable rules for how the project works, not one-off bug
        reports or anything personal.  it is cheap, do it often.

    2.  commit related intent once a unit of work lands:

            lore commit -m "short summary"

    3.  to rebuild, materialize and reconcile the tree to the brief.
        do not commit the brief.

    new to lore?  the full guide is at https://lorevcs.com.

status experimental. the on disk format is small and will change. patches welcome.

license MIT. see LICENSE.