cross-review
Skill2 starsChanged 10 days agoMITView on GitHub
Involve a partner agent from the other model provider in T3 Code to review plans and results, after a budget check of the partner's quota. Use before substantial, risky, or security-relevant work in T3 Code, after bug fixes and medium code changes, when the user says "with partner" or "without partner", or when choosing whether a cross-provider review is needed.
25 other projects use a version of this.
Adopted by
Most recently taken up by
- isanchez-aguilar/relayrace-aitheir own version, first seen Nov 8, 2026
- NemesLaszlo/claude-code-harnesstheir own version, first seen Nov 8, 2026
- ytil/skillstheir own version, first seen Nov 1, 2026
- sentimony/skillstheir own version, first seen Nov 1, 2026
- coder-xieshijie/dev-skillstheir own version, first seen Nov 1, 2026
- NemesLaszlo/Agent-Collectiontheir own version, first seen Nov 1, 2026
Used with
Projects with it also use unslop and handoff.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
photon-groveSkillunslop
Detects and rewrites generic, overly polished, or AI-sounding prose while preserving meaning. Use when the user asks to "unslop", humanize, de-AI, tighten, or review whether writing sounds generated.
Also in 4 projects that use this
MicrosoftSkillhandoff
Compact the current conversation into a handoff document for another agent to pick up.
Also in 3 projects that use this
Other versions25 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 25
- MiaoDX/intuitive-flow★ 48same name
- webpro/skills★ 18same name
- sohei56/maul-team★ 17same name
- ruodou233/cross-review★ 14same name
- sentimony/skills★ 7same name
- coder-xieshijie/dev-skills★ 5same name
- broomva/skills★ 4same name
- qwwiwi/agentos-skills-public★ 4same name
- vardan6/trackline★ 2same name
- abedegno/bircher★ 1same name
15 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- file-prSkill
- html-communicationSkill
- html-emailSkill
- project-mapSkill
- session-transferSkill
- v3-ui-styleSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 0 are common, 8 are distinctive, and 9 are very specific to this project.
0
Common
Most of the 18 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 29
Run the gate before every delegate_task call, not once per task.
- Distinctive: line 31
When presenting a revised plan for approval, present the full revised plan, not the changes since the earlier version.
- Very specific: line 35
Call orchestrator_capabilities first.
- Very specific: line 43
When the user's instructions name an instance but no model, use the strongest model that instance lists, at high.
- Very specific: line 45
Always set the reasoning option explicitly.
- Very specific: line 47
If the default instance or model is missing, has canRunCrossProviderChildTask: false, or lists constraints, do not pick another account on …
- Distinctive: line 53
Run it on Windows (no installs needed):
- Distinctive: line 86
Read-only rules: "Do not edit files, commit, push, or run commands that change state.
- Distinctive: line 98
Every finding has one severity.
- Distinctive: line 130
Do not accept a finding only to end the loop.
- Very specific: line 134
Use a new delegate_task call for each round, with role: "review", mode: "async", and target set to the partner providerInstanceId, model, …
- Very specific: line 136
Never continue a review by sending to the returned childThreadId.
- Very specific: line 138
Leave runtimeMode unset. It is not a read-only switch, and the read-only rules belong in the task text.
- Very specific: line 146
When the round budget runs out, stop delegating.
- Distinctive: line 153
If the retry also fails, tell the user and let them decide whether to continue solo.
- Distinctive: line 154
Never silently drop to a lower tier, and never start a second review task while one is still running.
- Distinctive: line 160
Write it in plain language, as one person explaining to another: short sentences, no jargon, and a technical term only where no plain word …
“Common” is measured: kept by at least 6 in 10 of the 18 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Cross review
One main agent owns the work, the decisions, and the report to the user. A partner agent from the other provider reviews the plan, the result, or both, through T3 Code's delegate_task. Partner agreement never replaces the user's approval.
This skill needs an agent running inside a T3 Code thread with the t3-code MCP tools. Outside T3, say that cross review is unavailable and continue solo.
Choose the tier
Risk beats the type of work at every tier.
| Tier | When | Partner does |
| Solo | A spot task with limited, clear impact. | Nothing. |
| Review-only | Bug fixes and medium code changes. | Reviews the result. |
| Full | Anything that needs a plan under the "substantial work, plan first" rule. Always, even when tiny: security, auth, migrations, data deletion, irreversible actions, CI or release, public API, and changes to agent instructions or skills. | Reviews the plan, then the result. |
The user's words win over the table: "without partner" means Solo, and "with partner" means at least Review-only.
Order of work
- Review-only: execute, run the budget gate, partner reviews the result, fix, report.
- Full: write the plan, run the budget gate, partner reviews the plan, revise it, present the revised plan to the user when approval is needed, execute, run the budget gate again, partner reviews the result, fix, report.
Run the gate before every delegate_task call, not once per task. Plan and result reviews can be hours apart.
When presenting a revised plan for approval, present the full revised plan, not the changes since the earlier version.
Choose the partner
Call orchestrator_capabilities first. It reports inheritedProviderInstanceId (the main agent) and every provider instance with its driverKind, models, and options. The partner's driverKind must differ from the main agent's. The rule is symmetric.
Pick the partner instance, model, and reasoning level in this order:
- What the user names in the current request.
- The default partner for the main agent's provider in the user's own instructions, such as a global
CLAUDE.mdorAGENTS.md. - Neither exists: list the eligible instances from
orchestrator_capabilitiesand ask the user once which one to use. Suggest recording the answer in their instructions.
When the user's instructions name an instance but no model, use the strongest model that instance lists, at high.
- Always set the reasoning option explicitly. Defaults differ per model and are often
low. - Option ids differ per driver:
reasoningEffortfor Codex,effortfor Claude. Use the ids thatorchestrator_capabilitieslists. - If the default instance or model is missing, has
canRunCrossProviderChildTask: false, or lists constraints, do not pick another account on your own. Tell the user what is unavailable and ask which instance to use, or whether to continue solo.
Budget gate
The script reads only the usageLimits section of T3's per-instance cache, ~/.t3/caches/<providerInstanceId>.json. It never prints anything else from that file, which also holds account data. Do not open that file yourself.
Run it on Windows (no installs needed):
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "<skill-directory>/scripts/check-partner-budget.ps1" -ProviderInstanceId <partner instance>On macOS or Linux, use pwsh -NoProfile -File "<skill-directory>/scripts/check-partner-budget.ps1" -ProviderInstanceId <partner instance>.
Replace <skill-directory> with the directory that contains this SKILL.md. The script prints one JSON object with result, reason, providerInstanceId, windowId, usedPercent, resetsAt, checkedAt, and dataAgeMinutes.
result | Exit code | Meaning | Action |
go | 0 | Under 70% used, or the window resets within 72 hours. | Delegate. |
ask | 1 | At least 70% used and the reset is more than 72 hours away. | Ask the user before delegating. Show usedPercent and resetsAt. Wait for the answer. |
unknown | 2 | The budget could not be verified. | Delegate, and tell the user in one line: budget not verified, with the reason. |
Decide on the JSON result. If stdout has no JSON object, treat it as unknown with reason no-output, whatever the exit code. The exception is invalid-instance-id, which is a caller mistake: fix the id from orchestrator_capabilities and run the gate again.
How it decides:
- It uses the account-wide window:
idseven_dayif present, otherwise the onlyweeklywindow, otherwise the onlymonthlywindow. More than one candidate givesunknown. The session window never decides. goreasons:below-threshold,reset-soon. Theaskreason:high-usage-far-reset.unknownreasons:file-missing,file-unreadable,usage-limits-missing,checked-at-invalid,stale(cache older than 15 minutes),checked-at-in-future(more than 5 minutes ahead of the local clock),window-missing,window-ambiguous,used-percent-invalid,resets-at-invalid,reset-passed,invalid-instance-id,invalid-now,internal-error.- The cache is private to T3 and undocumented. A repeated
unknownusually means T3 changed its format. Report it so the script can be fixed. After changing the script, runscripts/tests/test-check-partner-budget.ps1on both PowerShell 5.1 and 7.
Reviewer prompt
The partner gets only the task text, with no history from this thread. Make every prompt self-contained:
- The goal and the user's constraints, in a few lines.
- What to review: the plan text, or the exact diff, such as
git diff <base>..HEADor a list of files and commits. - Unrelated existing changes in the checkout that are not under review.
- For every later round: the ledger (see "Findings ledger") and the change since the previous round.
- Read-only rules: "Do not edit files, commit, push, or run commands that change state. Report only."
- What to return:
- Each finding with an id, a severity (see "Severity"), its location, its impact, and the condition under which it fails.
- Code, tests, guards, or options the goal does not need. Unneeded additions are findings too.
- Risks, better alternatives, and evidence still needed. Do not ask for approval, ask for problems.
- What the partner checked and what it did not check.
- For a sensitive change (see "Severity"): "Look on purpose for defects in rare states: unusual or hostile input, partial failure, retries, concurrency, interrupted runs, old data, and permission edges. For each, describe the failure and a plausible route to it through users, callers, external input, stored data, or supported operations."
- Always: "A tracked working value for a secret-like setting, such as a password, key, token, signing or encryption secret, or connection string with credentials, is a
blocker, whatever its label (fake, dev-only, test, not a secret), its binding (loopback only), or its claimed impact. A file elsewhere that does the same is not a precedent." When the plan or diff sets up or changes a runtime, development, test, or CI environment, or touches secret-like settings, also: "Check that it says how the stack gets each secret. Treat a gap in that, or a breach of any of the following, as ablocker: environment files are tracked only as examples; secrets come from a cryptographically secure random generator, in development once into an ignored owner-only file that is never overwritten, and in test and CI for each run; credentials for external services come from a secret store; the stack refuses to start when a secret is missing or equals a placeholder; a value that was ever committed is public and is never reused, even after it moves to an ignored file, and the user is told it must be replaced wherever it is still in use."
Severity
Every finding has one severity.
| Severity | Meaning |
blocker | The case the change exists for is still wrong, or the change breaks something that worked. |
should | A real defect within the goal that users, callers, or real data will hit. |
nit | Everything else: style, unrelated code paths, defects with no plausible route, small performance costs, extra compatibility. |
blocker and should are material.
The main agent checks each label against the code. Lowering a partner's material finding to nit is a disagreement, not a correction: the ledger keeps the partner's severity with the proposed nit beside it, and the finding stays material and disputed until the partner or the user accepts the change.
Sensitive changes are security, auth, migrations, data deletion, irreversible actions, CI or release, public API, and instructions or skills that control permissions, dangerous actions, recovery, or review. In a sensitive change, rarity never lowers severity: within the review scope, a defect with a plausible route is should or blocker, however rare. When the route is disputed, check it once with available evidence, such as code, a test, or a command. If it stays plausible, the finding stays disputed under the dispute rule.
Findings ledger
Keep one ledger per review (plan or result). Give each finding a stable id, such as P1 in a plan review and R1 in a result review. A finding raised again keeps its first id. Record for each id the severity, the round that raised it, a one-line summary with its location and failure condition, the fix or response with its evidence, and one status:
open: not handled yet.fixed: changed, waiting for the partner to confirm in the next round.resolved: the partner confirmed the fix or accepted the main agent's evidence.disputed: the main agent disagrees, with evidence such as file and line, a test, or command output.declined: not done, with a one-line reason. Only for anit, or for an out-of-scope suggestion whose classification the partner accepted. Disagreement about whether a material finding belongs to the goal staysdisputed.
Later rounds focus on fixed and disputed ids and the change since the previous round. They still report new material defects within the original review scope, including interactions with the change. They do not repeat a resolved or declined finding without new evidence.
Keep the change small
- Fix a finding with the smallest change that resolves it. Prefer a fix that deletes or narrows code over one that adds a helper, option, lock, or cache.
- Decline a suggestion that adds behavior beyond the goal, in one line. Propose it as a follow-up only when it has value beyond this change. The user decides.
- In a sensitive change, fixing a reachable rare-state defect within the review scope is part of the goal, not scope growth. That includes regressions and interactions the change causes. An unrelated defect that existed before follows the out-of-scope rule above.
- In a result review, treat
git diff --shortstat <base>before the first round and after each round of fixes as a signal. When the change grew, remove additions the goal does not need before the next round, and tie the remaining growth to ledger ids. Necessary fixes and tests may grow the change. - Do not accept a finding only to end the loop.
Delegation mechanics
- Use a new
delegate_taskcall for each round, withrole: "review",mode: "async", andtargetset to the partnerproviderInstanceId,model, andoptions. End the turn after the call. The completion notification wakes this thread, so do not poll. - Give each round its own
clientRequestId, such as<task-slug>-plan-r1or<task-slug>-result-r2. Reuse it only to resend the same call when its response was lost. - Never continue a review by sending to the returned
childThreadId. A new round is a newdelegate_taskcall. - Review in the shared checkout.
isolation: "worktree"does not copy uncommitted edits. Do not edit files while a review runs. - Leave
runtimeModeunset. It is not a read-only switch, and the read-only rules belong in the task text.
Rounds and disagreement
- Round budget per review (plan or result): up to 3 at the Review-only tier, up to 5 at the Full tier.
- The review ends when every material finding is
resolved,declined, or escalated under the dispute rule below, and no behavior-changing fix waits for review. Otherwise start another round while budget remains. Mentioning anopenorfixedfinding to the user is not escalation, and an escalated finding blocks the affected work until the user decides. - A fix changes behavior when it changes code paths or data, or, in instructions and skills, what an agent does, may do, or decides. Purely editorial fixes need no new round.
- A dispute exchange is the main agent's reply with evidence, plus the partner's verdict on it in the next round. A material finding still disputed after two exchanges goes to the user with both positions, two or three lines each. Do not spend more rounds on it alone.
- When the round budget runs out, stop delegating. Send every material finding that is neither
resolvednordeclined, and every behavior-changing fix the partner has not reviewed, to the user for a decision. Running out of budget is never an automatic approval. - The main agent decides what to fix. A material disagreement that stays open goes to the user with both positions before the work is called done.
Partner failure
- Whenever this thread wakes while a review is still running (a user message, another notification), call
task_statusfor it. The task is stuck when it has run for more than 30 minutes without a result, or when it waits on a pending question that the reviewer prompt should have answered. - Cancel a stuck task with
task_canceland retry the round once with a newclientRequestId, such as<task-slug>-plan-r1-retry. - If the retry also fails, tell the user and let them decide whether to continue solo.
- Never silently drop to a lower tier, and never start a second review task while one is still running.
Report
The final message is the only one the user is sure to read. It must stand alone: a user who skipped every earlier message, including the plan, the partner's reviews, and the round updates, must understand the whole outcome from it. Restate each point instead of referring back ("as above", "see round 2").
Write it in plain language, as one person explaining to another: short sentences, no jargon, and a technical term only where no plain word does the job. Explain what a finding means for the user, not only its id.
Order:
- Outcome: what changed and what it does now, in a few lines.
- Verification: what was checked and how, and what was not checked.
- Decisions for the user: every escalated or disputed finding with both positions in two or three lines each, and every proposed follow-up.
- Leftovers: uncommitted files, skipped checks, manual steps.
- Review summary, kept short: tier, partner instance and model, gate result, number of rounds, change size before and after a result review, and the ledger as a table (id, severity, status, one-line summary with the fix or reason).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

