Skip to content

Latest commit

 

History

History
29 lines (27 loc) · 13.5 KB

pstack-differences.md

File metadata and controls

29 lines (27 loc) · 13.5 KB

Differences from pstack

Orbit copies pstack (pstack/ in cursor/plugins). For Claude Code tool and path mappings, it follows pstack's adapter, pstack/docs/harness/claude-code.md. On a design fork, check pstack first. Record each difference here with its reason.

Area pstack on Claude Code orbit Why
Loading rules The user runs /pstack:poteto-mode per task (README.md). A SessionStart hook injects rules.md every session. Rules hold without the user remembering a command.
Worktree for the main chat "Work from a git worktree off main", no tool named (playbooks/opening-a-pr.md). It adds "Dirty branch with unrelated work: patch out, fresh worktree, apply. Snarled worktree: reset from main, redo minimally." EnterWorktree, then ExitWorktree after landing. Ship removes the worktree and keeps the branch. The Worktree gate carries both recovery sentences, and they override its skip-when-in-a-worktree rule. "Reset from main" becomes a fresh worktree. Either case runs ExitWorktree with keep first, then the gate again with a new slug. Claude Code's worktree tools. Ship keeps the branch, as pstack's worktree-cleanup step 5 does, so no commits are lost. gitops never runs reset --hard, so the gate swaps a snarled worktree for a fresh one off origin/main.
Running another skill Read its SKILL.md by path, since the Skill tool refuses most pstack skills (docs/harness/claude-code.md). Flow skills (start, playbook, ship, how, why, architect, interrogate, figure-it-out, unslop) and worktree-cleanup run through the Skill tool. Principles, tdd, benchmark-checklist and opt-in skills keep disable-model-invocation and are read by path or typed. The flow chains skills, so they must be invocable.
Commits No actor named. The delegate step says "Commit liberally" (playbooks/feature.md step 4). Feature says "Rebase into small, ordered commits" (playbooks/feature.md step 6) and refactoring "Rebase into small ordered commits" (playbooks/refactoring.md step 8), and opening-a-pr.md says to amend and rebase into small ordered commits. Bodies follow technical-writing. The parent reviews each unit, then the gitops subagent (Sonnet) commits it, subject only. Unpushed fixes fold in with fixup and autosquash. Flow steps name the unit order instead of a rebase. Refactor delegates its units in step 8's order (subtraction, reshape, cleanup). Bug's failing repro is its own unit, committed before the fix unit. Review before commit, and git output stays out of the main context. Units are committed in order as they pass review, so there is nothing to rebase.
Model per role setup-pstack writes ~/.claude/rules/pstack-models.md (docs/harness/claude-code.md). Flow text says "Pick each subagent's reasoning level and fast or standard speed for the job, per the Subagents section" (playbooks/bug-fix.md, feature.md, refactoring.md, perf-issue.md, hillclimb.md). A fixed model in agent frontmatter. reviewer and advisor default to Opus, gitops uses Sonnet, the rest inherit. Ship overrides the reviewer's model per spawn (Opus and Sonnet). Flows drop the reasoning-level and speed line. Only Claude models exist here, so a per-role setup step adds nothing. Claude Code has no per-spawn speed, and the Agent tool's effort is set only when the user asks.
Task end No handoff line. Feature work stacks its follow-ups (playbooks/feature.md step 6), and Autonomy proceeds on reversible work (poteto-mode/SKILL.md). The same, plus one Next: status line. The user's global CLAUDE.md asks for it.
Pausing Always pause for force-push to shared branches, deploys, data deletion, customer messages (poteto-mode/SKILL.md Autonomy). The same list, plus gates a skill names (ship's manual-test go). Ship's manual test needs the user.
Broken skill mid-task Fix it in its own PR (poteto-mode/SKILL.md). Fix it in its own commit. Orbit lands on main by default.
Review interrogate spawns one reviewer per configured model across families (Opus and Grok by default) and never auto-applies (skills/interrogate/SKILL.md). /orbit:interrogate spawns two general-purpose reviewers, on Opus and Sonnet. pstack's are readonly: true; orbit's keep Edit and Write, and only the brief forbids edits. Ship keeps its own panel on every change: the reviewer agent on Opus and Sonnet in one message, findings merged with which-model tags, sorted per lead-judgment.md, and Act on fixed. Only Claude models run in Claude Code, so diversity is across tiers, weaker than across families.
Independent verifier One verifier per PR, a Cursor cloud agent, posts PASS, PASS+NOTES or FAIL (playbooks/shipping.md step 1). agents/verifier.md, spawned fresh by ship's Verify step. It has no Edit or Write tool, though Bash can still write. It runs the project's verify-* skill when there is one, and drives prompt changes with claude -p --plugin-dir in a scratch repo. Cloud agents don't exist in Claude Code. The prompt forbids edits to the worktree.
Docs-only skip No ship-side skip. Babysit gives docs-only PRs a check pass, not drive (playbooks/babysit.md step 1). Ship skips Check, Clean and Verify only for files no agent or runtime loads, such as a README. Skills, agents and rules are prompts a runtime loads, so they still get verified.
PR merges Squash-merge bottom-up, one PR at a time, then read the PR back (playbooks/shipping.md step 4). Wait for CI, then merge with the Land line's method (default merge commit) and read back state,mergeCommit. One PR per task, no stacks. The merge method is the project's choice in its Workflow block.
Stale base on a PR Report it and name the rebase (playbooks/babysit.md step 5). gitops merges origin/main into the branch and pushes. Orbit never force-pushes, and a merge needs no force.
Test before asking Classify a fork, and sketch observable ones via the Prototype playbook. A full-autonomy grant decides calls it covers (poteto-mode/SKILL.md Non-negotiables). Classify a fork and run the experiment. No Prototype playbook and no grant clause. Prototype is not ported yet.
No matching flow Route to figure-it-out when no bundled playbook fits, or for large, cross-cutting or step-away work. A standing multi-day program routes to Orchestrate (poteto-mode/SKILL.md Playbooks). figure-it-out's Start reads poteto-mode's Principles (skills/figure-it-out/SKILL.md). start routes to /orbit:figure-it-out on the same triggers. No Orchestrate route. figure-it-out's Start reads the playbook's Principles, Stack rules and gates, and its last todo is /orbit:ship when the run changes code. Orchestrate is not ported yet. The gates keep a figure-it-out change on the same worktree, delegate and ship path as every other change.
Feature flow how, architect, the throughput checkpoint, then the delegate (playbooks/feature.md). interrogate runs before shipping when the design is contested (step 7). A closing paragraph sends code-coupled work to a single owner who fans out internally, keeps parent-level fan-out for independent artifacts, and spawns a fresh owner rather than chaining interrupts. The delegate step says a subagent forbidden to spawn owns the diff directly, and "Comments per Comments". A first step states "done" in 3 bullets ("Ask only if a real decision is missing"). Then how, architect, the throughput checkpoint, and the delegate. interrogate runs on the architect sketch before the delegate when the design is contested. The single owner is the parent, with one orbit:poteto-agent per unit under the Delegate gate. "That owner fans out internally after the blocking phase" is dropped. Artifact fan-out runs as read-only agents outside the Delegate gate. The forbidden-to-spawn clause and the Comments pointer are dropped. Ship's Review step and rules' Task End read the "done" bullets. Ship's review panel runs the same rubric and models on the code right after, so interrogate moves to the sketch. orbit:poteto-agent can't spawn agents (agents/poteto-agent.md), so only the parent can own and fan out, and the forbidden-to-spawn clause is always true. Artifact slices write no code, so the Delegate gate doesn't apply. Ship's no-comments step covers comments.
Architect runners Phase B runs the arena skill with runners from pstack-models.mdc (Opus and Grok), cross-judged (skills/architect/SKILL.md). Feature delegates through arena when the implementation admits multiple valid shapes (playbooks/feature.md step 4). Two general-purpose runners on Opus and Sonnet return their package in the reply, plus a third if the two aren't structurally distinct. The parent synthesizes. No arena cross-judge. Runners keep Edit and Write, and only the brief forbids edits. Feature runs /orbit:architect on a multi-shape choice before the delegate. arena is not vendored, and only Claude models run here.
Perf artifacts Capture traces, compare the artifacts, and cite the measurement in the PR (playbooks/perf-issue.md steps 1, 3, 4, 5). Raw runs go under $TMPDIR/orbit-perf/<slug>/, the post-fix trace next to the baseline. The measurement is cited in the PR body when Land is pr, else in the reply. Ship removes the worktree after landing, and commits are subject only.
Hillclimb A subagent on the configured hillclimb model makes each attempt, and parallel attempts each get their own worktree. decision.tsv stays gitignored in the tree. An unattended run borrows the Autonomous run playbook's wake mechanism, and the run ends with Opening a PR (playbooks/hillclimb.md). The ## hillclimb playbook section. Each attempt is a fresh orbit:poteto-agent, and gitops commits each accepted fix by path. Parallel attempts follow the Delegate gate's parallel exception: isolation: "worktree", and gitops cherry-picks a kept attempt onto the task branch. decision.tsv lives under $TMPDIR/orbit-perf/<slug>/. An unattended run borrows /loop's wake mechanism, and the run ends with the Land gate. Commits go through gitops, and delegates never commit. A delegate briefed per the gate works only in the path it's given, so an isolated attempt needs its own path and a way back to the task branch. Ship removes the worktree after landing, so an in-tree log would be lost. Autonomous run is not ported, and /loop is Claude Code's wake mechanism.
Flow wording Bug reaches the surface "via the control skill (Non-negotiables)" (playbooks/bug-fix.md step 1), refactoring "via the relevant control skill" (refactoring.md step 6), and perf "via the matching control skill" (perf-issue.md step 1). Bug drives a stubborn hunt with "Cursor's /loop command". Investigation re-routes "to Bug fix or Feature". Flow steps cite unvendored principles: build-the-lever, sequence-verifiable-units, separate-before-serializing-shared-state, foundational-thinking, redesign-from-first-principles, migrate-callers-then-delete-legacy-apis. Investigation says "No PR, no babysit" and "see Autonomy". Delegate steps name "a subagent using your configured model". Flows end with "Run Opening a PR". The project's verify-* skill, when it has one, is the control skill. Bug uses /loop. Investigation re-routes to bug or feature through /orbit:start <goal>. Delegate steps name a fresh orbit:poteto-agent per the Delegate gate. Unvendored principles keep their claim in plain words, without the citation. Investigation says "No commit, no /orbit:ship" and drops the Autonomy pointer. Flows end with "Run the Land gate". The Worktree gate names hillclimb and figure-it-out runs by the commit type of what they change. Orbit's control skill is verify-*, and not every project has one. The unvendored principles have no file to read. Babysit and Opening a PR are not ported, and ship lands every change. Orbit has no Autonomy section. Branch names must be commit types.
Worktree cleanup The audit reads transcripts from ~/.cursor/projects/<slug>/agent-transcripts, one dir per repo, and fetches PRs through Origin's CLI, else gh (poteto-mode/scripts/worktree-audit.sh). The pinned and active chats come "from the user or sidebar". Step 3 picks each subagent's reasoning level and speed per the Subagents section, and step 6 also clears Cursor's app state (poteto-mode/playbooks/worktree-cleanup.md). /orbit:worktree-cleanup. The audit reads ~/.claude/projects/<slug>/**/*.jsonl. A worktree's newest chat is any session started in it (its own slug dir) or any session of the repo that names its path. A worktree Claude Code has locked is hold-locked and never removed. PRs come from gh only. The active sessions come from the user, "chat" becomes "session", and "arena" trees become "attempt" trees. The build-the-lever and encode-lessons-in-structure citations, the Subagents pointer, the Autonomy pointer and the Cursor app-state reclaimer are dropped. Claude Code stores sessions per start path, so a session started in a worktree has its own dir, and it locks a live session's worktree. Origin's CLI and the sidebar don't exist here, arena and those principles aren't vendored, and Claude Code has no Cursor app state.
Maintain verification skill A changed run ships "at most one PR of proven corrections" (skills/maintain-verification-skill/SKILL.md). One change of proven corrections lands through /orbit:ship. Clean or blocked runs land nothing. Ship lands every change, by the project's Land line, so a PR is only one way it lands.
Vendored subset 58 skills (skills/). The subset in skills.json. Unvendored skills are adopted when a flow needs them.