issue · git:20261019.1e71d24 · 2026-10-19 · sha256 67670ff2cb52150a
issue git:20261019.1e71d24A
Immutable. This exact content never changes and is served at /api/v1/blob/67670ff2cb52150a.
--- name: issue description: Create, update or resume a GitHub or Linear issue as durable resolution memory when requested. argument-hint: "[create|update|resume|list|from-tasks|close] [#N | ID | problem | brief folder]" --- # Issue memory Read the specific issue and comments before updating it; outside the duplicate check, do not query unrelated issues. Capture the problem, evidence, attempts, remaining action and verification so the issue can be resumed cold. Use references/issue-template.md when creating one. ## Tracker Read the project's CLAUDE.md first (AGENTS.md in harnesses that read that instead). A line naming Linear, such as `Issue tracker: Linear, team <name>`, selects Linear. Otherwise use GitHub through the authenticated gh CLI, unchanged. Label, priority, project, parent and template follow that file when it names them; never guess one. Linear goes through the Linear MCP server already connected, whatever its tool prefix: `list_issues`, `get_issue`, `save_issue`, `list_comments`, `save_comment`. Without those tools, stop: create nothing on GitHub instead, and give the setup. In Claude Code: `claude mcp add --transport http linear-server https://mcp.linear.app/mcp`, then `/mcp` to sign in; elsewhere, the client's Linear connector or MCP setup with that URL. ## Commands Before `create` and `from-tasks`, search the open issues with the topic's key words: `gh issue list --search "<words>" --state open`, or on Linear `list_issues` with `query` and the team, ignoring completed and canceled ones. Show a close match first, with the offer to add to it (`update`) instead of creating a new one. Nothing is created without confirmation. Confirm before creating or closing an issue. Preserve the Pickup Directive contract. No code changes, commits or agents. On GitHub, append requested progress as comments instead of overwriting the body. Label new issues `arsenal`; keep `claude-memory` on the ones that already carry it and match either when listing or resuming. On Linear, `create` is `save_issue` with `title`, `team`, the template as `description` and the fields the CLAUDE.md names. `update` keeps one progress comment per issue: find it with `list_comments` (it starts with `## Progress`), rewrite it with `save_comment` and its `id`, and create it only when none exists. `resume` reads `get_issue` and `list_comments`. `list` returns the team's open issues, narrowed by the label or project the CLAUDE.md names. `from-tasks <brief folder>` creates one issue per top-level `##` task of `tasks.md`, after a single confirmation for the whole batch. Each body uses the template: Problem from the task and the acceptance criteria it cites, Pickup Directive with the brief path, `base` and `branch` from the brief frontmatter, the task identifier and its check command. It then writes `[#N](url)` (`[ID](url)` on Linear) into each task heading and the range or the identifiers into the brief `issues` field. Existing links are kept, never duplicated. `close #N` appends a `Resolution:` comment from the evidence given (trace row, commit, PR) and closes the issue as completed. Ship calls it after a merge into a branch that is not the default one, where GitHub's `Closes #N` does nothing. On Linear, `close` adds the `Resolution:` comment, then moves the issue to the team's completed status with `save_issue` (`state`), unless the CLAUDE.md leaves that to an integration: then the comment only. After every `create`, end with one line asking whether to turn the issue into a brief (« On en fait un brief ? » in the conversation language), with the command in the harness syntax (`/brief:brief #N` in Claude Code). Never start it yourself; Arsenal owns the transition. Resume reconstructs the current state from the issue, not stale memory. A solved issue does not trigger another diagnosis. List returns concise open items and stops. If the controlled shell has no external networking, report that authorization/capability boundary instead of claiming the tracker action happened or attempting an execution escape. ## Arsenal handoff Return issue context and remaining actions to Arsenal when it called this skill. A request to fix the issue can continue through Arsenal's implementation route; reading or resuming context alone does not authorize code changes. Issue creation and closure retain their confirmation gates. ## Verify external facts Before stating an external fact (a version, an API, a price, a date, a regulation, the behaviour of a tool or library, a person or company), search first when the runtime offers web search: read the `websearch` skill and run one quick search, then cite the source. One search per fact; `--deep` only on request. Without web search, mark the claim unverified. Facts visible in the repository or the request need no search. ## Execution policy Work solo. Ask before any subagent or reviewer, even in auto mode. Explain the independent scope and expected benefit first. No hidden advisor, nested delegation, model retuning, repeated successful checks, or progress spam. Use existing context before asking questions. Stop when the requested result is delivered. User stops and scope changes override pending steps.