# Onboarding: Working on `muse` and `musehub` Welcome aboard. This is the workflow to follow on every ticket until it's second nature. You have `write` access on both `muse` and `musehub` — no fork required. ## Step 0 — Clone both repos (skip if you already have them) If you don't already have local copies, clone both directly — your write access means you're cloning the real repos, not a fork: ```bash muse clone https://staging.musehub.ai/gabriel/muse muse clone https://staging.musehub.ai/gabriel/musehub ``` Same semantics as `git clone` — this creates two regular directories in your current location, named after each repo: a `muse` folder and a `musehub` folder (not hidden — no leading dot). Each one has a hidden `.muse/` directory inside it (that's Muse's own metadata, same role as `.git/`), plus `origin` already pointing at the source URL. Check out `dev` in each if it isn't already the default: ```bash muse -C muse checkout dev muse -C musehub checkout dev ``` Everything below assumes you're starting from one of these two directories — substitute the actual path where you cloned each one. ## The standard cycle ```bash # 1. Start from dev, always muse -C ~/path/to/muse checkout dev muse -C ~/path/to/muse pull local dev # or: muse -C ~/path/to/muse pull staging dev # 2. Branch — never work directly on dev or main muse -C ~/path/to/muse checkout -b task/short-description \ --intent "what this branch does" \ --resumable # 3. Do the work, commit as you go muse code add . muse commit -m "feat: what changed and why" # 4. Push your branch (not dev, not main — your branch) muse -C ~/path/to/muse push staging task/short-description # 5. Open a merge proposal (MP) — MuseHub's equivalent of a PR muse -C ~/path/to/muse hub proposal create \ --title "Plain-English description of the change" \ --from-branch task/short-description \ --to-branch dev \ --hub https://staging.musehub.ai # 6. Assign the MP to gabriel for review muse -C ~/path/to/muse hub proposal reviewer request gabriel \ --hub https://staging.musehub.ai ``` Gabriel reviews and merges (or sends it back with comments). You don't merge your own MPs into `dev`/`main` — that's the review gate. ## Picking up work - Gabriel will assign you tickets directly, or you can browse/self-assign open issues: ```bash muse -C ~/path/to/muse hub issue list --state open --hub https://staging.musehub.ai muse -C ~/path/to/muse hub issue assign --assignee aaronrene --hub https://staging.musehub.ai ``` - You can also file your own issues for things you find: ```bash muse -C ~/path/to/muse hub issue create --title "..." --body-file /path/to/plan.md --hub https://staging.musehub.ai ``` ## A few conventions worth knowing up front - **Branch naming**: `task/...` for general work, `fix/...` for bug fixes, `feat/...` for new features. The type prefix goes in the branch name, not the MP title — MP titles should be plain English (e.g. "Fix push authorization gap for private repos," not "fix: push authz"). - **Always pass `--hub https://staging.musehub.ai`** on `muse hub` commands unless you're deliberately targeting a different instance. - **Non-trivial work gets a plan first.** For anything more than a small fix, write the issue body as: Background (why this exists), Goal (what "done" looks like), Phases (ordered, TDD — write the test red before the fix), Acceptance Criteria. Look at any recently-closed issue on staging for the shape. - **Read before you write.** If you're updating an existing issue/proposal's body, always read the current live content first — don't assume you remember what it says, and never overwrite it blind. - **Never force-push, never `--force` anything** without checking with gabriel first. If you hit a conflict or unexpected state, stop and ask rather than resolving it unilaterally. ## Getting unstuck If a `muse` command does something surprising, check `muse --help` first — most commands document their exact JSON schema and exit codes. If something seems genuinely broken (not just unfamiliar), that's useful signal — file an issue describing exactly what you ran and what happened; plenty of real bugs get found exactly that way. Ping gabriel directly for anything blocking. Welcome to the team.