agentsclimarketplace

Lore

Skill ABostrom/lore-skill/skills/lore

Use when working in a Lore repository; installing the Lore CLI; initializing or cloning a repo; running status/stage/commit/branch/push/sync; hydrating or configuring sparse workspaces; choosing local-vs-online (server) mode; authenticating with `lore login`/`lore auth`; running a local Lore service; using the lore-vcs (Python), lore-js, lore-dotnet, or lore-go SDK over their shared C ABI; or diagnosing a Lore CLI/SDK failure.From its SKILL.md

Install
npx -y skills add ABostrom/lore-skill --skill lore

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

11.7 KB, as published. Nobody here has run it

lore

Lore is Epic's open-source, content-addressed version control system for code and large binary assets. Every payload, tree node, and revision is keyed by its BLAKE3 hash, so a repository is a Merkle DAG: one 32-byte root hash verifies the whole tree. Workspaces are sparse by default and hydrate fragments on demand. Lore is exposed through a single lore CLI and through Python/JavaScript/C#/Go SDKs that all bind to one C ABI — the CLI is just another consumer of that API, not a privileged one.

Verified against Lore CLI 0.8.3+201 on 2026-06-18. SDK repos: lore-python @ 4f90b7f, lore-js @ 396ad34, lore-dotnet @ a56df73, lore-go @ 91ea1c5.

Iron rules

  1. Every CLI command accepts --help. Run lore <cmd> --help before guessing flags — flags differ per subcommand and Lore is pre-1.0 (it changes between minor versions).
  2. Don't invent commands or SDK operations. If a verb isn't in the Quick Reference below (or reference/cli.md), or an op isn't in reference/sdk/model.md, look it up. CLI verb names are NOT the same as SDK operation names — never assume lore commit maps to a method called commit (it's revision_commit).
  3. Know whether you're offline or online before acting. The --offline global flag (CLI) / offline=True global arg (SDK) is load-bearing. Local-only work (create, stage, commit, branch, diff against cached data) needs no network; push/clone/sync against a remote do. Offline mode never makes network round-trips and never lazy-fetches.
  4. SDK calls bracket their lifecycle: log_configure first, shutdown last. Every operation is Lore.<op>(globals, args).callback(handler).wait(). Skipping shutdown leaks the native runtime.

Detection gate

Before doing anything, confirm the environment. If a precondition is missing, stop and tell the user — never silently fall back to git or Perforce.

  • CLI work: is lore on PATH? (lore --version → expect lore 0.8.3+...). If not, it's not installed → reference/setup.md.
  • In a repo? Is the cwd (or --repository <path>) a Lore repo? A repo has a .lore/ directory. lore status confirms it. If not, the user needs lore repository create / lore clone first.
  • SDK work: is the language binding installed (e.g. pip install lore-vcs for Python)? The native lib must be reachable — building the Python types from source needs LORE_BUILD_PATH set to the liblore install. If the binding/lib is absent → stop and tell the user; do not hand-roll FFI.

Invocation & exit behavior

