Borrowing it
Nothing to install: this file belongs to Badminton-Apps/badman. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/Badminton-Apps/badman/develop/.specify/extensions/maqa-linear/commands/speckit.maqa-linear.populate.mdgit clone --depth 1 https://github.com/Badminton-Apps/badmanWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/badminton-apps/badman/speckit.maqa-linear.populate)<a href="https://agentmods.dev/commands/badminton-apps/badman/speckit.maqa-linear.populate"><img src="https://agentmods.dev/badge/commands/badminton-apps/badman/speckit.maqa-linear.populate/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/badminton-apps/badman/speckit.maqa-linear.populate"><img src="https://agentmods.dev/badge/commands/badminton-apps/badman/speckit.maqa-linear.populate.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00037 | $0.00837 |
| Opus 5.5 | $0.00015 | $0.00335 |
| Sonnet 5.5 | $0.00007 | $0.00167 |
| Haiku 4.5 | $0.00004 | $0.00084 |
Grade A, and why
speckit.maqa-linear.populate scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
EXISTING=$(curl -s -X POST https://api.linear.app/graphql \ How it starts
The opening of the file, as written. The whole thing — 103 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are populating a Linear team from spec-kit specs. Safe to re-run — existing issues are never duplicated.
Step 1 — Read config
source <(python3 -c "
import re
with open('maqa-linear/linear-config.yml') as f:
for line in f:
m = re.match(r'^(\w+):\s*\"?([^\"#\n]+)\"?', line.strip())
if m and m.group(2).strip():
print(f'{m.group(1).upper()}={m.group(2).strip()}')
")
Step 2 — Get existing issue titles from team
EXISTING=$(curl -s -X POST https://api.linear.app/graphql \
-H "Authorization: $LINEAR_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"query\":\"{ team(id: \\\"$TEAM_ID\\\") { issues { nodes { title } } } }\"}" | \
python3 -c "
import json,sys
data = json.load(sys.stdin)
for i in data['data']['team']['issues']['nodes']:
print(i['title'].lower().strip())
")
Step 3 — Discover local specs
python3 - <<'EOF'
import os, glob
for path in sorted(glob.glob('specs/*/tasks.md')):
name = os.path.basename(os.path.dirname(path))
has_plan = os.path.exists(f'specs/{name}/plan.md')
print(f"{name}|{path}|{'ready' if has_plan else 'no-plan'}")
EOF
Skip specs with no-plan status.
Step 4 — For each ready spec not already in Linear
Parse tasks from tasks.md
python3 - <<'EOF'
import re
content = open("specs/$SPEC_NAME/tasks.md").read()
title_match = re.search(r'^#\s+(.+)$', content, re.M)
title = title_match.group(1).strip() if title_match else "$SPEC_NAME"
tasks = []
for line in content.split('\n'):
m = re.match(r'^\s*-\s*\[[ x]\]\s*(.+)', line) or re.match(r'^\s*(?:\*\*)?\d+\.(?:\*\*)?\s+(.+)', line)
if m:
text = re.sub(r'\*\*', '', m.group(1)).strip()
if len(text) > 5:
tasks.append(text)
print("TITLE=" + title)
for t in tasks[:20]:
print("TASK=" + t)
EOF
Build description with markdown task list
## Tasks
- [ ] Task one
- [ ] Task two
...
Deps: <from spec.md or "none">
Create the issue in Todo state
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 103 lines · 37 tokens per session scan A 13afce479347
speckit.maqa-linear.populate is a command published in the GitHub repository Badminton-Apps/badman (13 stars, last pushed 2d ago), licensed Apache-2.0. It adds 37 tokens to every session and 837 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-04.
Other commands, from other repositories
template
Manage issue templates for streamlined issue creation.
add-note
Add an internal or external note to a ConnectWise PSA ticket.
fest-show
Show festival progression (in-progress tasks, roadmap, and dependency view).
sync-linear
Sync current work with Linear ticket status.
dispatcher
Use when you want the orchestrator to pick the next repo to work on across your whole portfolio — it enumerates candidate repos below the confinement root, resolves free/busy from each repo's session.lock lease, ranks the FREE ones by backlog priority × staleness × readiness, recommends the single most worthwhile one…
workpm
A project-management workflow for coordinating multiple AI workers through five stages. It includes task assignment, shared activity logs, worker replacement, and final checks.