From bea09b3f53f01deba89fb67e46db36367e131988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20M=2E=20Wo=C5=BAniak?= Date: Mon, 26 Oct 2026 09:17:59 +0100 Subject: [PATCH] Request secrets as files and link cited files in the adapter Adopts two T3 capabilities from the 572cf74 contract. The root requests a secret a shell command needs with request_secret delivery "file", and a child that needs one returns BLOCKED. A reply links each file it cites by absolute path, which opens T3's file viewer, and can embed audio. Release 0.11.3. --- .claude-plugin/marketplace.json | 2 +- package.json | 2 +- plugins/pstack/.claude-plugin/plugin.json | 2 +- plugins/pstack/.codex-plugin/plugin.json | 2 +- plugins/pstack/skills/poteto-mode/references/t3-adapter.md | 4 +++- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index c936822..b3bb531 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "pstack", "source": "./plugins/pstack", "description": "Cursor pstack for T3 Code: poteto-mode, principles, and the verified agent workflows, adapted to T3 orchestration for Claude and Codex.", - "version": "0.11.2", + "version": "0.11.3", "author": { "name": "Lauren Tan (pstack), pmwoz (T3 Code port)" }, diff --git a/package.json b/package.json index c1c9980..9343dc2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "t3-pstack", - "version": "0.11.2", + "version": "0.11.3", "private": true, "type": "module", "scripts": { diff --git a/plugins/pstack/.claude-plugin/plugin.json b/plugins/pstack/.claude-plugin/plugin.json index 79c683e..ca1b4d1 100644 --- a/plugins/pstack/.claude-plugin/plugin.json +++ b/plugins/pstack/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "pstack", "displayName": "pstack", - "version": "0.11.2", + "version": "0.11.3", "description": "Cursor pstack for T3 Code: poteto-mode, principles, and the verified agent workflows, adapted to T3 orchestration for Claude and Codex.", "author": { "name": "Lauren Tan (pstack), pmwoz (T3 Code port)" diff --git a/plugins/pstack/.codex-plugin/plugin.json b/plugins/pstack/.codex-plugin/plugin.json index 8bbf62c..c6e81d8 100644 --- a/plugins/pstack/.codex-plugin/plugin.json +++ b/plugins/pstack/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "pstack", - "version": "0.11.2", + "version": "0.11.3", "description": "Cursor pstack for T3 Code: poteto-mode, principles, and the verified agent workflows, adapted to T3 orchestration for Claude and Codex.", "author": { "name": "Lauren Tan (pstack), pmwoz (T3 Code port)" diff --git a/plugins/pstack/skills/poteto-mode/references/t3-adapter.md b/plugins/pstack/skills/poteto-mode/references/t3-adapter.md index c8bb07a..e3509ff 100644 --- a/plugins/pstack/skills/poteto-mode/references/t3-adapter.md +++ b/plugins/pstack/skills/poteto-mode/references/t3-adapter.md @@ -112,7 +112,9 @@ T3 has no cloud agents. Every lane is a local `delegate_task` child. A child sha - **`AskQuestion`.** On Claude, use `AskUserQuestion`. On Codex, use `request_user_input` only when the session exposes it and allows it in the current mode (Codex limits it to plan mode). Otherwise ask one plain-text question with labeled options. - **A delegated child never asks the user.** It returns `BLOCKED` with the question, and the root asks. A child that asks anyway waits, and `t3_thread_read` on its `childThreadId` shows a nonzero `pendingRequestCount`. Find the question with `t3_pending_request_list` and answer it with `t3_pending_request_respond`, both with `threadId` set to the child's `childThreadId`. Answer it yourself when the brief or the run settles it. Otherwise ask the user and pass on the answer. -- **Visuals** (charts, tables, mockups, Cursor's `/visualize`). Build a self-contained page, check it with `html_preview`, then publish it with `html_render` from the root. A child's render lands in the child's thread. Show verification screenshots the same way, for example a before and after grid, before the reply that cites them. A reader who clicks an image outside a link or button opens it full size in T3's image viewer, so a grid can show screenshots small. Write each image as one complete absolute path, in `src` or as a JavaScript string. T3 does not inline a path the page builds from parts. T3 inlines local images into the page, so the thread keeps them after the worktree is gone. To embed a screenshot or a video in the reply itself, as `/ketchup` asks, write it as a Markdown image whose target is the file's absolute path. T3 renders both. Keep that file in the work dir (Worktrees section), so it outlives the worktree. A Mermaid fence in the reply renders as a diagram. A generated image needs an image tool from your provider. T3 has none, so without one draw a diagram or chart instead. +- **Visuals** (charts, tables, mockups, Cursor's `/visualize`). Build a self-contained page, check it with `html_preview`, then publish it with `html_render` from the root. A child's render lands in the child's thread. Show verification screenshots the same way, for example a before and after grid, before the reply that cites them. A reader who clicks an image outside a link or button opens it full size in T3's image viewer, so a grid can show screenshots small. Write each image as one complete absolute path, in `src` or as a JavaScript string. T3 does not inline a path the page builds from parts. T3 inlines local images into the page, so the thread keeps them after the worktree is gone. To embed a screenshot, a video, or an audio clip in the reply itself, as `/ketchup` asks, write it as a Markdown image whose target is the file's absolute path. T3 renders all three. Keep that file in the work dir (Worktrees section), so it outlives the worktree. A Mermaid fence in the reply renders as a diagram. A generated image needs an image tool from your provider. T3 has none, so without one draw a diagram or chart instead. +- **Files in the reply.** Link each file the reply cites, such as show-me-your-work's evidence, the decision log, or a verification log, as a Markdown link whose target is the file's absolute path. T3 opens it in its file viewer. +- **Secrets** (a CLI token, an API key, a test account password for a verification run). The root calls `request_secret`. For a shell command, pass `delivery: "file"` and read the returned path inside the command, such as `TOKEN="$(cat )" `. Never print the value, and keep it out of the work dir, briefs, and commits. A child that needs a secret returns `BLOCKED`. The root requests it and puts the file path, never the value, in the next brief. T3 deletes the file after 24 hours, so a schedule or automation that needs the value later reads it from the user's own configuration, such as benny's `BENNY_SLACK_BOT_TOKEN`. ## Cursor products with no counterpart