{"slug":"issue","title":"issue","summary":"Use GitHub issues as persistent cross-session resolution memory. Create, update, and re-read issues that are self-contained and re-readable cold, recording the hypothesis and the resolution. Triggers on \"track this in an issue\", \"create an issue I can resume\", \"resume issue\", \"is","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-24T17:04:35.682649Z","repo":{"url":"https://github.com/mirkobozzetto/arsenal","stars":17,"forks":1,"license":"MIT","updatedAt":"2026-09-25T09:56:13Z"},"bodyHtml":"<hr>\n<h2>name: issue\ndescription: Use GitHub issues as persistent cross-session resolution memory. Create, update, and re-read issues that are self-contained and re-readable cold, recording the hypothesis and the resolution. Triggers on \"track this in an issue\", \"create an issue I can resume\", \"resume issue\", \"issue memory\", \"log this problem as an issue\", or when work must survive a context reset via the GitHub tracker. NOT for ephemeral session snapshots (use remember) and NOT for the manual Obsidian vault (use brain). GitHub-native, auto-re-readable on resume.\nargument-hint: \"[create|update|resume|list] [#N | </h2>\n<h1>issue: GitHub issues as resolution memory</h1>\n<p>Persist problem-solving state in GitHub issues so a later session (or a fresh context) can re-read an issue cold and continue. Each issue records the problem, a self-contained Pickup Directive, the working hypothesis, attempts, and the final resolution.</p>\n<h2>Prerequisites</h2>\n<ul>\n<li><code>gh</code> CLI authenticated (<code>gh auth status</code>).</li>\n<li>Inside a GitHub repo (a remote with issues enabled). If not, stop and tell the user.</li>\n</ul>\n<h2>Natural-language routing</h2>\n<p>Interpret intent and route:</p>\n<table>\n<thead>\n<tr>\n<th>User says</th>\n<th>Action</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>\"track this in an issue\", \"log this problem\", \"open an issue for this\"</td>\n<td><strong>create</strong></td>\n</tr>\n<tr>\n<td>\"update the issue\", \"note progress on #N\", \"I found the cause\"</td>\n<td><strong>update</strong></td>\n</tr>\n<tr>\n<td>\"resume issue #N\", \"what was I doing on #N\", \"pick up where I left off\"</td>\n<td><strong>resume</strong></td>\n</tr>\n<tr>\n<td>\"list my memory issues\", \"what issues am I tracking\"</td>\n<td><strong>list</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Default when ambiguous and a number is present → <strong>resume #N</strong>; otherwise → <strong>create</strong>.</p>\n<h2>create</h2>\n<ol>\n<li>Draft the issue body from <code>references/issue-template.md</code> (Problem / Pickup Directive / Hypothesis / Attempts / Resolution). Fill Problem + Pickup Directive + initial Hypothesis from the current context; leave Attempts/Resolution as stubs.</li>\n<li><strong>Confirm with the user before opening</strong> (opening an issue is outward-facing). Show the drafted title + body.</li>\n<li>Create with the memory label so <code>resume</code>/<code>list</code> can filter:\n<pre><code>gh issue create --title \"&lt;concise title&gt;\" --label claude-memory --body \"&lt;rendered template&gt;\"\n</code></pre>\nIf the label does not exist, create it once: <code>gh label create claude-memory --description \"Claude resolution memory\" --color BFD4F2</code>.</li>\n<li>Report the issue number + URL.</li>\n</ol>\n<h2>update</h2>\n<ol>\n<li><strong>Read before write</strong>: <code>gh issue view &lt;N&gt; --comments</code> to load current state.</li>\n<li>Append progress as a comment (never overwrite the original body):\n<pre><code>gh issue comment &lt;N&gt; --body \"&lt;progress / revised hypothesis / new attempt&gt;\"\n</code></pre>\n</li>\n<li>When solved, append the resolution and close (<strong>confirm before closing</strong>):\n<pre><code>gh issue comment &lt;N&gt; --body \"Resolution: &lt;what fixed it and why&gt;\"\ngh issue close &lt;N&gt; --reason completed\n</code></pre>\n</li>\n</ol>\n<h2>resume</h2>\n<ol>\n<li>Load the issue cold:\n<pre><code>gh issue view &lt;N&gt; --comments\n</code></pre>\nIf no number given: <code>gh issue list --label claude-memory --state open</code> and ask which.</li>\n<li>Reconstruct context strictly from the <strong>Pickup Directive</strong> + Hypothesis + latest comments. Do not assume prior chat memory.</li>\n<li>State the recovered context back to the user, then continue the work.</li>\n</ol>\n<h2>list</h2>\n<pre><code>gh issue list --label claude-memory --state open\n</code></pre>\n<p>Show number, title, and updated time.</p>\n<h2>Issue body template</h2>\n<p>The structure lives in <code>references/issue-template.md</code>. Read it before <code>create</code> so every issue is self-contained and re-readable cold. The <strong>Pickup Directive</strong> is mandatory: it is what makes the issue resumable without prior context.</p>\n<h2>Guardrails</h2>\n<ul>\n<li>Read an issue (<code>gh issue view</code>) before commenting or closing; never blow away existing content.</li>\n<li>Confirm with the user before <code>gh issue create</code> and before <code>gh issue close</code> (outward-facing / state change).</li>\n<li>Use <code>gh</code> for all issue operations, not raw git; this skill never commits or pushes.</li>\n<li>Never modify a database; this skill only touches GitHub issues.</li>\n<li>Prose in English; technical terms and identifiers in English.</li>\n<li>Any web lookup uses Exa MCP only (web_search_exa, crawling_exa); never native WebSearch/WebFetch.</li>\n<li>No comments inside any generated code or scripts.</li>\n</ul>\n<h2>Delimitation</h2>\n<ul>\n<li><code>issue</code> != <code>remember</code>: remember is an ephemeral per-session snapshot. issue is durable and GitHub-native.</li>\n<li><code>issue</code> != <code>brain</code>: brain is manual Obsidian capture. issue is the repo's tracker, auto-re-read on resume.</li>\n</ul>\n","files":[{"path":"references/issue-template.md","sizeBytes":1466,"isText":true},{"path":"SKILL.md","sizeBytes":3051,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-27T19:37:26.424152Z","sha256":"6A6FF0A4AE52DE3CA2BAD169D3384E52A50D8E08DFDDF5A6395D8F6F661C46F8","sizeBytes":2608},"review":null,"source":{"repositoryUrl":"https://github.com/mirkobozzetto/arsenal","path":"plugins/issue/skills/issue","license":"MIT","commit":"d4054b7c49d9c3e29378ba77a59140d11095aecc","subtreeSha":"23272CB0990293EA623E4D115D21A6947AE50E579C2B58557172EA44C28D030C","lastSyncedAt":"2026-09-27T19:34:26.495601Z"},"reviewedAt":"2026-09-27T19:43:11.494028Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/mirkobozzetto/arsenal/tree/main/plugins/issue/skills/issue"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install mirkobozzetto-arsenal@llmmart"},{"target":"git","command":"git clone https://github.com/mirkobozzetto/arsenal.git"}]}