Run the following command to install everything:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/rstagi/dotfile/master/install.sh)"You can run the installer again. A second run changes no file. Before the installer links a dotfile config (.gitconfig, .zshrc, ~/.config/nvim, Claude and Codex config), it moves a different file or folder to a new <path>.bak.<timestamp> backup. For other links (ws, docker-buildx, .tmux.conf), it keeps a different file and prints a warning.
Bare-minimum Conductor in tmux: a git worktree + tmux session per branch, one tab per Claude/Codex/Grok session, hook-driven status, notifications, and a session bus (ws send, ws done, ws on). ./install.sh ws, then ws. Docs: ws/README.md.
Invoke /checkpoint-30 in Claude or $checkpoint-30 in Codex to request a status report and guidance after 30 minutes on one interactive task. Interactive timing is advisory. Loop phase attempts have a hard 30-minute cutoff and return a checkpoint to the orchestrator; other phases continue.
Loop defaults: latest Opus orchestrator; latest GPT Sol phase executor with latest Sonnet fallback. Escalation (Fable, Opus fallback) and review use separate model chains. Effort is per role: implementing high, Opus fixes medium, orchestrating high, reviewing by tier. PR-review phases accept [review: standard|max] (default standard): standard uses Sol / Opus / Grok; max uses Astra / Fable / Grok. [rounds: N] sets the maximum number of outer rounds (default 2) and [inner: N] caps reviewer/critic exchanges per round (default 2). Both accept 1..5. Chains in loop-models.conf track the newest model of each family — Claude aliases (opus, sonnet, fable), Codex @<family> legs (codex:@sol, resolved at launch from codex debug models) and grok:default (the Grok CLI's default model) — so new releases need no edit; pin a full model name to freeze one. Grok reviewers need grok installed + logged in (./install.sh grok, then grok login) and send the reviewed repo to xAI (see the Grok caveat in ws/README.md); a failed Grok reviewer blocks that repository's review like any other reviewer.
Adversarial Review (AR) freezes the artifact while reviewer R reports numbered findings and critic C audits them with full code context. Disagreements require code evidence; R responds and C audits again within the inner cap. Only the fixer (or planner for plan review) edits the artifact, between outer rounds. Providers rotate: GPT reviews / Claude critiques in round 1, Claude / Grok in round 2, Grok / GPT in round 3, then repeat. When R and C agree that no blocking finding is open, the review skips later rounds and goes to the final review. Unresolved disagreements at the cap produce .disputed.md, never a clean round. Each finding is blocking (a security problem, unprotected breakage or a failing check) or deferred. Only blocking findings make R say NEEDS_CHANGES, start fixes or make the final review request changes. Before the last outer round, Opus fixes run when the last review says NEEDS_CHANGES or the round is disputed. The next round checks only the fix diff and the open blocking items. The final Opus reviewer checks the last converged review, disputed items, and current code, then posts the only GitHub review.
New Loop plans include an estimate and confidence for each work phase. The planner targets 20–25 minutes of active work per phase, leaving room for the 30-minute runner checkpoint. The terminal review phase uses a per-repository AR ledger. loop-review.sh next --tier standard --rounds 2 --inner 2 --ledger <file> returns the next reviewer, critic, response, fix, or final run; a clean round stops later rounds. record appends completed evidence atomically, recover replays finished runs after a crash, and prompt renders each role’s instructions. The CLI rejects legacy shallow/medium tiers. Recovery retains custom limits in the ledger’s .config.json sidecar. Retries and queue waits can take longer.
Each runs/review-p<N>-<owner--repo>.ledger.tsv row contains a<k>, stage, role, provider, verdict token, and run directory relative to .loop/. Roles are review|critic|respond|confirm|disputed|fix|final; a clean round implies skipped rounds without writing skipped rows. Old ledgers with third-provider confirm rows still replay. Resume recovers completed runs, reconciles the GitHub final marker, then calls next. Plan review uses the same shared loop-ar.sh core: loop-plan-review.sh run --round r runs one independent round; the planner verifies findings and disputes against code and edits between rounds (at most 2 via LOOP_PLAN_REVIEW_ROUNDS, round 2 only after a blocking fix). multiphase-plan light <goal> skips plan review and the plan explainer. See the AR protocol and rollout steps before upgrading an active loop.
loop-top shows the phases of a Loop run in the terminal, live from the central daemon (:7717). Run it anywhere: it infers the loop from cwd (coordinator worktree, phase worktree, or git branch + origin) and otherwise opens an fzf picker over active + finished loops. HIL questions are still answered through the orchestrating agent.
- Rows show the model that actually ran (
codex:gpt-6.1-sol), 📝 on phases with a note, deps (← 2a, 2b), andwaiting on 2afor a todo phase with unmerged deps. ↑↓/j kselect a phase,⏎opens its details (attempts, heartbeat, HIL text, note),escgoes back.nedits the phase's steering note in$EDITOR(empty = clear). A running phase picks it up within ~2s: the runner interrupts the engine and resumes the same session with the note.xpauses/resumes the selected phase;Xpauses/resumes the whole loop (asks y/n). Pausing halts the runners (and the orchestrator forX) within ~2s; resuming continues the same engine session.- Review phases show their tier and rounds (
standard review ×2); change them with[review: standard|max]/[rounds: N]/[inner: N]in the plan. - A running review phase shows its current stage and progress, plus one pipeline per repository. Completed runs come from the AR ledger; the remaining path is planned, and a clean third-provider confirmation marks later rounds skipped. Skipped stages do not count as pending or become the current stage. Its
⏎details list every run (a<k>, stage, chain, state, model — planned model in parens — and summary). The Observatory drawer also shows role, provider, and verdict. - Model column:
codex:gpt-6.1-sol= what ran / is running now (live from the runner'sleg.json),→ claude:opus= your override,(codex:@sol)= planned (firstCHAIN_TASKleg; the light/default route is decided at launch),standard review ×2= review tier (untagged review phases use the default tier). mon a review phase that hasn't started picksstandardormax, showing rounds, inner cap, R/C rotation, fixer, and final models fromloop-models.conf— the daemon rewrites its[review: …]tag in.loop/plan.md. Historical shallow/medium tiers still render, but cannot be selected for execution. The tier can also be named up front when callingmultiphase-plan("review: max"); otherwise it's proposed and confirmed there.msets the model for a phase that hasn't started (fzf overloop-models.conflegs, or typeengine:model); the default chain stays as fallback.popens the plan in$PAGER;gtoggles a git-log-style dependency graph;wtogglesbranch → worktree;lswitches loop;qquits.loop-top <runId>opens a specific loop;loop-top --once [--worktrees] [--graph]prints one frame.- Loop picker (start without an inferable loop, or
l): opens in navigation mode —⏎open ·aarchive (reloads) ·j/kmove ·qquit;/shows the search box (eschides it). ltopis a shorthand alias forloop-top.loop-top archive [runId]hides a loop from the picker (default: the one inferred from cwd; asks first,--yesskips) without touching its worktree;loop-top unarchive <runId>brings it back. Loops whose coordinator worktree is gone are archived automatically.- Daemon down → renders the last stored snapshot from
~/.loop/loops(daemon offline · from store); actions need the daemon.
Loop can ask Jev for bounded route, runner-question, and pre-merge-risk recommendations. Put a
single-line key in ~/dotfile/.loop-secrets/typesafe-api-key (gitignored; owner-readable only),
or set TYPESAFE_API_KEY in the supervisor environment. The environment value takes precedence;
LOOP_JEV_KEY_FILE can select another local file. Then choose a mode:
LOOP_JEV_MODE=offdisables calls explicitly. With no mode and no key, Loop is also off and recordsmissing_credentials; explicitoffrecordsdisabled.LOOP_JEV_MODE=shadowrecords advice but preserves the established route and triage behavior.LOOP_JEV_MODE=activemay apply only allowlisted, above-threshold decisions. Routing remains opt-in until shadow replay supports the configured threshold.
Routing sends bounded phase title, Done when, and Estimate text after redacting common credential forms. Without Done when and Estimate evidence, active routing keeps the default task chain. Pre-merge risk requests send changed paths, diff totals, Done when, and a bounded verification summary; they omit patch contents. The mandatory full diff skim still runs locally.
Verification, full diff review, merge checks, escalation, and human gates remain authoritative in every mode. Observatory shows the current mode and fallback count in the header, decision badges on phases, and proposal-versus-applied details in the phase drawer. Archived loop snapshots retain the same decision history.
Replay one or more stored loop records locally without modifying them:
node loop-jev-replay.mjs ~/.loop/loops/<run-id>.json | jq .The report includes agreement and fallback rates. Latency, runner retries, and cost are shown only
when present in the records and otherwise read unavailable. Synthetic fixtures validate report
mechanics only; they do not support savings claims.
There are some packages to be configured manually.
The .zshrc file after the installation checks if a ~/.zshrc_ext file exists and, if so, it sources it. This is useful to add some custom configurations that are not present in the main file.
Replace the Spotlight shortcut with Raycast:
- Remove Spotlight shortcut
CMD + spacefrom Keyboard Settings > Keyboard Shortcuts > Spotlight - Set Raycast Hotkey to
CMD + spacein Raycast Settings > General
TODO: add the missing hot keys
- Brew
- Search Hotkey:
Option + B
- Search Hotkey:
- Clipboard History
- Code Stash
- Coffee
- Color picker
- Define Word
- Floating Notes
- Toggle Floating Notes Focus Hotkey:
Option + .
- Toggle Floating Notes Focus Hotkey:
- Format JSON
- GitHub
- Google Search
- Google Translate
- Google Workspace
- My Password (1password)
- Navigation
- Notion
- Search Emoji
- Set Audio Device
- Show Cheatsheets
- Snippets
- Speedtest
- Window Management
- iTerm
Login with my account (or accounts) and sync everything. Then, configure the SSH Agent to use 1Password as a source for SSH keys. (TODO: explain how)
Finally, configure the browser extension to use the 1Password app instead of the web interface.
This package needs to be installed manually from the AppStore.
Go to Settings > General > Login items and set the following apps to start when logging in:
- Raycast
- Rectangle
- RunCat