pi-t3-bridge 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +5 -1
  2. package/overlay/overlay.json +118 -0
  3. package/package.json +15 -6
  4. package/pstack/skills/architect/SKILL.md +1 -1
  5. package/pstack/skills/arena/SKILL.md +1 -1
  6. package/pstack/skills/how/SKILL.md +1 -1
  7. package/pstack/skills/interrogate/SKILL.md +1 -1
  8. package/pstack/skills/poteto-help/SKILL.md +1 -1
  9. package/pstack/skills/poteto-mode/SKILL.md +4 -4
  10. package/pstack/skills/poteto-mode/brief.md +4 -4
  11. package/pstack/skills/poteto-mode/playbooks/autopilot-full.md +1 -1
  12. package/pstack/skills/poteto-mode/playbooks/orchestrate.md +1 -1
  13. package/pstack/skills/reflect/SKILL.md +1 -1
  14. package/pstack/skills/setup-pstack/SKILL.md +3 -3
  15. package/pstack/skills/statechart/scripts/run.ts +1 -1
  16. package/pstack/skills/swarm/SKILL.md +1 -1
  17. package/pstack/skills/why/SKILL.md +1 -1
  18. package/src/bridge/accounts.ts +2 -2
  19. package/src/bridge/ask.ts +2 -2
  20. package/src/bridge/bash-timeout.ts +1 -1
  21. package/src/bridge/config.ts +10 -2
  22. package/src/bridge/plan.ts +1 -1
  23. package/src/bridge/resume.ts +2 -2
  24. package/src/bridge/state.ts +2 -2
  25. package/src/bridge/steer-judge.ts +2 -2
  26. package/src/bridge/steer-transcript.ts +1 -1
  27. package/src/bridge/steer.ts +1 -1
  28. package/src/bridge/t3-json.ts +2 -2
  29. package/src/bridge/tasks.ts +2 -2
  30. package/src/bridge/thread.ts +1 -1
  31. package/src/bridge/transcript.ts +2 -2
  32. package/src/pstack/brief.ts +1 -1
  33. package/src/pstack/child.ts +50 -75
  34. package/src/pstack/models.ts +2 -2
  35. package/src/pstack/overlay.ts +251 -0
  36. package/src/pstack/resources.ts +16 -2
  37. package/src/pstack/results.ts +1 -1
  38. package/src/pstack/sandbox.ts +253 -0
  39. package/src/pstack/session.ts +4 -24
  40. package/tstack/LICENSE +21 -0
  41. package/tstack/README.md +53 -0
  42. package/tstack/skills/babysit-pr/SKILL.md +117 -0
  43. package/tstack/skills/babysit-pr/scripts/pr-wait +556 -0
  44. package/tstack/skills/council/SKILL.md +56 -0
  45. package/tstack/skills/file-pr/SKILL.md +50 -0
  46. package/tstack/skills/full-send/SKILL.md +123 -0
  47. package/tstack/skills/full-send/agents/openai.yaml +4 -0
  48. package/tstack/skills/full-stop/SKILL.md +47 -0
  49. package/tstack/skills/full-stop/agents/openai.yaml +4 -0
  50. package/tstack/skills/leaving-pr-comments/SKILL.md +44 -0
  51. package/tstack/skills/leaving-pr-comments/agents/openai.yaml +4 -0
  52. package/tstack/skills/modernize/SKILL.md +102 -0
  53. package/tstack/skills/modernize/agents/openai.yaml +4 -0
  54. package/tstack/skills/sol-loop/SKILL.md +119 -0
  55. package/tstack/skills/takeover/SKILL.md +42 -0
  56. package/tstack.ts +21 -0
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: full-send
3
+ description: Trigger this if the user says 'full send'.
4
+ ---
5
+
6
+ # Full Send
7
+
8
+ If the user triggered this, it's because they are not watching this thread, and
9
+ they want you to complete the work end-to-end autonomously. Your updates and
10
+ your final message go unread until long after you stop. You own the work from
11
+ its current state to a merged PR.
12
+
13
+ If the user did not explicitly request "full send" in some clear way, do not
14
+ assume full autonomy. If they did, everything below applies.
15
+
16
+ The user grants you permission to:
17
+
18
+ - Merge the PR once the merge gate passes.
19
+ - Force-push the PR's own branch with `--force-with-lease` after a rebase.
20
+ - Use the test methods that Proof needs, without asking first.
21
+
22
+ ## Testing permission
23
+
24
+ A "full send" request is the permission. If a project file or other
25
+ instruction says to ask before a test method, or to leave testing to the
26
+ user, this request replaces that rule for this task.
27
+
28
+ That includes ask-first rules for computer use, browser automation,
29
+ simulators and devices, running the app or a dev server, screenshots, and
30
+ visual checks. Use the method that gives direct proof. List it in the
31
+ report.
32
+
33
+ Rules about how to test still apply. Follow rules that name the correct
34
+ command, fixture, or check. This permission only removes the ask-first or
35
+ leave-it-to-the-user step. If a preferred method cannot prove the change,
36
+ use a gated method under this permission.
37
+
38
+ It covers only the tests needed for this task. It does not add permission
39
+ for the steps under "Asking the user", such as production changes or data
40
+ deletion. It also does not bypass a harness or system approval prompt if
41
+ one appears.
42
+
43
+ ## Steps
44
+
45
+ 1. **Finish the change.** Complete the goal from the user's request with the
46
+ smallest change that works. Fix the case that happened, not every case
47
+ that could. If you are on the default branch, create a branch first.
48
+ 2. **Prove it.** Get proof for every change you made. See "Proof".
49
+ 3. **Get feedback.** Use the `sol-loop` skill to verify changes.
50
+ 4. **File the PR** with the `file-pr` skill. Rebase onto the latest default
51
+ branch first. Add one short line to the description that says how you proved
52
+ the change.
53
+ 5. **Babysit the PR** with the `babysit-pr` skill. Fix real findings and CI
54
+ failures. Get proof for each fix before you push it.
55
+ 6. **Merge** when the merge gate passes.
56
+ 7. **Report** in your final message: the PR link, the merge commit, your proof,
57
+ and each decision you made for the user.
58
+
59
+ Stay active from step 1 to step 7. If you end your turn while checks or bots are
60
+ pending, the work stops, because nobody will prompt you again. Wait with the
61
+ watcher from `babysit-pr`, so something wakes you when the PR changes. In T3
62
+ Code that is `watch_pull_request`. If you stop before the merge, call
63
+ `unwatch_pull_request` first.
64
+
65
+ ## Proof
66
+
67
+ Proof is evidence you observed yourself in this session: command output, a
68
+ reproduction, a screenshot. Use the most direct proof the change allows:
69
+
70
+ - Reproduce the original failure, apply the fix, then watch the same
71
+ reproduction pass.
72
+ - Run the checks that the repo's CI runs (typecheck, lint, tests).
73
+ - Add one focused test that fails without the fix, when the behavior has none
74
+ and the repo has a test setup.
75
+ - For UI and runtime behavior, run the app and look at the change. Green mocked
76
+ tests do not prove that the user experience works. Attach screenshots to the
77
+ PR when they help and you have a way to upload them.
78
+
79
+ When you cannot find a way to prove a change, you do not have full confidence.
80
+ Ask the user.
81
+
82
+ ## Merge gate
83
+
84
+ Full confidence means all of these are true on the latest commit:
85
+
86
+ - Your proof covers every change in the diff.
87
+ - Required checks are green.
88
+ - Review bots have finished, and each finding is fixed or dismissed with a
89
+ written reason.
90
+ - No human review still requests changes.
91
+ - The branch is up to date with the default branch, and GitHub reports it as
92
+ mergeable.
93
+
94
+ Merge with the method the repo uses. Check the allowed methods and recent merged
95
+ PRs. If the repo uses a merge queue or auto-merge, stay until GitHub reports the
96
+ PR as merged. Merge through branch protection as configured. Never use `--admin`
97
+ or other bypasses. You can ignore automated reviews that request "needs human
98
+ review" if you have high confidence in your changes.
99
+
100
+ ## Asking the user
101
+
102
+ A question in a normal message goes unseen, and the thread looks done. To ask
103
+ the user something, use the harness's question tool so the thread shows that
104
+ it is waiting: `AskUserQuestion` in Claude Code, `request_user_input` in Codex,
105
+ or the question tool your harness has. Put all the context in the question:
106
+ the PR link, what blocks you, and the options with your recommendation first.
107
+
108
+ Ask only when you cannot continue alone:
109
+
110
+ - You cannot prove the change.
111
+ - The merge gate cannot pass, and you cannot fix that yourself.
112
+ - The next step is outside the grant above: deleting data, touching production,
113
+ changing things outside the repo, closing a PR, or force-pushing any other
114
+ branch.
115
+ - The goal is ambiguous in a way that changes the result.
116
+ - Another PR makes this one obsolete.
117
+
118
+ Decide everything else yourself with sensible defaults, and list those decisions
119
+ in the report.
120
+
121
+ If no question tool is available, or the tool returns no answer, take the safe
122
+ path: leave the PR open and unmerged, and start your final message with the
123
+ question.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Full Send"
3
+ short_description: "Prove, file, babysit, and merge a PR unattended"
4
+ default_prompt: "Use $full-send to take this to a merged PR. I am not watching this thread."
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: full-stop
3
+ description: Trigger this if the user says 'full stop', even as a closing "Full stop." that reads like emphasis.
4
+ ---
5
+
6
+ # Full Stop
7
+
8
+ Do the same work as `full-send`, but stop with the PR ready for the user to merge.
9
+ Never merge it.
10
+
11
+ Read [full-send](../full-send/SKILL.md) and follow its workflow, proof rules,
12
+ review, and babysitting steps. An explicit "full stop" request authorizes that
13
+ work without a separate "full send" request. That includes full-send's
14
+ testing permission. A "full stop" request is the permission for the test
15
+ methods Proof needs, even when a project file says to ask first, for
16
+ example before computer use. Use those methods directly. Its merge
17
+ permission does not apply. The overrides below take precedence.
18
+
19
+ ## No merging
20
+
21
+ You may commit, push, rebase, fix conflicts, and use `--force-with-lease` on
22
+ this task's branch. Never merge, enable auto-merge, enter a merge queue, push
23
+ to the default branch, bypass branch protection, or delegate those actions.
24
+
25
+ Disable existing auto-merge and remove the PR from any merge queue before
26
+ work begins; check again before each push. Report these changes. If you
27
+ cannot prevent automatic merging, report the blocker before proceeding.
28
+
29
+ ## Stop at the gate
30
+
31
+ Use full-send's merge gate as the readiness check. Replace its merge and
32
+ final report steps with a handoff. Proof and review must cover the final diff;
33
+ recheck behavior changes and meaningful conflict fixes before handoff.
34
+
35
+ Fetch the target branch and check the live PR's head, base, checks, reviews,
36
+ and mergeability. Confirm it is open, not a draft, and not set to merge
37
+ without the user. If someone else merged it, report that instead.
38
+
39
+ - **Ready to merge:** the merge gate passes. Leave the PR open and unmerged.
40
+ - **Waiting for required approval:** only human approval remains. Confirm
41
+ that this is the actual blocker.
42
+ - **Blocked:** explain what prevents readiness, what you tried, and what is
43
+ needed. Follow full-send's rules for asking the user.
44
+
45
+ In T3 Code, call `unwatch_pull_request` before the handoff or a question.
46
+ Report the PR link, final head, verdict, proof, reviewer outcome, and remaining
47
+ risks. State whether the PR is still open and unmerged.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Full Stop"
3
+ short_description: "Prove, review, and prepare a PR without merging"
4
+ default_prompt: "Use $full-stop to make this PR ready for me to merge."
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: leaving-pr-comments
3
+ description: Use whenever leaving comments on GitHub.
4
+ ---
5
+
6
+ # Leaving PR Comments
7
+
8
+ Prefix every agent-authored comment left on the user's behalf with this GitHub
9
+ note callout:
10
+
11
+ ```md
12
+ > [!NOTE]
13
+ > 🤖 **<model> responding on behalf of <user>**
14
+
15
+ Actual comment starts here.
16
+ ```
17
+
18
+ Use the verified public name of the model that wrote the comment, and the
19
+ user's name or GitHub login.
20
+
21
+ If the harness does not expose a model name, use the harness name. Do not guess.
22
+
23
+ Before posting, check the entire comment, including quoted text and
24
+ attachments, for secrets and private details.
25
+
26
+ Keep the attribution inside the note and the actual reply outside it. The
27
+ context line must start with the robot emoji. Do not add a horizontal rule,
28
+ Setext underline, heading, signature footer, or a second attribution.
29
+
30
+ Apply this format to top-level PR comments, inline review comments, replies to
31
+ bots or reviewers, and written explanations used before resolving or
32
+ dismissing feedback. Do not add it to PR descriptions, commit messages, or text
33
+ the user explicitly asked to post verbatim without attribution.
34
+
35
+ Write the comment itself in a direct style:
36
+
37
+ - Lead with the conclusion.
38
+ - Cite the relevant code, behavior, check, or reproduction.
39
+ - Keep it concise and avoid filler, canned thanks, or status narration.
40
+ - Distinguish verified facts from judgment.
41
+
42
+ Preview the final Markdown before posting so quoting and blank lines render as
43
+ shown. After posting, verify that GitHub returned the comment or review URL.
44
+ Resolve a review thread only after its response was posted successfully.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Leaving PR Comments"
3
+ short_description: "Format agent-authored GitHub PR comments"
4
+ default_prompt: "Use $leaving-pr-comments when posting this comment on my behalf."
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: modernize
3
+ description: >-
4
+ For getting old prs up to date. Use when asked to rebase a pr or
5
+ "modernize".
6
+ ---
7
+
8
+ # Modernize
9
+
10
+ Modernize the idea, not just the branch. A clean rebase does not prove that the
11
+ PR still belongs in the product.
12
+
13
+ ## Guardrails
14
+
15
+ - Always check to make sure you have pulled latest origin for your branch, main
16
+ branch, and any other branch related to your work before starting.
17
+ - Treat existing worktree changes as user-owned. Use a disposable worktree when
18
+ the active worktree is dirty or is being used for other work.
19
+ - Modernizing authorizes rebasing and updating the PR branch. It does not
20
+ authorize merging, closing, changing the base branch, or expanding scope.
21
+ - Never use an unqualified force push. Update a rebased branch with
22
+ `--force-with-lease` against the head SHA observed before the rebase.
23
+ - Do not post a PR comment unless the user asked for one. Use the
24
+ `leaving-pr-comments` skill for every comment posted on the user's behalf.
25
+
26
+ ## Establish the PR's intent
27
+
28
+ Resolve the PR and record its URL, state, base, head repository and branch,
29
+ current head SHA, author, checks, and review state. Read the title, body, linked
30
+ issues, commits, review threads, and complete diff. State the smallest coherent
31
+ goal the PR was trying to accomplish before judging its implementation.
32
+
33
+ Fetch the latest remote base and PR head. Use the PR's actual base branch,
34
+ usually `main`, rather than assuming the local branch is current. Record the
35
+ merge base so the original PR and subsequent base-branch changes can be
36
+ compared separately.
37
+
38
+ ## Check what changed around it
39
+
40
+ Inspect commits and diffs added to the base branch since the PR diverged. Search
41
+ merged and open PRs when titles, code paths, or behavior suggest a replacement
42
+ or competing implementation.
43
+
44
+ Look beyond overlapping lines:
45
+
46
+ - Has the same user-facing problem already been solved?
47
+ - Did APIs, types, schemas, dependencies, or architectural boundaries change?
48
+ - Do both sides now claim ownership of the same behavior or invariant?
49
+ - Was the code being changed deleted, moved, or intentionally simplified?
50
+ - Would landing the PR restore an old behavior or create two ways to do the
51
+ same thing?
52
+ - Is the original benefit still large enough to justify the maintenance cost?
53
+
54
+ Do not describe a PR as current merely because Git reports no conflicts.
55
+
56
+ ## Choose a disposition before pushing
57
+
58
+ Use one of these recommendations:
59
+
60
+ - **MODERNIZE**: the goal is still useful and the implementation remains the
61
+ right shape. Rebase, resolve conflicts, test, and update the branch.
62
+ - **REWORK**: the goal is still useful, but a mechanical rebase would preserve
63
+ the wrong implementation. Explain the smallest credible rewrite and stop
64
+ before pushing unless the user also asked for that rework.
65
+ - **CLOSE**: the PR is superseded, obsolete, directionally wrong, or no longer
66
+ worth its cost. Cite concrete evidence and stop. Do not spend time rebasing an
67
+ obsolete branch, and do not close it without explicit permission.
68
+
69
+ Be willing to recommend `CLOSE`. Age alone is not evidence, and sunk effort is
70
+ not a reason to keep a PR alive.
71
+
72
+ ## Rebase without losing intent
73
+
74
+ For a `MODERNIZE` disposition:
75
+
76
+ 1. Create a safe local branch or disposable worktree at the recorded PR head.
77
+ 2. Rebase its commits onto the freshly fetched base branch.
78
+ 3. Resolve each conflict according to the PR's current intent and the base
79
+ branch's newer invariants. If a conflict reveals a product or architecture
80
+ disagreement, stop and reconsider the disposition instead of guessing.
81
+ 4. Compare the pre-rebase and post-rebase commit series with `git range-diff`
82
+ and inspect the final diff. Confirm that no intentional behavior disappeared
83
+ and no already-landed behavior was reintroduced.
84
+ 5. Run the repository's focused checks for the touched area. Distinguish real
85
+ failures from pre-existing or infrastructure failures.
86
+ 6. Push with `--force-with-lease` tied to the previously observed remote head.
87
+ If the lease fails, fetch and reassess rather than overwriting new work.
88
+
89
+ Do not merge the PR.
90
+
91
+ ## Report
92
+
93
+ Lead with `MODERNIZE`, `REWORK`, or `CLOSE` and the reason. Then summarize:
94
+
95
+ - meaningful changes on the base branch;
96
+ - conceptual conflicts or confirmation that none were found;
97
+ - the rebase and push result, if performed;
98
+ - checks run and their results;
99
+ - the remaining decision or work, with a link to the PR.
100
+
101
+ Separate observed facts from judgment. Say what could not be verified instead
102
+ of manufacturing confidence.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Modernize PR"
3
+ short_description: "Rebase and reassess an aging pull request"
4
+ default_prompt: "Use $modernize to rebase this PR on its current base, check for conceptual conflicts, and tell me honestly whether it should stay open."
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: sol-loop
3
+ description: Use when the user says "sol loop".
4
+ ---
5
+
6
+ # sol-loop
7
+
8
+ This is a workflow for making your code changes more correct before (or
9
+ sometimes after) filing a pull request. tl;dr - use OpenAI's GPT Sol to review
10
+ your code in a loop.
11
+
12
+ Make the most minimal possible changes to appease the Sol reviewers. Be careful
13
+ of scope creep and don't be scared to push back.
14
+
15
+ ## Budget
16
+
17
+ - Default: 3 rounds total. Round 1 is full. Later rounds check only
18
+ changed code and open findings.
19
+ - Extend to 5 only for security, permissions, auth, data loss, or
20
+ state/concurrency, while a blocker or should stays open with evidence. Or when
21
+ the user asks.
22
+ - Stop early if a round returns only nits. Declined nits and comment,
23
+ doc, or format-only fixes need no new round.
24
+ - One reviewer only. Sol must not start subagents or reviewers.
25
+ - Keep a ledger: id, severity, outcome, usage if returned. Never guess it.
26
+
27
+ ## 1. Scope
28
+
29
+ Run `git status --short`. Do not stash, discard, or include unrelated
30
+ changes. Limit review to the change paths if they separate cleanly.
31
+ Otherwise stop and ask.
32
+
33
+ Find the base after `git fetch origin`:
34
+
35
+ - PR: `gh pr view <n> --json baseRefName,headRefOid`. Check out the branch
36
+ only if clean. Confirm `HEAD` is the PR head, or ahead only by this
37
+ change. Base: `git merge-base HEAD origin/<baseRefName>`.
38
+ - Local: `git merge-base HEAD origin/<default-branch>`. No remote: a base
39
+ the user names, or `HEAD` for uncommitted changes only.
40
+
41
+ The change is base to working tree in those paths, with untracked files.
42
+ Use one diff command all rounds. State intent and out-of-scope in 1-2
43
+ sentences. Run covering checks. Do not send code this change breaks. Note
44
+ missing or pre-failing checks in the brief.
45
+
46
+ ## 2. Start Sol
47
+
48
+ In T3, call `orchestrator_capabilities`. Pick the latest Sol unless the user
49
+ named a version. Do not hardcode an ID. Record provider, model, and effort
50
+ only if exposed. Use `delegate_task` every round (`role: "review"`,
51
+ `mode: "async"`). Save `taskId`. New `clientRequestId` per round.
52
+ `childThreadId` is storage, not the next target. Do not use
53
+ `t3_thread_send`, `create_threads`, or `t3_thread_launch` for review.
54
+
55
+ If T3 tools are not listed, try one direct capability call. Outside T3, use
56
+ a native Sol subagent and keep its ID. In Claude Code, use a custom subagent
57
+ only if it is set up to run Sol. If no route runs Sol, report the blocker. Do
58
+ not substitute a model.
59
+
60
+ Do not edit scoped files while review runs. Wait for the notice. Do not
61
+ poll or start a second reviewer. Timeout, error, or no reply is not
62
+ approval. On failure, cancel, verify stop, restart with the ledger.
63
+
64
+ Round 1 brief (T3 children get no history):
65
+
66
+ ```
67
+ Review only. Do not edit, commit, push, comment on PRs, or start subagents.
68
+ Repo: <abs path> Base: <sha> Intent: <intent> Out of scope: <scope> Checks: <results>
69
+ See: git diff <base> [-- <paths>]; git status --short (read untracked).
70
+ Read surrounding code. Find bugs, broken callers, mismatch with intent.
71
+ Skip style unless it hides a bug. Hold to the smallest change. Flag code,
72
+ tests, or guards the intent does not need. Other paths, rare cases, small
73
+ perf, extra compat: nits.
74
+ blocker = intended case wrong. should = real bug callers will hit, in intent. nit = rest.
75
+ Reply:
76
+ VERDICT: APPROVE or CHANGES
77
+ S1 [blocker|should|nit] <file>:<line> <claim>. Fix: <suggestion> (stable ids)
78
+ ```
79
+
80
+ ## 3. Answer findings
81
+
82
+ Check each finding and severity yourself. Another path, rare case, or
83
+ small cost is a nit, whatever label it came with.
84
+
85
+ - Agree: smallest fix. Prefer delete or narrow over new lock, cache,
86
+ helper, or option. Fix the case that happened. Add one focused test
87
+ that fails without the fix, if intent needs it.
88
+ - Disagree: say why, with evidence (file:line, test, output).
89
+ - Out of scope or nit: decline in one line. List as follow-up.
90
+
91
+ Update the ledger. Re-run checks and `git diff --shortstat <base>`. If
92
+ review grew the diff, cut first. Do not agree just to end the loop.
93
+
94
+ ## 4. Next round
95
+
96
+ Start one only if budget remains and a blocker or should is open, behavior code
97
+ changed, or approval does not cover the current behavior diff. Use a fresh
98
+ `delegate_task` in T3, or follow up the saved native ID. Send the round 1 brief,
99
+ the ledger (`fixed:` / `disagree:` / `declined:` + evidence), the same base
100
+ diff, and the change since last round. Tell Sol: open ids and changed code only.
101
+ Mark each old id `resolved` or `still open: <reason>`.
102
+
103
+ ## 5. Stop and ship
104
+
105
+ Agreed: APPROVE on the current behavior diff, no blocker or should open,
106
+ no concern of your own. Stuck: an item stays disputed after two replies,
107
+ or budget ends. Show both sides in 2-3 lines each. The user decides.
108
+ Budget end is not approval.
109
+
110
+ Do not push during the loop. Push after agreement only if the user asked
111
+ to push, ship, or update the PR. If you push to a PR, add above the model
112
+ blurb:
113
+
114
+ `Reviewed with sol-loop: <N> rounds with <model>. Sol verdict: approved`.
115
+
116
+ Add `on <effort>` only if verified.
117
+
118
+ Report: rounds, model, what Sol changed, diff size before/after, fixed and
119
+ declined findings with reasons, usage if exposed (else say not), pushed or not.
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: takeover
3
+ description: Take over existing work. Use when the user asks to take over a PR, branch, or agent thread, or requests a takeover.
4
+ ---
5
+
6
+ # Takeover
7
+
8
+ Take responsibility for finishing the original goal while preserving the
9
+ original contributors' credit. Do not defend an implementation just because
10
+ another agent already built it.
11
+
12
+ Read the source PR, branch, or thread, including review findings and the user's
13
+ later corrections. Resolve the handoff to the actual code and current head,
14
+ and account for uncommitted work. Treat the handoff as context, not proof.
15
+
16
+ For a replacement PR, import the original commits onto a new branch and add
17
+ your fixes separately. Honor an explicitly requested in-place or stacked
18
+ continuation instead. Do not overwrite unrelated work or change the original
19
+ PR without authorization.
20
+
21
+ Preserve Git authorship and existing co-author trailers. Credit the original
22
+ contributors in the PR description and link the original PR when there is one.
23
+ If the work will be squashed, preserve human author/co-author credit in the
24
+ merge commit too, using verified identities rather than guessed emails. Model
25
+ attribution is not a substitute for contributor credit.
26
+
27
+ Use `modernize` to update the continuation against its intended base and
28
+ current architecture. Rework what is necessary to finish the same goal, not
29
+ unrelated features. Simplify the implementation without dropping intended
30
+ behavior or surfaces. Recheck the source PR too: it may have improved while
31
+ you were working.
32
+
33
+ Independently verify the original failure and realistic workflows, following
34
+ repository guidance and permissions. Green mocked tests do not prove the user
35
+ experience works. State what remains unverified.
36
+
37
+ When the requested finish includes a PR, use `file-pr` to file or update it,
38
+ then `babysit-pr` rather than stopping at creation. Use `leaving-pr-comments`
39
+ for replies. Merge or close the original PR only when authorized.
40
+
41
+ Report what you inherited, what you changed, how you verified it, how credit
42
+ was preserved, and any remaining decision.
package/tstack.ts ADDED
@@ -0,0 +1,21 @@
1
+ import { existsSync } from "node:fs";
2
+ import path from "node:path";
3
+
4
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
5
+
6
+ // Theo Browne's tstack skills, vendored under tstack/. This extension only
7
+ // serves their skill directory. It imports nothing from src/bridge or
8
+ // src/pstack, so the skills stay available when either extension is off.
9
+ const tstackExtension = (pi: ExtensionAPI): void => {
10
+ const skillsDir = path.join(
11
+ path.resolve(import.meta.dirname),
12
+ "tstack",
13
+ "skills"
14
+ );
15
+
16
+ pi.on("resources_discover", () => ({
17
+ skillPaths: existsSync(skillsDir) ? [skillsDir] : [],
18
+ }));
19
+ };
20
+
21
+ export default tstackExtension;