CLI. lore [GLOBAL OPTIONS] <command> [ARGS]. The repository is the cwd unless you pass the global --repository <path>. Globals (--offline, --remote, --local, --identity, --log-level, --dry-run, -f/--force, --no-pager, --non-interactive) go before the subcommand. Note real shapes that differ from git/p4:

  • lore repository create <url> --repository <path> --offline — the URL is positional (e.g. lore://local/name for an offline local repo).
  • lore stage <paths> — directory paths stage only files already marked dirty; pass --scan to walk the filesystem, or mark first with lore dirty.
  • lore commit '<message>' --identity <id> — the message is a positional argument, not -m. A fresh install has no default identity, so --identity is required unless set in .lore/config.toml.

Exit 0 = success, non-zero = failure (commit without identity exits 1, etc.). Report the verbatim error and stop.

SDK lifecycle (Python shown; other languages share the model — see reference/sdk/model.md):

from lore import Lore
from lore.types import LoreLogConfig
from lore.types.args import LoreGlobalArgs, LoreRepositoryCreateArgs
from lore.types.enums import LoreEventTag

Lore.log_configure(LoreLogConfig(file=True, file_path=LOG))   # 1. first
Lore.global_callback(LoreEventTag.LOG, logger)                # optional: process-wide handler
g = LoreGlobalArgs(repository_path=PATH, offline=True)        # globals (offline!)
a = LoreRepositoryCreateArgs(repository_url="lore://local/x") # op-specific args
result = Lore.repository_create(g, a).callback(handler).wait()# operation: globals, args
# ... file_stage, revision_commit, (branch_push / repository_clone online) ...
Lore.shutdown()                                               # last

Goal-directed planning

When the user states a goal, work backwards to a precondition that already holds, then execute forward verifying each step:

  1. Commit (lore commit '<msg>' --identity <id>) requires →
  2. staged files (lore stage <path>; check with lore status) requires →
  3. a repository (lore repository create <url> or lore clone <url>) requires →
  4. the CLI installed (lore --version).

Online goals add: push (lore push) requires a remote + authentication (lore login <remote-url>). Verify each precondition (lore status, lore --version, .lore/ exists) rather than assuming; if one is unreachable, stop and report.

Quick reference — CLI

CLI verbs only (captured live from lore --help; full flag detail in reference/cli.md). Globals like --repository, --offline, --identity apply to all.

Want to…Command
Check the CLI versionlore --version
Create a local (offline) repolore repository create <url> --repository <path> --offline
Clone a remote repolore clone <url> [path]
Show working-tree statuslore status [path...] (add --scan to reconcile from disk)
Mark files changed (no read)lore dirty <paths>
Stage changeslore stage <paths> (or lore stage --scan <dir>)
Stage a move/renamelore stage move <src> <dst>
Unstage / reset a pathlore unstage <path> / lore reset <path>
Commit staged changeslore commit '<message>' --identity <id>
Show revision historylore history
Diff a file (vs current revision)lore diff <file>
List / create / switch brancheslore branch list / lore branch create <name> / lore branch switch <name>
Push commits to remotelore push [branch]
Sync to a repository statelore sync [revision]
Lock a filelore lock acquire <file>
Authenticate the CLIlore login [remote-url]
Manage auth tokens/identitieslore auth (e.g. lore auth list)
Run / start / stop a service processlore service run / lore service start / lore service stop
Manage links (versioned deps)lore link (e.g. lore link list)
Manage layers (local overlays)lore layer (e.g. lore layer list)
Manage the shared storelore shared-store
Subscribe to notificationslore notification subscribe
Generate shell completionslore completions <shell>

Quick reference — SDK

SDK operations only. These are Lore.<op>(globals, args) methods — names are NOT the CLI verbs. Full surface in reference/sdk/model.md.

Want to…Call
Configure logging (always first)Lore.log_configure(LoreLogConfig(...))
Register a global event handlerLore.global_callback(LoreEventTag.X, fn)
Create a repositoryLore.repository_create(g, LoreRepositoryCreateArgs(...))
Clone a repositoryLore.repository_clone(g, LoreRepositoryCloneArgs(...))
Show statusLore.repository_status(g, LoreRepositoryStatusArgs(...))
Stage filesLore.file_stage(g, LoreFileStageArgs(paths=...))
Unstage filesLore.file_unstage(g, LoreFileUnstageArgs(...))
Commit a revisionLore.revision_commit(g, LoreRevisionCommitArgs(message=...))
Revision historyLore.revision_history(g, LoreRevisionHistoryArgs(...))
Create / switch a branchLore.branch_create(...) / Lore.branch_switch(...)
Push a branchLore.branch_push(g, LoreBranchPushArgs(...))
Sync a revisionLore.revision_sync(g, LoreRevisionSyncArgs(...))
Acquire a file lockLore.lock_file_acquire(g, LoreLockFileAcquireArgs(...))
Log in interactively / with tokenLore.auth_login_interactive(...) / Lore.auth_login_with_token(...)
Start / stop a serviceLore.service_start(...) / Lore.service_stop(...)
Tear down (always last)Lore.shutdown()

Concept clarifications

  • Offline vs online mode. Offline (CLI --offline, SDK offline=True) works entirely against the local mutable + immutable store: create, stage, commit, branch, diff, switch — no round-trips, no lazy fetch (it declines rather than reaching the network). Online (--remote, a real remote URL, or default when a remote is configured) is needed for clone, push, sync, and on-demand hydration. Push converges local and remote via compare-and-swap: it succeeds atomically only if the remote still matches what the client expected.
  • Global args vs op args. Every SDK operation takes two argument objects: LoreGlobalArgs (repository path, offline, connection limits — the same things the CLI's pre-command global flags set) and a per-operation Lore<Op>Args (e.g. LoreFileStageArgs(paths=...)). Don't put op-specific fields on globals or vice-versa.
  • Callback / event model. Operations are asynchronous and stream typed events. You attach a handler with .callback(fn) (per-op) or Lore.global_callback(tag, fn) (process-wide), then .wait() for completion. Events are tagged by LoreEventTag (PROGRESS, ERROR, COMPLETE, LOG, END, plus hundreds of operation-specific tags); read payloads off the event object. Log verbosity is LoreLogLevel (NONE…ERROR).

Load reference when…

  • Learning Lore — architecture, content-addressing/Merkle DAG, offline/online, hydration & sparse workspaces (.lore/view, .loreignore), links vs layers, glossary → reference/concepts.md
  • Installing the CLI, initializing/cloning, local-vs-server setup, auth, building from source → reference/setup.md
  • Full CLI command + flag detail for daily VCS work → reference/cli.md
  • A CLI or SDK command failed or behaves oddly → reference/troubleshooting.md
  • The universal SDK model — globals/op-args, the op(globals, args).callback().wait() lifecycle, the event/callback system, logging, shutdown → reference/sdk/model.md
  • A language-specific SDK quickstart + worked example → reference/sdk/python.md, reference/sdk/javascript.md, reference/sdk/dotnet.md, reference/sdk/go.md

Anti-patterns

  • Don't assume git/Perforce syntax. No -m for commit messages (positional), no git add/p4 add (it's lore dirty + lore stage, and bare directory staging needs --scan or prior lore dirty), no git init (it's lore repository create <url>). When unsure, run lore <cmd> --help.
  • Don't skip shutdown. Every SDK session ends with Lore.shutdown() (and starts with log_configure), or the native runtime leaks.
  • Don't forget offline mode for local-only work. If there's no remote (or you don't want network), pass --offline / offline=True; otherwise operations may try to reach a server and stall or fail.
  • Don't hand-roll FFI (lore.native / the raw C ABI) when the fluent Lore.<op>(...).callback().wait() API covers the task. Drop to native only for operations the high-level API genuinely doesn't expose.
  • Don't invent CLI verbs or SDK ops. If it isn't in the Quick Reference, reference/cli.md, or reference/sdk/model.md, it doesn't exist — and don't assume a CLI verb and an SDK op share a name.

Keep looking

Skills are one crate of 628,853. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.