muse — Agent Configuration
This repository is a member of a workspace.
Shared workspace rules live in the parent .muse/agent.md.
This file contains only muse-specific additions.
Managed by muse agent-config — regenerate adapters with muse agent-config sync.
HARD RULE — No Destructive Actions Without Explicit Permission
Under no circumstances take any destructive or irreversible action without gabriel's express permission in that conversation. This includes but is not limited to:
muse merge --abort— wipes all uncommitted working tree changesmuse reset --hard— discards commits and working tree changesmuse branch -D— force-deletes branchesmuse rm/muse rm --force— deletes tracked filesmuse checkout --force/muse checkout --ours/muse checkout --theirs- Any
--forceflag on any muse command - Deleting, overwriting, or resetting any file or object store entry
If you encounter a conflict, stale merge state, or dirty working tree — STOP and ask gabriel what to do. Do not attempt to resolve it yourself. Do not abort, reset, or discard anything. The cost of losing uncommitted work is catastrophic.
Repo-Specific Notes
Snapshot Design Intent — Flat Manifest is Intentional
Muse snapshots are flat path → object_id dicts covering the entire repo in one
structure. This is a deliberate architectural choice, not an oversight.
Why not git's recursive tree model?
Git's tree objects provide subtree sharing: two commits that differ only in src/
reuse the same tree object for every other directory. This saves storage at the cost
of requiring recursive tree traversal to reconstruct a file's path.
Muse does not use this model because the primary unit of meaning in Muse is not a directory — it is a snapshot of the entire system state. A music arrangement, its samples, its metadata, and its MIDI files are one coherent atomic thing. A genomics dataset, a 3D scene, a financial model — all of these are captured as a single indivisible state, not a hierarchy of independently meaningful subtrees.
The flat manifest reflects that: state is atomic, not hierarchical.
Storage tradeoff
Each snapshot materializes the full path list on disk. For small-to-medium repos
(up to ~100k files) this is not a meaningful constraint — snapshot files are just
path strings and SHA-256 IDs, not blob bytes. On the wire, delta encoding
(delta_upsert/delta_remove) means only changes are transmitted regardless.
If very large file counts become a real constraint, the natural evolution is a tiered manifest: flat below a threshold, chunked or tree-structured above it. The content-addressing model and delta format would not change.
Domain agnosticism
At the storage layer, a MIDI file and a Python file are identical — both are just bytes with a path. Domain semantics live in the content of those bytes, not in how they are stored. Muse is multi-domain (code, music, genomics, 3D, financial modeling) but the object store, snapshot, and commit model are the same for all of them. Do not introduce domain-specific logic into the core storage layer.