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.
- package/README.md +5 -1
- package/overlay/overlay.json +118 -0
- package/package.json +15 -6
- package/pstack/skills/architect/SKILL.md +1 -1
- package/pstack/skills/arena/SKILL.md +1 -1
- package/pstack/skills/how/SKILL.md +1 -1
- package/pstack/skills/interrogate/SKILL.md +1 -1
- package/pstack/skills/poteto-help/SKILL.md +1 -1
- package/pstack/skills/poteto-mode/SKILL.md +4 -4
- package/pstack/skills/poteto-mode/brief.md +4 -4
- package/pstack/skills/poteto-mode/playbooks/autopilot-full.md +1 -1
- package/pstack/skills/poteto-mode/playbooks/orchestrate.md +1 -1
- package/pstack/skills/reflect/SKILL.md +1 -1
- package/pstack/skills/setup-pstack/SKILL.md +3 -3
- package/pstack/skills/statechart/scripts/run.ts +1 -1
- package/pstack/skills/swarm/SKILL.md +1 -1
- package/pstack/skills/why/SKILL.md +1 -1
- package/src/bridge/accounts.ts +2 -2
- package/src/bridge/ask.ts +2 -2
- package/src/bridge/bash-timeout.ts +1 -1
- package/src/bridge/config.ts +10 -2
- package/src/bridge/plan.ts +1 -1
- package/src/bridge/resume.ts +2 -2
- package/src/bridge/state.ts +2 -2
- package/src/bridge/steer-judge.ts +2 -2
- package/src/bridge/steer-transcript.ts +1 -1
- package/src/bridge/steer.ts +1 -1
- package/src/bridge/t3-json.ts +2 -2
- package/src/bridge/tasks.ts +2 -2
- package/src/bridge/thread.ts +1 -1
- package/src/bridge/transcript.ts +2 -2
- package/src/pstack/brief.ts +1 -1
- package/src/pstack/child.ts +50 -75
- package/src/pstack/models.ts +2 -2
- package/src/pstack/overlay.ts +251 -0
- package/src/pstack/resources.ts +16 -2
- package/src/pstack/results.ts +1 -1
- package/src/pstack/sandbox.ts +253 -0
- package/src/pstack/session.ts +4 -24
- package/tstack/LICENSE +21 -0
- package/tstack/README.md +53 -0
- package/tstack/skills/babysit-pr/SKILL.md +117 -0
- package/tstack/skills/babysit-pr/scripts/pr-wait +556 -0
- package/tstack/skills/council/SKILL.md +56 -0
- package/tstack/skills/file-pr/SKILL.md +50 -0
- package/tstack/skills/full-send/SKILL.md +123 -0
- package/tstack/skills/full-send/agents/openai.yaml +4 -0
- package/tstack/skills/full-stop/SKILL.md +47 -0
- package/tstack/skills/full-stop/agents/openai.yaml +4 -0
- package/tstack/skills/leaving-pr-comments/SKILL.md +44 -0
- package/tstack/skills/leaving-pr-comments/agents/openai.yaml +4 -0
- package/tstack/skills/modernize/SKILL.md +102 -0
- package/tstack/skills/modernize/agents/openai.yaml +4 -0
- package/tstack/skills/sol-loop/SKILL.md +119 -0
- package/tstack/skills/takeover/SKILL.md +42 -0
- 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,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,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,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,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;
|