{
  "error": {
    "message": "{\"error\":{\"message\":\"{\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Your API key was reported as leaked. Please use another API key.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\",\"code\":403,\"status\":\"Forbidden\"}}",
    "stack": "ApiError: {\"error\":{\"message\":\"{\\n  \\\"error\\\": {\\n    \\\"code\\\": 403,\\n    \\\"message\\\": \\\"Your API key was reported as leaked. Please use another API key.\\\",\\n    \\\"status\\\": \\\"PERMISSION_DENIED\\\"\\n  }\\n}\\n\",\"code\":403,\"status\":\"Forbidden\"}}\n    at throwErrorIfNotOK (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-67TFD6HC.js:36178:24)\n    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n    at async file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-67TFD6HC.js:35941:7\n    at async Models.generateContentStream (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-67TFD6HC.js:37037:16)\n    at async file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:278827:19\n    at async file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:255732:23\n    at async retryWithBackoff (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:275704:23)\n    at async GeminiChat.makeApiCallAndProcessStream (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:311287:28)\n    at async GeminiChat.streamWithRetries (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:311125:29)\n    at async Turn.run (file:///home/claude/.npm-global/lib/node_modules/@google/gemini-cli/bundle/chunk-UQGLVPZQ.js:311618:24)"
  },
  "context": [
    {
      "role": "user",
      "parts": [
        {
          "text": "<session_context>\nThis is the Gemini CLI. We are setting up the context for our chat.\nToday's date is Wednesday, June 24, 2026 (formatted according to the user's locale).\nMy operating system is: linux\nThe project's temporary directory is: /home/claude/.gemini/tmp/pr-review-px5p1t\n- **Workspace Directories:**\n  - /tmp/pr-review-Px5p1T\n- **Directory Structure:**\n\nShowing up to 200 items (files + folders).\n\n/tmp/pr-review-Px5p1T/\n\n\n\n</session_context>"
        }
      ]
    },
    {
      "role": "user",
      "parts": [
        {
          "text": "You are a dedicated code reviewer for this repository. You are deeply familiar with its conventions and codebase.\n\n## Project Conventions (from CLAUDE.md)\n## gstack (REQUIRED — global install)\n\n**Before doing ANY work, verify gstack is installed:**\n\n```bash\ntest -d ~/.claude/skills/gstack/bin && echo \"GSTACK_OK\" || echo \"GSTACK_MISSING\"\n```\n\nIf GSTACK_MISSING: STOP. Do not proceed. Tell the user:\n\n> gstack is required for all AI-assisted work in this repo.\n> Install it:\n> ```bash\n> git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack\n> cd ~/.claude/skills/gstack && ./setup --team\n> ```\n> Then restart your AI coding tool.\n\nDo not skip skills, ignore gstack errors, or work around missing gstack.\n\nUsing gstack skills: After install, skills like /qa, /ship, /review, /investigate,\nand /browse are available. Use /browse for all web browsing.\nUse ~/.claude/skills/gstack/... for gstack file paths (the global path).\n\n\n## Review Task\n\nPR #32: \"docs(orchestration): scope Pi tracker requirements\"\n\nDescription:\n## Summary\n\n- Scope remaining Pi operational docs so Linear is an optional tracker adapter, not a default requirement.\n- Update `.pi/RULES.md`, `.pi/AGENT.md`, `heartbeat-test.md`, and the subagent worker example to refer to the active tracker or direct user/GitHub context.\n- Remove the phantom `AGENT_TASK_ID` docs contract; the wrapper defines `AGENT_ISSUE_ID`, `AGENT_SESSION_ID`, and `AGENT_BRANCH`.\n- Leave `docs/AGENTS.md` and `docs/adapters/linear.md` to PR #30 so this PR stays non-overlapping.\n\n## Validation\n\n- `git diff --check -- .pi/RULES.md .pi/AGENT.md heartbeat-test.md packages/coding-agent/examples/extensions/subagent/agents/worker.md`\n- `rg -n 'AGENT_TASK_ID' heartbeat-test.md packages/coding-agent/examples/extensions/subagent/agents/worker.md .pi/AGENT.md .pi/RULES.md || true`\n- `npm run check`\n\n## Notes\n\n- Stacked on #29 because current `main` has stale generated model fixture IDs that fail `npm run check`; #29 owns that unrelated test-fixture repair.\n- PR #30 owns the main orchestration guide and optional Linear adapter reference.\n- PR #31 is already merged.\n\n\nReview the diff below. Provide your response as a JSON object with these keys:\n- \"summary\": a concise markdown summary. Tag issues with severity: [blocking] for must-fix, [suggestion] for improvements, [nitpick] for style.\n- \"comments\": array of { \"path\", \"line\", \"body\" } — inline review comments with severity tags\n- \"verdict\": \"approve\" (no blocking issues) or \"request_changes\" (blocking issues found)\n- \"workflow_suggestions\": array of strings — suggestions for improving the development workflow (e.g., \"Consider splitting this PR\", \"Add a pre-commit hook for X\")\n\nFocus on meaningful issues: bugs, security, performance, correctness. Skip trivial style nits.\nReturn ONLY valid JSON, no markdown fences.\n\nDiff:\n```diff\nFile: .pi/AGENT.md (modified, +7/-7)\n@@ -4,7 +4,7 @@\n \n ## What This Is\n \n-Pi is an orchestrator agent running on Gautam's iMac. It plans projects, delegates execution to sub-agents, communicates with Gautam via iMessage, and tracks everything in Linear. Pi has full tool access for operational needs (diagnostics, config edits, service restarts) but its primary role is orchestration — planning, scoping, and delegating execution work to sub-agents.\n+Pi is an orchestrator agent running on Gautam's iMac. It plans projects, delegates execution to sub-agents, communicates with Gautam via iMessage, and tracks work in the active task surface: a direct user thread, GitHub issue, PR, or optional tracker such as Linear. Pi has full tool access for operational needs (diagnostics, config edits, service restarts) but its primary role is orchestration — planning, scoping, and delegating execution work to sub-agents.\n \n ## Architecture\n \n@@ -27,7 +27,7 @@ SendBlue Cloud ──webhook──▶ Tailscale Funnel :8443\n                          Pi Session (this agent)\n                             ├── Plans & scopes work\n                             ├── Delegates to sub-agents\n-                            ├── Syncs state to Linear\n+                            ├── Syncs state to the active task surface\n                             └── Reports back to Gautam via imessage_reply\n ```\n \n@@ -66,7 +66,7 @@ SendBlue Cloud ──webhook──▶ Tailscale Funnel :8443\n | System | Access | Purpose |\n |--------|--------|---------|\n | GitHub | gh CLI as gbharg | Code, branches, PRs |\n-| Linear | API key + webhook | Project tracking (PI team) |\n+| Linear | API key + webhook | Optional project tracking (PI team) |\n | SendBlue | API + webhook | iMessage send/receive (+16292925296) |\n | Tailscale | Funnel on :8443 | Public webhook endpoint |\n \n@@ -95,12 +95,12 @@ Sub-agents are spawned with `--no-extensions` (no memory, no hooks) but sessions\n ## How It All Connects\n \n 1. Gautam texts Pi via iMessage → SendBlue webhook → Pi extension → appears in session\n-2. Pi plans work, creates specs, creates Linear issues\n+2. Pi plans work and creates specs; it creates tracker issues only when that workflow is active\n 3. Pi spawns sub-agents with full CONTEXT/TASK/SCOPE/CONSTRAINTS/EXPECTED OUTPUT\n 4. Sub-agents return structured output; Pi reviews and synthesizes\n-5. Pi updates Linear, commits to GitHub, texts Gautam with results\n-6. Linear webhooks notify Pi of external changes (Gautam updates issues, other agents comment)\n-7. EOD cron verifies everything is synced and nothing was dropped\n+5. Pi updates the originating task surface, commits to GitHub, texts Gautam with results\n+6. Tracker webhooks notify Pi of external changes when a tracker is configured\n+7. EOD cron verifies active commitments are synced and nothing was dropped\n \n ## Infrastructure references\n \n\nFile: .pi/RULES.md (modified, +8/-4)\n@@ -3,6 +3,9 @@\n This file is the single source of truth for how all agents operate in this repository. Read it in full before every session. Follow it without exception.\n \n Adapted from OpenClaw post-mortem (PI-13, AI-627). Every rule exists because violating it has caused real failures.\n+Linear references below apply only when the active workflow is Linear-backed.\n+Direct user requests and GitHub issue work do not require Linear.\n+The active task surface is whichever system originated the work: a direct user thread, GitHub issue, PR, or optional tracker such as Linear.\n \n ---\n \n@@ -20,10 +23,11 @@ Adapted from OpenClaw post-mortem (PI-13, AI-627). Every rule exists because vio\n ## Git Discipline\n \n 1. **Always branch. No exceptions.** Even one-line fixes. Branch off main, PR to merge.\n-2. **No project branches.** Linear projects are grouping only. Every change goes to main independently.\n+2. **No project branches.** Tracker projects are grouping only. Every change goes to main independently.\n 3. **Conventional branch naming.** Format: `type/description` (feat/, fix/, chore/, docs/, etc.)\n-4. **Conventional commits.** Format: `type(scope): description` referencing Linear issue.\n-5. **Every commit links to a Linear issue.** No orphan commits. The commit message is the enforcement.\n+4. **Conventional commits.** Format: `type(scope): description`; reference an issue only when the task is issue-backed.\n+5. **Every commit has traceable context.** Trace to the active issue, user request, or PR.\n+   - Use issue-closing keywords only when the merge should close that issue.\n 6. **Keep branches short-lived.** One focused change per branch, merged within 1-2 sessions.\n 7. **Do not rebase or force-push shared branches.** Merge main into your branch if needed.\n \n@@ -52,7 +56,7 @@ Adapted from OpenClaw post-mortem (PI-13, AI-627). Every rule exists because vio\n \n 1. **Compaction threshold: target 30%, soft 50%, priority 60%.** I own the decision — hooks nudge, don't trigger.\n 2. **Checkpoint before compaction.** Write state.md + context.md before any context loss event.\n-3. **Everything in Linear.** Any commitment goes in Linear immediately. No exceptions.\n+3. **Use the active task surface.** Commitments go in the tracker, GitHub issue, PR, or user-visible thread that originated the work. Linear is optional.\n 4. **Living documentation.** Update docs in real-time during execution, not after.\n \n ---\n\nFile: heartbeat-test.md (modified, +4/-4)\n@@ -2,13 +2,13 @@\n \n ## Overview\n \n-The agent heartbeat system tracks and monitors worker agent activity during task execution through automatic activity streaming to Linear.\n+The agent heartbeat system tracks and monitors worker agent activity during task execution. Activity streams to the active task surface: a Linear issue when the Linear-backed wrapper is enabled, or the originating thread, issue, or PR otherwise.\n \n ## How It Works\n \n 1. **Session Initialization**: Each worker agent is assigned a unique `AGENT_SESSION_ID` when spawned to handle a delegated task.\n \n-2. **Automatic Streaming**: The agent wrapper automatically streams three types of activity to Linear:\n+2. **Automatic Streaming**: The agent wrapper automatically streams three types of activity to the active task surface:\n    - Tool executions (bash commands, file reads, edits, etc.)\n    - Agent thoughts and reasoning\n    - Task completion status\n@@ -24,8 +24,8 @@ The agent heartbeat system tracks and monitors worker agent activity during task\n ## Environment\n \n - `AGENT_SESSION_ID`: Unique identifier for the agent session\n-- `AGENT_ISSUE_ID`: Linear issue being worked on\n+- `AGENT_ISSUE_ID`: Active GitHub issue or tracker-backed issue being worked on, when present\n - `AGENT_BRANCH`: Git branch for commits\n-- `LINEAR_APP_TOKEN`: Used by wrapper for activity posting\n+- `LINEAR_APP_TOKEN`: Used by the Linear-backed wrapper for activity posting, when enabled\n \n The heartbeat mechanism ensures that parallel agents can work autonomously while maintaining full observability for orchestration and debugging.\n\nFile: packages/coding-agent/examples/extensions/subagent/agents/worker.md (modified, +6/-6)\n@@ -11,15 +11,15 @@ You are a worker agent operating in an isolated context to complete delegated ta\n \n You are running under the agent wrapper with these environment variables available:\n \n-- `AGENT_SESSION_ID` - Your Linear AgentSession ID (for reference only; wrapper handles activity streaming)\n-- `AGENT_ISSUE_ID` - The Linear issue ID you are working on\n+- `AGENT_SESSION_ID` - Your agent session ID (for reference only; wrapper handles activity streaming)\n+- `AGENT_ISSUE_ID` - The active GitHub issue or tracker-backed issue ID you are working on, when present\n - `AGENT_BRANCH` - The git branch you should commit to\n-- `LINEAR_API_KEY` - Linear API key for reading data (if needed)\n-- `LINEAR_APP_TOKEN` - Linear app token (wrapper uses this for activity posting)\n+- `LINEAR_API_KEY` - Linear API key for reading data, when the Linear-backed wrapper is enabled\n+- `LINEAR_APP_TOKEN` - Linear app token, when the Linear-backed wrapper is enabled\n \n-Linear API endpoint: `https://api.linear.app/graphql`\n+Linear API endpoint, when enabled: `https://api.linear.app/graphql`\n \n-**Note:** The wrapper automatically streams your tool executions, thoughts, and completion to Linear. You do not need to manually post activities.\n+**Note:** The wrapper automatically streams your tool executions, thoughts, and completion to the active task surface. You do not need to manually post activities.\n \n # Git Commit Requirements\n \n```\n\n-"
        }
      ]
    },
    {
      "role": "user",
      "parts": [
        {
          "text": "You are a dedicated code reviewer for this repository. You are deeply familiar with its conventions and codebase.\n\n## Project Conventions (from CLAUDE.md)\n## gstack (REQUIRED — global install)\n\n**Before doing ANY work, verify gstack is installed:**\n\n```bash\ntest -d ~/.claude/skills/gstack/bin && echo \"GSTACK_OK\" || echo \"GSTACK_MISSING\"\n```\n\nIf GSTACK_MISSING: STOP. Do not proceed. Tell the user:\n\n> gstack is required for all AI-assisted work in this repo.\n> Install it:\n> ```bash\n> git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack\n> cd ~/.claude/skills/gstack && ./setup --team\n> ```\n> Then restart your AI coding tool.\n\nDo not skip skills, ignore gstack errors, or work around missing gstack.\n\nUsing gstack skills: After install, skills like /qa, /ship, /review, /investigate,\nand /browse are available. Use /browse for all web browsing.\nUse ~/.claude/skills/gstack/... for gstack file paths (the global path).\n\n\n## Review Task\n\nPR #32: \"docs(orchestration): scope Pi tracker requirements\"\n\nDescription:\n## Summary\n\n- Scope remaining Pi operational docs so Linear is an optional tracker adapter, not a default requirement.\n- Update `.pi/RULES.md`, `.pi/AGENT.md`, `heartbeat-test.md`, and the subagent worker example to refer to the active tracker or direct user/GitHub context.\n- Remove the phantom `AGENT_TASK_ID` docs contract; the wrapper defines `AGENT_ISSUE_ID`, `AGENT_SESSION_ID`, and `AGENT_BRANCH`.\n- Leave `docs/AGENTS.md` and `docs/adapters/linear.md` to PR #30 so this PR stays non-overlapping.\n\n## Validation\n\n- `git diff --check -- .pi/RULES.md .pi/AGENT.md heartbeat-test.md packages/coding-agent/examples/extensions/subagent/agents/worker.md`\n- `rg -n 'AGENT_TASK_ID' heartbeat-test.md packages/coding-agent/examples/extensions/subagent/agents/worker.md .pi/AGENT.md .pi/RULES.md || true`\n- `npm run check`\n\n## Notes\n\n- Stacked on #29 because current `main` has stale generated model fixture IDs that fail `npm run check`; #29 owns that unrelated test-fixture repair.\n- PR #30 owns the main orchestration guide and optional Linear adapter reference.\n- PR #31 is already merged.\n\n\nReview the diff below. Provide your response as a JSON object with these keys:\n- \"summary\": a concise markdown summary. Tag issues with severity: [blocking] for must-fix, [suggestion] for improvements, [nitpick] for style.\n- \"comments\": array of { \"path\", \"line\", \"body\" } — inline review comments with severity tags\n- \"verdict\": \"approve\" (no blocking issues) or \"request_changes\" (blocking issues found)\n- \"workflow_suggestions\": array of strings — suggestions for improving the development workflow (e.g., \"Consider splitting this PR\", \"Add a pre-commit hook for X\")\n\nFocus on meaningful issues: bugs, security, performance, correctness. Skip trivial style nits.\nReturn ONLY valid JSON, no markdown fences.\n\nDiff:\n```diff\nFile: .pi/AGENT.md (modified, +7/-7)\n@@ -4,7 +4,7 @@\n \n ## What This Is\n \n-Pi is an orchestrator agent running on Gautam's iMac. It plans projects, delegates execution to sub-agents, communicates with Gautam via iMessage, and tracks everything in Linear. Pi has full tool access for operational needs (diagnostics, config edits, service restarts) but its primary role is orchestration — planning, scoping, and delegating execution work to sub-agents.\n+Pi is an orchestrator agent running on Gautam's iMac. It plans projects, delegates execution to sub-agents, communicates with Gautam via iMessage, and tracks work in the active task surface: a direct user thread, GitHub issue, PR, or optional tracker such as Linear. Pi has full tool access for operational needs (diagnostics, config edits, service restarts) but its primary role is orchestration — planning, scoping, and delegating execution work to sub-agents.\n \n ## Architecture\n \n@@ -27,7 +27,7 @@ SendBlue Cloud ──webhook──▶ Tailscale Funnel :8443\n                          Pi Session (this agent)\n                             ├── Plans & scopes work\n                             ├── Delegates to sub-agents\n-                            ├── Syncs state to Linear\n+                            ├── Syncs state to the active task surface\n                             └── Reports back to Gautam via imessage_reply\n ```\n \n@@ -66,7 +66,7 @@ SendBlue Cloud ──webhook──▶ Tailscale Funnel :8443\n | System | Access | Purpose |\n |--------|--------|---------|\n | GitHub | gh CLI as gbharg | Code, branches, PRs |\n-| Linear | API key + webhook | Project tracking (PI team) |\n+| Linear | API key + webhook | Optional project tracking (PI team) |\n | SendBlue | API + webhook | iMessage send/receive (+16292925296) |\n | Tailscale | Funnel on :8443 | Public webhook endpoint |\n \n@@ -95,12 +95,12 @@ Sub-agents are spawned with `--no-extensions` (no memory, no hooks) but sessions\n ## How It All Connects\n \n 1. Gautam texts Pi via iMessage → SendBlue webhook → Pi extension → appears in session\n-2. Pi plans work, creates specs, creates Linear issues\n+2. Pi plans work and creates specs; it creates tracker issues only when that workflow is active\n 3. Pi spawns sub-agents with full CONTEXT/TASK/SCOPE/CONSTRAINTS/EXPECTED OUTPUT\n 4. Sub-agents return structured output; Pi reviews and synthesizes\n-5. Pi updates Linear, commits to GitHub, texts Gautam with results\n-6. Linear webhooks notify Pi of external changes (Gautam updates issues, other agents comment)\n-7. EOD cron verifies everything is synced and nothing was dropped\n+5. Pi updates the originating task surface, commits to GitHub, texts Gautam with results\n+6. Tracker webhooks notify Pi of external changes when a tracker is configured\n+7. EOD cron verifies active commitments are synced and nothing was dropped\n \n ## Infrastructure references\n \n\nFile: .pi/RULES.md (modified, +8/-4)\n@@ -3,6 +3,9 @@\n This file is the single source of truth for how all agents operate in this repository. Read it in full before every session. Follow it without exception.\n \n Adapted from OpenClaw post-mortem (PI-13, AI-627). Every rule exists because violating it has caused real failures.\n+Linear references below apply only when the active workflow is Linear-backed.\n+Direct user requests and GitHub issue work do not require Linear.\n+The active task surface is whichever system originated the work: a direct user thread, GitHub issue, PR, or optional tracker such as Linear.\n \n ---\n \n@@ -20,10 +23,11 @@ Adapted from OpenClaw post-mortem (PI-13, AI-627). Every rule exists because vio\n ## Git Discipline\n \n 1. **Always branch. No exceptions.** Even one-line fixes. Branch off main, PR to merge.\n-2. **No project branches.** Linear projects are grouping only. Every change goes to main independently.\n+2. **No project branches.** Tracker projects are grouping only. Every change goes to main independently.\n 3. **Conventional branch naming.** Format: `type/description` (feat/, fix/, chore/, docs/, etc.)\n-4. **Conventional commits.** Format: `type(scope): description` referencing Linear issue.\n-5. **Every commit links to a Linear issue.** No orphan commits. The commit message is the enforcement.\n+4. **Conventional commits.** Format: `type(scope): description`; reference an issue only when the task is issue-backed.\n+5. **Every commit has traceable context.** Trace to the active issue, user request, or PR.\n+   - Use issue-closing keywords only when the merge should close that issue.\n 6. **Keep branches short-lived.** One focused change per branch, merged within 1-2 sessions.\n 7. **Do not rebase or force-push shared branches.** Merge main into your branch if needed.\n \n@@ -52,7 +56,7 @@ Adapted from OpenClaw post-mortem (PI-13, AI-627). Every rule exists because vio\n \n 1. **Compaction threshold: target 30%, soft 50%, priority 60%.** I own the decision — hooks nudge, don't trigger.\n 2. **Checkpoint before compaction.** Write state.md + context.md before any context loss event.\n-3. **Everything in Linear.** Any commitment goes in Linear immediately. No exceptions.\n+3. **Use the active task surface.** Commitments go in the tracker, GitHub issue, PR, or user-visible thread that originated the work. Linear is optional.\n 4. **Living documentation.** Update docs in real-time during execution, not after.\n \n ---\n\nFile: heartbeat-test.md (modified, +4/-4)\n@@ -2,13 +2,13 @@\n \n ## Overview\n \n-The agent heartbeat system tracks and monitors worker agent activity during task execution through automatic activity streaming to Linear.\n+The agent heartbeat system tracks and monitors worker agent activity during task execution. Activity streams to the active task surface: a Linear issue when the Linear-backed wrapper is enabled, or the originating thread, issue, or PR otherwise.\n \n ## How It Works\n \n 1. **Session Initialization**: Each worker agent is assigned a unique `AGENT_SESSION_ID` when spawned to handle a delegated task.\n \n-2. **Automatic Streaming**: The agent wrapper automatically streams three types of activity to Linear:\n+2. **Automatic Streaming**: The agent wrapper automatically streams three types of activity to the active task surface:\n    - Tool executions (bash commands, file reads, edits, etc.)\n    - Agent thoughts and reasoning\n    - Task completion status\n@@ -24,8 +24,8 @@ The agent heartbeat system tracks and monitors worker agent activity during task\n ## Environment\n \n - `AGENT_SESSION_ID`: Unique identifier for the agent session\n-- `AGENT_ISSUE_ID`: Linear issue being worked on\n+- `AGENT_ISSUE_ID`: Active GitHub issue or tracker-backed issue being worked on, when present\n - `AGENT_BRANCH`: Git branch for commits\n-- `LINEAR_APP_TOKEN`: Used by wrapper for activity posting\n+- `LINEAR_APP_TOKEN`: Used by the Linear-backed wrapper for activity posting, when enabled\n \n The heartbeat mechanism ensures that parallel agents can work autonomously while maintaining full observability for orchestration and debugging.\n\nFile: packages/coding-agent/examples/extensions/subagent/agents/worker.md (modified, +6/-6)\n@@ -11,15 +11,15 @@ You are a worker agent operating in an isolated context to complete delegated ta\n \n You are running under the agent wrapper with these environment variables available:\n \n-- `AGENT_SESSION_ID` - Your Linear AgentSession ID (for reference only; wrapper handles activity streaming)\n-- `AGENT_ISSUE_ID` - The Linear issue ID you are working on\n+- `AGENT_SESSION_ID` - Your agent session ID (for reference only; wrapper handles activity streaming)\n+- `AGENT_ISSUE_ID` - The active GitHub issue or tracker-backed issue ID you are working on, when present\n - `AGENT_BRANCH` - The git branch you should commit to\n-- `LINEAR_API_KEY` - Linear API key for reading data (if needed)\n-- `LINEAR_APP_TOKEN` - Linear app token (wrapper uses this for activity posting)\n+- `LINEAR_API_KEY` - Linear API key for reading data, when the Linear-backed wrapper is enabled\n+- `LINEAR_APP_TOKEN` - Linear app token, when the Linear-backed wrapper is enabled\n \n-Linear API endpoint: `https://api.linear.app/graphql`\n+Linear API endpoint, when enabled: `https://api.linear.app/graphql`\n \n-**Note:** The wrapper automatically streams your tool executions, thoughts, and completion to Linear. You do not need to manually post activities.\n+**Note:** The wrapper automatically streams your tool executions, thoughts, and completion to the active task surface. You do not need to manually post activities.\n \n # Git Commit Requirements\n \n```\n\n-"
        }
      ]
    }
  ]
}