simple-issues
Skill0 starsChanged 6 months agoMITView on GitHub
Use this skill whenever the user mentions issues, tasks, tickets, work items, or asks "what should I work on", "what's next", or wants to create/claim/close work. Manages a lightweight file-based issue tracker under `.issues/` with `open/`, `claimed/`, `closed/` folders. Issues are append-only markdown files with YAML frontmatter. No external infrastructure required.
In this repository5 other files it gives its agents.
- handoffSkill
- harness-auditSkill
- i-did-not-catch-thatSkill
- readme-updateSkill
- the-gistSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
18 rules. About 0 are common, 7 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 12
When this skill activates, immediately:
- Very specific: line 14
Check whether .issues/ exists at the repo root.
- Very specific: line 15
If not, ask the user: _"No issue tracker found.
- Distinctive: line 16
If it exists, scan all three folders and report to the user:
- Very specific: line 41
Add a short .issues/README.md explaining the workflow (optional but recommended).
- Distinctive: line 45
Every claim is owned by a machine, not a person.
- Distinctive: line 58
Before any state-changing operation (claim, close, create), check if the repo uses git:
- Very specific: line 64
If yes: run git pull --rebase first to minimize claim races.
- Distinctive: line 65
If no (workshop single-machine scenario): skip.
- Distinctive: line 80
If a 4-char collision occurs (very rare in workshops), extend to 6 chars for the new file only.
- Distinctive: line 179
If during work an agent discovers human input is needed after all:
- Very specific: line 183
If currently in claimed/ and you cannot proceed, leave it claimed and surface the blocker to the user — do not silently move it back to …
- Very specific: line 192
Write file into .issues/open/ with frontmatter (claimedBy: null, timestamp: now).
- Very specific: line 193
If git: git add + commit with message like issues: open a3f1 add dark mode toggle.
- Very specific: line 200
Every short-id in the issue's dependsOn exists as a file in .issues/closed/.
- Very specific: line 205
Update claimedBy: <user@hostname> in frontmatter.
- Very specific: line 219
Leave claimedBy as-is (historical record).
- Very specific: line 225
Do not edit a closed issue.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
File-Based Issue Tracker
A zero-infrastructure issue tracker that lives inside the repository under .issues/. Designed for workshops and small teams where multiple humans (each on their own machine, optionally with agents) collaborate without stepping on each other.
1. On activation — ALWAYS do this first
When this skill activates, immediately:
- Check whether
.issues/exists at the repo root.- If not, ask the user: "No issue tracker found. Should I initialize
.issues/here?" — then follow §2.
- If not, ask the user: "No issue tracker found. Should I initialize
- If it exists, scan all three folders and report to the user:
- Count of issues in
open/,claimed/,closed/. - List of available open issues (title + short-id), filtered to those whose
dependsOnare all inclosed/. - Whether this machine (see §3 for identity) currently has any issue in
claimed/— if yes, name it. The agent must finish that one before claiming anything new.
- Count of issues in
Example report:
📋 Issue tracker status
open: 4 | claimed: 2 | closed: 11
Available to claim (deps satisfied):
- a3f1 Add dark mode toggle
- 9b22 Refactor auth middleware
Currently claimed by this machine (yannick@thinkpad):
- 7e04 Fix flaky login test ← finish this before claiming a new one2. Initializing the structure
mkdir -p .issues/open .issues/claimed .issues/closedAdd a short .issues/README.md explaining the workflow (optional but recommended). Do not add .gitignore entries — issues are meant to be committed.
3. Machine identity
Every claim is owned by a machine, not a person. Compute identity as:
<username>@<hostname>- POSIX:
echo "$(whoami)@$(hostname -s)" - Windows:
echo "$env:USERNAME@$env:COMPUTERNAME"
Cache this value for the session. Never invent or reuse another machine's identity.
4. Git awareness (optional)
Before any state-changing operation (claim, close, create), check if the repo uses git:
git rev-parse --is-inside-work-tree 2>/dev/null- If yes: run
git pull --rebasefirst to minimize claim races. If a rebase conflict touches.issues/claimed/, inform the user — another machine likely claimed the same issue. - If no (workshop single-machine scenario): skip; just operate on the filesystem.
5. Issue file format
Filename
<short-id>-<kebab-title>.mdshort-id: first 4 hex chars of the SHA-1 of the issue's initial markdown body (frontmatter excluded). Compute before writing the file.kebab-title: lowercase, ASCII, hyphen-separated, max ~60 chars.
Example: a3f1-add-dark-mode-toggle.md
If a 4-char collision occurs (very rare in workshops), extend to 6 chars for the new file only.
Frontmatter (YAML)
---
title: "Add dark mode toggle"
dependsOn: [] # list of short-ids, e.g. ["9b22", "7e04"]
humanNeeded: false # true if ANY step requires a human to act, decide, or be interviewed
humanNeededReason: null # required free-text string when humanNeeded=true
claimedBy: null # "user@hostname" when in claimed/, else null
timestamp: 2026-05-18T12:34:56Z # ISO-8601 UTC, creation only — never updated
---Field rules
| Field | Mutable? | Notes |
title | No | Set at creation. |
dependsOn | No | Set at creation. If deps change, add a Note explaining and modify as needed. |
humanNeeded | Yes (append-only context: flip + Note) | May be toggled by any agent; must be accompanied by a Note. |
humanNeededReason | Yes (with humanNeeded) | Free-text. |
claimedBy | Yes (only on open→claimed and claimed→closed) | Set to machine id on claim; leave as-is on close. |
timestamp | Never | Creation time only. |
Body — append-only
<Original description written at creation. NEVER edit or rewrite this.>
## Notes
### 2026-05-18T14:23:00Z — yannick@thinkpad
Discovered the bug also affects Safari 17. Scope unchanged.
### 2026-05-18T15:10:00Z — yannick@thinkpad
Resolution: fixed in commit abc1234. Closing.Strict Note format:
### <ISO-8601 UTC timestamp> — <user@hostname>
<free-form markdown content>Corrections, status changes, and clarifications all go as Notes. The original description is immutable.
The humanNeeded flag — read this carefully
humanNeeded is TRUE whenever completing the issue requires a human being to actively participate. The agent cannot finish it alone, even with full tool access.
Set humanNeeded: true when the issue involves ANY of:
- Interviewing, asking, or interacting with the user (e.g. "interview the user", "ask the user about X", "gather requirements", "clarify with stakeholder").
- Human decision-making that the agent cannot make autonomously (architecture choices, product direction, naming preferences, prioritization).
- Human-only actions: providing credentials/secrets, manual approvals, physical actions, accessing systems the agent has no tools for, signing off legally/financially.
- Review/sign-off as an explicit step (e.g. "user must approve the PRD before merging").
- Subjective feedback (taste, UX feel, "does this look right?").
- Skills/tools that interact with the user by design — including but not limited to:
to-prd,grill-me,interview-*, anything that "asks", "interviews", "consults", "elicits".
Set humanNeeded: false only when:
The issue can be fully completed by an agent using code, files, shell, and other autonomous tools — without ever needing to pause and wait for a human response or action.
Heuristic — ask yourself before writing the frontmatter:
"If I claim this issue and work on it autonomously, will I at some point have to stop and wait for a human to do something or answer something?"
- Yes →
humanNeeded: true+ write ahumanNeededReasondescribing WHAT the human must do.- No →
humanNeeded: false.
humanNeededReason — required when flag is true
Concrete, actionable description of what the human contribution is. Examples:
- ✅
"User must be interviewed via the grill-me skill to gather project requirements." - ✅
"Needs AWS production credentials from the ops lead." - ✅
"Requires user sign-off on the proposed API contract before implementation." - ❌
"Some human input needed"(too vague) - ❌
null(forbidden whenhumanNeeded: true)
Worked examples
| Issue description | humanNeeded | Reason |
| "Interview user via grill-me and produce a PRD" | true | Interview is a human-in-the-loop step. |
"Refactor auth.ts to extract token validation into a helper" | false | Pure code work. |
| "Decide between Postgres and SQLite for the workshop demo" | true | Decision belongs to the user/team. |
| "Bump all dependencies and fix resulting type errors" | false | Mechanical, agent-doable. |
| "Add dark mode — colors to be picked by the user" | true | Subjective choice required. |
| "Add dark mode using the existing design tokens" | false | All inputs available in the repo. |
| "Use to-prd skill to draft a PRD for the new billing module" | true | to-prd interviews the user. |
Flipping the flag later
If during work an agent discovers human input is needed after all:
- Flip
humanNeededtotrueand fillhumanNeededReason. - Append a Note explaining the discovery.
- If currently in
claimed/and you cannot proceed, leave it claimed and surface the blocker to the user — do not silently move it back toopen/.
6. Operations
Create an issue
- Compose the description (body without frontmatter).
- Compute
short-id = sha1(body)[:4]. - Build kebab filename.
- Write file into
.issues/open/with frontmatter (claimedBy: null,timestamp: now). - If git:
git add+ commit with message likeissues: open a3f1 add dark mode toggle.
Claim an issue (open → claimed)
Preconditions — refuse if any fails:
- This machine has no other issue currently in
.issues/claimed/withclaimedBy == <this machine>. - Every
short-idin the issue'sdependsOnexists as a file in.issues/closed/.
Then:
- (git)
git pull --rebase. - Update
claimedBy: <user@hostname>in frontmatter. - Move file:
.issues/open/<file>→.issues/claimed/<file>. - Append a Note:
Claimed by <user@hostname>. - (git) commit:
issues: claim a3f1.
Close an issue (claimed → closed)
Preconditions:
- Issue is in
.issues/claimed/andclaimedBy == <this machine>.
Then:
- Append a mandatory resolution Note explaining the outcome (what was done, commits, or why it's being closed without action).
- Leave
claimedByas-is (historical record). - Move file:
.issues/claimed/<file>→.issues/closed/<file>. - (git) commit:
issues: close a3f1.
Reopen / re-route
Do not edit a closed issue. Create a new issue and reference the old short-id in its description / dependsOn if appropriate.
7. Guardrails — refuse with a clear message
The agent MUST refuse and explain when asked to:
- Edit or rewrite the original body of any issue.
- Modify
titleortimestampafter creation. - Claim a second concurrent issue on the same machine.
- Claim an issue whose dependencies aren't all closed.
- Take over (
claimedBy) an issue already claimed by another machine — escalate to the user instead. - Move a file directly without updating frontmatter / writing a Note as specified above.
8. Quick mental model
open/ ← anyone can pick from here (if deps closed)
claimed/ ← exactly one per machine at a time
closed/ ← immutable history; deps point hereEach issue file = an append-only changelog of its own lifecycle. The folder is its state. Simple, git-mergeable, no DB.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

