An MCP-driven kanban for mixed human/agent work: a server-enforced human-approval gate before any task is marked done, with optional GitHub Projects sync.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 11 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_task
-
approve_done
-
delete_task
-
doctor
-
get_sync_status
-
list_tasks
-
move_task
-
propose_done
-
reject_review
-
setup_project
-
sync_to_github
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit b16ac12 · analyzer v33 · 1w ago
skills & prompt files 1
- agent-rules earlyprototype-kanbanger-b16ac12/AGENTS.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 36
filesystem 21
- fs earlyprototype-kanbanger-b16ac12/kanban_doctor.py :67
from pathlib import Path - fs earlyprototype-kanbanger-b16ac12/kanban_io.py :26
from pathlib import Path - fs earlyprototype-kanbanger-b16ac12/kanbanger/binding.py :41
from pathlib import Path - fs earlyprototype-kanbanger-b16ac12/kanbanger/cli.py :16
from pathlib import Path - fs earlyprototype-kanbanger-b16ac12/kanbanger/provision.py :38
from pathlib import Path - fs earlyprototype-kanbanger-b16ac12/kanbanger/resources.py :119
with open(kanban_path, 'r', encoding='utf-8') as f: - fs earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :335
with open(kanban_path, 'r', encoding='utf-8') as f: - fs (weak) earlyprototype-kanbanger-b16ac12/scripts/setup-venv.py :37
from pathlib import Path - fs earlyprototype-kanbanger-b16ac12/setup.py :2
from pathlib import Path - fs earlyprototype-kanbanger-b16ac12/sync_kanban.py :10
import shutil - fs (weak) earlyprototype-kanbanger-b16ac12/tests/conftest.py :5
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_add_task_shape.py :18
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_binding.py :21
import shutil - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_doctor_tool.py :28
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_ensure_review_column.py :5
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_kanban_doctor.py :20
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_pre_commit_hook_tty.py :31
import shutil - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_provision.py :14
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_setup_venv_claude_md.py :7
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_stdio_e2e.py :22
from pathlib import Path - fs (weak) earlyprototype-kanbanger-b16ac12/tests/test_sync_kanban_dotenv.py :36
from pathlib import Path
shell / exec 6
- shell earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :13
import subprocess - shell (weak) earlyprototype-kanbanger-b16ac12/tests/test_binding.py :22
import subprocess - shell (weak) earlyprototype-kanbanger-b16ac12/tests/test_doctor_tool.py :25
import subprocess - shell (weak) earlyprototype-kanbanger-b16ac12/tests/test_kanban_doctor.py :17
import subprocess - shell (weak) earlyprototype-kanbanger-b16ac12/tests/test_pre_commit_hook_tty.py :32
import subprocess - shell (weak) earlyprototype-kanbanger-b16ac12/tests/test_sync_kanban_dotenv.py :33
import subprocess
network 4
- net earlyprototype-kanbanger-b16ac12/kanban_doctor.py :591
import requests - net earlyprototype-kanbanger-b16ac12/kanbanger/resources.py :11
import urllib.request - net earlyprototype-kanbanger-b16ac12/sync_kanban.py :336
import requests - net (weak) earlyprototype-kanbanger-b16ac12/tests/test_doctor_tool.py :189
for the trap above: the trapped requests.post IS reached)."""
secrets 3
- secrets earlyprototype-kanbanger-b16ac12/kanbanger/resources.py :244
token = os.getenv("GITHUB_TOKEN") or dotenv_overlay.get("GITHUB_TOKEN") - secrets earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :819
if not os.getenv("GITHUB_TOKEN"): - secrets earlyprototype-kanbanger-b16ac12/sync_kanban.py :763
token = os.environ.get('GITHUB_TOKEN')
tool registrations 11
- add_task earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :281
- move_task earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :396
- delete_task earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :571
- list_tasks earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :689
- sync_to_github earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :784
- get_sync_status earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :905
- propose_done earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :951
- approve_done earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :1045
- reject_review earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :1138
- setup_project earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :1304
- doctor earlyprototype-kanbanger-b16ac12/kanbanger/tools.py :1366
declared dependencies 3
- mcp@>=1.12.0,<2.0.0
- requests@>=2.25.0
- python-dotenv@>=0.19.0