pstack-runtime
How pstack-t3 skills delegate, pick models, isolate work, schedule, and verify inside T3 Code through the orchestrator V2 tools.
Skill by creedants
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/creedants-pstack-runtime
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/pstack-runtime- Your home directory (~)
What's inside
- Skill name
pstack-runtime- Description
- How pstack-t3 skills delegate, pick models, isolate work, schedule, and verify inside T3 Code through the orchestrator V2 tools. Read before running any other pstack skill that spawns workers, picks a model, or schedules work.
- License
- MIT
- Instructions
- 243 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (29)
- SKILL.md
- comment-sicko.md · agents/
- poteto-agent.md · agents/
- delegation.md
- failures.md
- gate-review.md
- host.md
- isolation.md
- light.md
- modes.md
- roles.md
- __init__.py · scripts/_roles/
- backup.py · scripts/_roles/
- base.py · scripts/_roles/
- brief.py · scripts/_roles/
- commands.py · scripts/_roles/
- config.py · scripts/_roles/
- mode.py · scripts/_roles/
- panel.py · scripts/_roles/
- problems.py · scripts/_roles/
- resolve.py · scripts/_roles/
- seam.py · scripts/_roles/
- seats.py · scripts/_roles/
- roles.py · scripts/
- threads.md
- verification.md
- waiting.md
- watching.md
- webhooks.md
SKILL.md (first lines)
# pstack-t3 runtime
pstack-t3 runs inside T3 Code. Every provider T3 drives (Claude, Codex, Grok, Cursor, Pi, OpenCode, Muse, ACP agents) gets the same `t3-code` MCP server. This file maps each pstack concept onto those tools, so a skill works the same whatever model runs it.
Tool names may carry a harness prefix, such as `mcp__t3-code__delegate_task` or `mcp__t3_code__delegate_task`. The semantics are the same. If a T3 tool this skill names is not in your tool list, find it with the host's tool search when the host has one, and call it by the name the search returns. When the host has no tool search, call the tool directly. Start with `orchestrator_capabilities`, and do not conclude the tools are missing until a search or a direct call has failed. ACP agents that cannot see the tools use the terminal bridge in [ACP fallback](#acp-fallback).
## On-demand files
| File | Read when |
| --- | --- |
| [roles.md](roles.md) | before resolving seats, weighing seat agreement, writing or validating a roles file, or when `roles.py` prints a note the section does not explain |
| [waiting.md](waiting.md) | before collecting child results or waiting on children |
| [host.md](host.md) | when a thread settles or snoozes, before you install or locate skills, before interpreting `hasPendingChildRuns`, `hasPendingQuestion`, or a `mode: "wait"` return, when a child's question wakes this thread, or for history notes |
| [threads.md](threads.md) | before `t3_thread_configure`, `t3_queue`, `t3_thread_transfer`, `run_scheduled_task_now`, or pausing a finite program's schedule |
| [webhooks.md](webhooks.md) | before creating a webhook schedule, asking for a signing secret, or choosing between a webhook and a polling schedule |
| [secrets.md](secrets.md) | before you ask the user for a secret, or before a shell command needs a token, deploy key, or password |
| [light.md](light.md) | before every spawn in light mode |
| [gate-review.md](gate-review.md) | before reusing a gate verdict |
| [failures.md](failures.md) | on usage limit or after restart |
| [verification.md](verification.md) | before UI or device or CLI verification |
| [delegation.md](delegation.md) | before spawning a child task or writing its brief |
| [modes.md](modes.md) | for the checks every mode keeps |
| [isolation.md](isolation.md) | before isolating a writing child or running a heavy command |
| [watching.md](watching.md) | before linking a PR or waiting on its checks |
## Vocabulary
| pstack says | In T3 |
| --- | --- |
| subagent, worker, delegate, reviewer, runner, judge | A child task created with `delegate_task`, owned by this thread. |
| cloud worker | A child task. T3 children run on this machine, so they can reach local files, browsers, and auth. |
| background, `run_in_background` | `delegate_task` with `mode: "async"`. |
| wait for a worker | A thread with a schedule of its own ends the turn, and its completions wake it. Any other thread keeps a bounded wait with `t3_thread_wait`. Call `task_status` for a result mid-turn. See [waiting.md](waiting.md). |
| cancel a worker | `task_cancel`. |
| model slug, role model | A target `{providerInstanceId, model, options}` from `orchestrator_capabilities`, resolved through roles. See [Roles](#roles). |
| `inherit-parent`, `auto` | `"inherit"`. Omit `target` so the child inherits this thread's provider, model, and options. |
| separate chat, coordinator chat, PR owner thread | A top-level thread from `t3_thread_launch`, only where [Top-level threads](#top-level-threads) allows it. |
| worktree for a worker | A worktree from `delegate_task` with `isolation: "worktree"`, or a `t3_thread_launch` worktree binding for top-level threads. See [Isolation](#isolation). |
| `/loop`, hourly tick, automation, scheduled wakeup | `schedule_task`. See [Scheduling](#scheduling). |
| `scripts/watch-pr`, a poll loop, waiting on CI | `watch_pull_request` on the thread that owns the PR. See [Pull request watching](#pull-request-watching). |
| transcript, chat history, cloud-agent URL | A T3 thread, read with `t3_thread_search` and `t3_thread_read`. |
| control-ui, browser MCP | T3 preview tools: `preview_open`, `preview_snapshot`, `preview_act`, `preview_evaluate`, `preview_recording_start`. `preview_act` takes one `action`: `click`, `type`, `press`, `hover`, `drag`, `select`, `upload`, or `scroll`. `preview_dialog` accepts or dismisses a browser dialog. |
| ask the user (`AskQuestion`) | The host's question tool if it has one, otherwise a short question in the reply. |
| todolist | The host's todo tool if it has one, otherwise a checklist in the work log. |
| PR you opened or now drive | Register it with `link_pull_request`. |
| status page, dashboard, report table, chart | A page published with `html_preview`, then `html_render`, inside a reply already due. See [Visual reports](#visual-reports). |
## Deadlines
A deadline or timebox sets the order of work. It never waives a step. This holds for Autopilot's early red-test-and-PR target, a brigade or Orchestrate timebox, and any "aim for N minutes" in a brief. Start the deliverable the deadline names first, then run every step the playbook prescribes before the next gate, such as `CODE-READY` or the final report. That includes How, Architect, investigation, and the code delegate. The clock is never a `skip:` reason. When the remaining steps cannot fit, stop at a verifiable point and report the steps that remain instead of skipping them. A step that the brief's `Waived by mode:` line names is not a skip, because the mode removed it before the attempt started.
## Delegation
4. A child starts with only its brief. It sees none of this conversation. Put the goal, the exact paths or SHAs, how to verify, and the report shape in the brief. Point at files instead of pasting large context. Write tool steps as plain verbs ("read", "search the repo", "run"), because the child may be a different provider with different tool names. When the role entry `roles.py show` printed for the child's seat has `haikuBrief`, paste its paragraphs unchanged, in order, at the end of the brief, per [Claude Haiku 5.5](#claude-haiku-55). A code-writing child inside a poteto-mode playbook opens with the poteto-agent persona body. Below it, paste unchanged the lines `python3 <pstack-runtime>/scripts/roles.py mode --cwd "$PWD" --playbook <name> --attempt <kind> [--brief-mode <value> | --session-mode light]` prints, per [Modes](#modes). They start with the `Playbook: playbooks/<name>.md` line, such as `Playbook: playbooks/feature.md`, and carry the required `Mode:` line. Write no `Playbook:` line of your own, because a second one fails the check. See [Resolve and carry the mode](#resolve-and-carry-the-mode) for the `Attempt:` and `Waived by mode:` lines. Copy the printed `Mode:` value into `--brief-mode` on the `roles.py show` call that seats the delegate, and pass no other mode flag. Write that brief to a file and run `python3 <pstack-runtime>/scripts/roles.py check-brief <file>` before `delegate_task`. Exit 1 names what is missing. Fix the brief, run the check again, and pass the checked text unchanged. A seat that matches this thread's model, or an edit that looks small, is not a `skip:` reason for the code delegate.
Steps 1 to 3, 5, and 6 live in [delegation.md](delegation.md).
### Permissions
The permission modes live in [delegation.md](delegation.md).
### Failure handling
- A target is rejected: call `orchestrator_capabilities`, then fall back per [Roles](#roles), and say which seat changed and why.
- A child fails or returns nothing usable: proceed with N-1 and record the dropout. Respawn once with a fresh child for a required slice. Never resume a failed child to fix its own work. When the failure carries a provider error, follow the next bullet before that respawn. A failure that reads `Killed: out of memory.` is an out-of-memory kill that T3 reports. Lower the load before you respawn that child. Run fewer children at once, or run builds through the slot in [Local command capacity](#local-command-capacity). Report a second kill as a blocker.
- Check a usage limit only for a failed child that did not return the brief's result. When a failed child's error names a usage limit, follow [failures.md](failures.md#usage-limit) before you respawn it.
- `hasPendingChildRuns` on `task_status` does not mean the child is still running. It reports later turns on the child's thread, even after the task ended, and it does not reopen the task, including a turn you start with `t3_thread_send`. Decide completion by `workState` alone.
- A stalled child (see [Delegation](delegation.md#spawn-and-collect) step 5): first call `t3_pending_request` with `action: "list"` and the child's `childThreadId` as `threadId`. A child with a question that blocks it waits on an answer and is not stalled. Answer it per [Pending requests](#pending-requests), and count its 10 minutes again from the answer. Otherwise read its last items. When its last assistant message holds the result the brief asked for, use that message as the result and call `task_cancel` on the task. When its last item is an approval request that is still waiting, call `task_cancel` and respawn once with no `runtimeMode`. Otherwise call `task_cancel` and respawn once for a required slice.
### Fresh children by default
The fresh-child rule lives in [delegation.md](delegation.md).
## Roles
Roles let one skill run on whatever providers the user has. A role value is a list of seats. Each seat is `"inherit"` or a target.
### Where roles live
Role files and commands live in [roles.md](roles.md#where-roles-live).
### Role names
The role table lives in [roles.md](roles.md#role-names).
### Built-in defaults
The unset-role policy lives in [roles.md](roles.md#built-in-defaults).
### Excluded seats
The exclude rules live in [roles.md](roles.md#excluded-seats).
### Budget
The budget cap lives in [roles.md](roles.md#budget).
### Fallback
The fallback order lives in [roles.md](roles.md#fallback).
### Claude Haiku 5.5
The Haiku brief rule lives in [roles.md](roles.md#claude-haiku-55).
## Modes
pstack-t3 runs each piece of work in `full` or `light` mode. Full mode runs every step as each skill says. Light mode keeps every check that decides whether code lands and cuts the fan-out around it. A skill or playbook that spawns links here. Its light behavior is the row in [light.md](light.md) that names it, and its full behavior is its own text.
### Resolve and carry the mode
`roles.py mode` and `roles.py show` resolve one effective mode. The highest level present wins. The order is the brief, then the session, then the coordinator, then the project file `.pstack/t3-roles.json`, then the user file `roles.json`, then `light`.
- A brief's `Mode:` line is the frozen decision. A child copies that line's bare value into `--brief-mode` on every `roles.py mode` and `roles.py show` call it makes, and passes no other mode flag. It never resolves the mode again.
- The user's words set the session. `$poteto-mode light`, "light mode", or "use light mode" in a request sets this thread to light. "full mode" sets it back. A light session passes `--session-mode light` on every `roles.py` call that has no brief value, except the explicit reflect below.
- With neither, pass no mode flag. The roles files decide. When neither file sets a mode, the default is `light`.
- A user's explicit reflect passes `--session-mode full` on every `roles.py show` call it makes, whatever the session or the roles files say. A call with no mode flag would fall through to a roles file that stores light. The session stays light after it.
Every brief whose child resolves seats or spawns carries the mode. Get the lines from `roles.py mode`, never from memory.From creedants/pstack-t3, MIT.
More from creedants/pstack-t3
- 0.612score
brigade
creedants
Give a project or a focus area its own standing head chef.
SkillAFreshness: A★ 15Claude Code +9 - 0.612score
landing
creedants
Let many agents write to one repository at once without collisions: a per-repository landing contract, path leases claimed before work starts, one queue that…
SkillAFreshness: A★ 15Claude Code +9 - 0.607score
brigade-admin
creedants
Run the executive admin for the brigade coordinators on one repository.
SkillAFreshness: A★ 15Claude Code +9 - 0.607score
pstack-author-skill
creedants
Author, update, or tune a skill so it works under every provider T3 runs (Claude Code, Codex, Grok, Cursor): frontmatter, placement, lean body, and a…
SkillAFreshness: A★ 15Claude Code +9 - 0.586score
how
creedants
Use for "how does X work", code walkthroughs before changing something, and placement / ownership / layering questions ("where should this live", "which…
SkillAFreshness: A★ 15Claude Code +9 - 0.586score
poteto-mode
creedants
poteto's agent style for concise, detailed responses, deliberate subagents, unslopped prose, simple code, and verified work.
SkillAFreshness: A★ 15Claude Code +9 - 0.586score
create-verification-skill
creedants
Generate a project-local verification skill that drives your app the way a user does — any language, framework, or platform.
SkillAFreshness: A★ 15Claude Code +9 - 0.586score
architect
creedants
Sketch types, signatures, and module structure before code, then stay in the loop while implementation fills in.
SkillAFreshness: A★ 15Claude Code +9 - 0.586score
interrogate
creedants
Use for "interrogate", "adversarial review", "multi-model review", "challenge this", "stress test this code", "find blind spots", or "tear this apart".
SkillAFreshness: A★ 15Claude Code +9 - 0.584score
benchmark-checklist
creedants
Vet a perf measurement (limiter, tuning, limits, errors, repeatability, relevance, and whether the work happened) before you report or act on it.
SkillAFreshness: A★ 15Claude Code +9 - 0.584score
make-bot-ui
creedants
Use when building a custom UI (page, dashboard, buttons) that should wake an existing bot over its webhook (for example a Grok Bot or Cursor automation…
SkillAFreshness: A★ 15Claude Code +9 - 0.584score
automate-me
creedants
Use for "automate me", "create/update/refresh my -mode skill", "turn/capture my preferences or working style into a skill", or wanting agents to follow how…
SkillAFreshness: A★ 15Claude Code +9
Signals
- Stars
- 15
- Forks
- 6
- Open issues
- 0
- Last commit (this folder)
- Oct 23, 2026 (7 days ago)
- Last release
- Oct 23, 2026 (6 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/creedants/pstack-t3
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from creedants
- 0.612score
landing
creedants
Let many agents write to one repository at once without collisions: a per-repository landing contract, path leases claimed before work starts, one queue that…
SkillAFreshness: A★ 15Claude Code +9 - 0.612score
brigade
creedants
Give a project or a focus area its own standing head chef.
SkillAFreshness: A★ 15Claude Code +9 - 0.607score
brigade-admin
creedants
Run the executive admin for the brigade coordinators on one repository.
SkillAFreshness: A★ 15Claude Code +9 - 0.607score
pstack-author-skill
creedants
Author, update, or tune a skill so it works under every provider T3 runs (Claude Code, Codex, Grok, Cursor): frontmatter, placement, lean body, and a…
SkillAFreshness: A★ 15Claude Code +9 - 0.586score
how
creedants
Use for "how does X work", code walkthroughs before changing something, and placement / ownership / layering questions ("where should this live", "which…
SkillAFreshness: A★ 15Claude Code +9 - 0.586score
create-verification-skill
creedants
Generate a project-local verification skill that drives your app the way a user does — any language, framework, or platform.
SkillAFreshness: A★ 15Claude Code +9
Cite this page
pstack-runtime skill. Agent Mart. https://agentmart.dev/skills/creedants-pstack-runtime (last updated 2026-10-24)