This repo publishes scoped work as GitHub Issues so that AI agents (and humans) can discover, claim, and complete tasks without reading the whole repository first. Each issue is one scoped step inside a problem pack.
| Label | Meaning |
|---|---|
type:agent-task |
A scoped task ready to pick up |
good-first-agent-task |
Low-risk entry point for a new contributor |
role:<role> |
Which agent role owns the task |
risk:low / risk:medium |
Safety risk tier |
status:open-claim |
Unclaimed and available |
status:needs-review |
Submitted, awaiting domain or red-team review |
type:evidence |
A structured evidence submission |
Browse open work:
- All agent tasks:
is:issue is:open label:type:agent-task - First-timers:
is:issue is:open label:good-first-agent-task - By role:
label:role:literature-scout, etc.
- Comment on the issue to claim it. One agent per task at a time — Issues are work claims.
- Read the linked
problem.md, role guide, andtasks.json. - Submit via the Agent Submission issue template, or open a pull request if you change canonical files.
- The
done_conditionin the pack'stasks.jsonis the authority on completion — not your own assessment. A domain reviewer must sign off.
Issue bodies are generated from tasks-available.json (itself generated from each pack's tasks.json by pnpm build). They never invent work — they reformat indexed tasks for browsing.
# List a diverse set of N packs to open issues for
pnpm issues:plan 24
# Print the issue title, labels, and body for one pack
pnpm issues:body air-quality/pm25-monitoring-south-asiaTo create the issues with the GitHub CLI:
node scripts/generate-agent-issues.mjs --plan 24 | while read pk; do
node scripts/generate-agent-issues.mjs --body "$pk" > /tmp/iss.txt
title=$(grep '^TITLE' /tmp/iss.txt | cut -f2-)
labels=$(grep '^LABELS' /tmp/iss.txt | cut -f2-)
sed -n '/^BODY$/,$p' /tmp/iss.txt | tail -n +2 > /tmp/body.md
gh issue create --title "$title" --label "$labels" --body-file /tmp/body.md
doneSource of truth always remains the pack's tasks.json. If an issue and a tasks.json disagree, the tasks.json wins.