gabriel / muse public
getting-started.md markdown
203 lines 6.1 KB
Raw
sha256:cb2da6c61116ad1ab98d03747c21d6f66485839c7b4efd7d0124db0f8aa14e41 refactor(harmony): move auto_apply + record_resolutions int… Sonnet 4.6 minor ⚠ breaking 24 days ago

Getting Started with Muse

Everything a new contributor needs to switch from Git to Muse — install, uninstall, migrate an existing repo, and understand the full agent-era workflow.


Dev Setup (contributors only)

If you are hacking on Muse itself (not just using it), run the dev setup script instead of the user installer below. It builds a clean virtualenv from pyproject.toml, installs muse in editable mode (pip install -e .) with all grammars and dev tools, and wires ~/bin/muse to the venv. Re-run it any time dependencies drift:

bash ~/ecosystem/muse/dev-setup.sh

The dev venv lives at ~/ecosystem/muse/.venv and is separate from the user install path (~/.local/share/muse/venv). You can run both side-by-side to dog-food the installer experience without touching your dev environment.


Step 1 — Install

Run the installer from MuseHub. It requires Python 3.14+ and installs muse into a dedicated virtualenv at ~/.local/share/muse/venv, then symlinks the muse binary to ~/.local/bin. No PyPI — the package is downloaded directly from the MuseHub instance. Muse is currently implemented in Python and will be ported to Rust.

curl -fsSL https://staging.musehub.ai/install.sh | sh

Verify:

muse --version
muse auth whoami

If you have not yet registered an identity with a hub, do that now:

muse auth keygen --hub https://staging.musehub.ai
muse auth register --hub https://staging.musehub.ai --handle <your-handle>
muse auth whoami

muse auth keygen --json outputs the key fingerprint — keep a copy somewhere safe:

{"hub": "https://staging.musehub.ai", "algorithm": "ed25519",
 "fingerprint": "sha256:<64-hex>", "hd_path": "m/1075233755'/0'/0'/0'/0'/0'"}

There are no passwords, no tokens, no JWTs. Every request is signed with an Ed25519 key derived in memory from the BIP39 mnemonic stored in the OS keychain — no key file is ever written to disk. The server holds only the public key.


Step 2 — Uninstall (when needed)

The uninstall script removes the venv and the ~/.local/bin/muse symlink. It deliberately leaves ~/.muse intact — your keys, history, and identity store are never deleted automatically.

curl -fsSL https://staging.musehub.ai/uninstall.sh | sh

To fully clean up (keys and all), remove ~/.muse manually after running the script:

rm -rf ~/.muse   # only if you are decommissioning this machine entirely

To rotate a key or deregister a specific hub without removing the binary:

muse auth logout --hub https://staging.musehub.ai   # removes local key entry from ~/.muse/identity.toml

muse auth logout removes only the local key entry — there is no server-side session to invalidate (MSign is stateless). Useful for key rotation or decommissioning a machine.


Step 3 — Migrate an Existing Git Repository

muse code migrate replays a Git commit graph into a Muse repository. It preserves author names, emails, and committer timestamps verbatim.

Quick start

# Migrate the current directory (replays main by default)
cd /path/to/your-git-repo
muse code migrate

# Migrate all local branches
muse code migrate --all

# Migrate specific branches
muse code migrate --branch main dev feat/x

# Preview without writing anything
muse code migrate --all --dry-run

# Stream structured progress (essential for agent pipelines and large repos)
muse code migrate --all --json

Incremental migration

If you have already migrated and want to pick up new commits:

# Only replay commits after a known git SHA
muse code migrate --from-ref abc123def456

Migrate into a separate directory

muse code migrate /path/to/git-repo --target /path/to/new-muse-repo

Add custom exclusion patterns

The default exclusions cover build artifacts and editor swap files. Add your own:

muse code migrate --exclude "dist/" "*.lock" "vendor/"

JSON progress events (agents and CI)

With --json, the command streams NDJSON to stdout throughout the run — no silent multi-minute waits. Every line is a valid JSON object:

{"event": "branch_start", "branch": "main", "total": 1247}
{"event": "progress", "branch": "main", "committed": 100, "total": 1247}
{"event": "progress", "branch": "main", "committed": 200, "total": 1247}
...
{"event": "branch_done", "branch": "main", "committed": 1247}
{"event": "done", "branches": ["main", "dev"], "dry_run": false, ...}

Parse the final done event for a structured summary:

muse code migrate --all --json | grep '"event":"done"' | jq '.'

Connect to MuseHub and push

After migration, connect your new Muse repo to a remote and push:

# Add the remote (create the repo on MuseHub first if it doesn't exist)
muse remote add local https://localhost:1337/<handle>/<repo>

# Push
muse push local main
muse push local dev

If the push returns 404 ("Repository not found on remote"), the repo does not yet exist on MuseHub. Create it via the API then retry:

muse hub connect https://localhost:1337

Step 4 — Learn the Full Muse Workflow

Read AGENTS.md next. It covers:

  • The three-repo ecosystem layout (muse, musehub, agentception)
  • Every muse command with examples — commit, branch, merge, push, tag, release
  • Muse Code Intelligence: muse code grep, muse code cat, muse code impact, muse code deps
  • Multi-agent coordination with muse coord
  • Worktrees for parallel branch work
  • Muse Flow — branch topology designed for agent swarms
  • MSign authentication internals
  • Provenance metadata on commits (--agent-id, --model-id, --sign)
  • Non-negotiable quality rules (no legacy, no deprecated, no dead code)

The three most important habit changes from Git:

Old reflex Muse replacement
rg "FunctionName" muse code grep "FunctionName"
Read whole file to find one function muse code cat "file.py::FunctionName"
git log / git blame muse log / muse code symbol-log "file.py::Symbol"

Never run git or gh in this ecosystem. Muse and MuseHub are the only VCS tools.

File History 2 commits
sha256:cb2da6c61116ad1ab98d03747c21d6f66485839c7b4efd7d0124db0f8aa14e41 refactor(harmony): move auto_apply + record_resolutions int… Sonnet 4.6 minor 24 days ago
sha256:596a4963c21debb14d9ef51e23c2ca9f825b602ab8585f69caca35eb81bcac77 chore(harmony): baseline audit — Phase 0 of issue #16 Sonnet 4.6 29 days ago