Persistent memory & issue tracking for AI coding agents — todos, changelogs, plans, sprints & session handoffs in one cross-project database over MCP. Built for Claude Code.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 52 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_changelog
-
add_checkpoint
-
add_item_to_current_sprint
-
add_note
-
add_plan_section
-
assign_item_to_sprint
-
clear_sprint
-
complete_checkpoint
-
complete_plan_checkpoint
-
consume_handoff
-
count_unreleased_changelog
-
create_decision
-
create_handoff
-
create_item
-
create_plan
-
create_sprint
-
delete_handoff
-
export_changelog
-
get_context_snapshot
-
get_handoff
-
get_item
-
get_plan
-
handoff_work
-
ingest_plan_file
-
list_changelog
-
list_checkpoints
-
list_decisions
-
list_handoffs
-
list_items
-
list_items_in_sprint
-
list_plan_sections
-
list_plans
-
list_projects
-
list_sprints
-
pickup_work
-
promote_checkpoint_to_item
-
promote_section_to_item
-
promote_section_to_sprint
-
reject_checkpoint
-
reject_plan_checkpoint
-
release_changelog
-
remove_item_from_current_sprint
-
remove_item_from_sprint
-
reopen_checkpoint
-
resolve_item
-
review_sprint
-
set_sprint
-
supersede_decision
-
update_decision
-
update_handoff
-
update_item
-
update_sprint
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 34f38f7 · analyzer v33 · 2w ago
skills & prompt files 14
- agent-rules fotodeveloper-dct-34f38f7/CLAUDE.md
- skill fotodeveloper-dct-34f38f7/dct/skills/clog/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/commit/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/dct-import/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/dct-init/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/handoff/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/pickup/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/plan-resolve-uncertain/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/plan-status/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/release/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/track-list/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/track-resolve/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/track-update/SKILL.md
- skill fotodeveloper-dct-34f38f7/dct/skills/track/SKILL.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 114
filesystem 24
- fs fotodeveloper-dct-34f38f7/dct/assets/__init__.py :9
from pathlib import Path - fs fotodeveloper-dct-34f38f7/dct/cli.py :12
from pathlib import Path - fs fotodeveloper-dct-34f38f7/dct/config.py :16
from pathlib import Path - fs fotodeveloper-dct-34f38f7/dct/core/checkpoints.py :13
# or rejected. The set is intentionally open (see `kind` column docstring in - fs fotodeveloper-dct-34f38f7/dct/core/plans/classify.py :16
import shutil - fs fotodeveloper-dct-34f38f7/dct/core/plans/ingest.py :23
from pathlib import Path - fs fotodeveloper-dct-34f38f7/dct/core/version.py :5
from pathlib import Path - fs fotodeveloper-dct-34f38f7/dct/db.py :10
from pathlib import Path - fs fotodeveloper-dct-34f38f7/dct/integrations/claude.py :7
import shutil - fs fotodeveloper-dct-34f38f7/dct/migrate.py :47
import shutil - fs fotodeveloper-dct-34f38f7/dct/paths.py :22
from pathlib import Path, PurePath - fs fotodeveloper-dct-34f38f7/dct/update.py :29
from pathlib import Path - fs (weak) fotodeveloper-dct-34f38f7/scripts/check_numbers.py :38
from pathlib import Path - fs (weak) fotodeveloper-dct-34f38f7/tests/test_check_numbers.py :8
from pathlib import Path - fs (weak) fotodeveloper-dct-34f38f7/tests/test_config.py :183
with open(config_path, "rb") as f: - fs (weak) fotodeveloper-dct-34f38f7/tests/test_hook_changelog_stop.py :15
import shutil - fs (weak) fotodeveloper-dct-34f38f7/tests/test_ingest_dogfood.py :12
import shutil - fs (weak) fotodeveloper-dct-34f38f7/tests/test_migrate.py :232
import shutil as _shutil - fs (weak) fotodeveloper-dct-34f38f7/tests/test_packaging.py :15
from pathlib import Path - fs (weak) fotodeveloper-dct-34f38f7/tests/test_paths.py :14
from pathlib import Path, PureWindowsPath - fs (weak) fotodeveloper-dct-34f38f7/tests/test_plan_ingest.py :137
from pathlib import Path - fs (weak) fotodeveloper-dct-34f38f7/tests/test_restructure.py :12
from pathlib import Path - fs (weak) fotodeveloper-dct-34f38f7/tests/test_web_app.py :184
from pathlib import Path - fs (weak) fotodeveloper-dct-34f38f7/tests/test_windows_support.py :84
from pathlib import Path
shell / exec 10
- shell fotodeveloper-dct-34f38f7/dct/cli.py :9
import subprocess - shell fotodeveloper-dct-34f38f7/dct/core/plans/classify.py :17
import subprocess - shell fotodeveloper-dct-34f38f7/dct/integrations/claude.py :8
import subprocess - shell (weak) fotodeveloper-dct-34f38f7/scripts/check_numbers.py :34
import subprocess - shell (weak) fotodeveloper-dct-34f38f7/tests/test_hook_bypass.py :10
import subprocess - shell (weak) fotodeveloper-dct-34f38f7/tests/test_hook_changelog_stop.py :16
import subprocess - shell (weak) fotodeveloper-dct-34f38f7/tests/test_hook_plan_autoscan.py :8
import subprocess - shell (weak) fotodeveloper-dct-34f38f7/tests/test_hook_task_mirror.py :12
import subprocess - shell (weak) fotodeveloper-dct-34f38f7/tests/test_plan_classify.py :7
import subprocess - shell (weak) fotodeveloper-dct-34f38f7/tests/test_server_wire.py :13
import subprocess
network 3
- net fotodeveloper-dct-34f38f7/dct/cli.py :8
import socket - net fotodeveloper-dct-34f38f7/dct/update.py :30
from urllib.request import urlopen - net (weak) fotodeveloper-dct-34f38f7/tests/test_cli_web.py :9
import socket
database 22
- db fotodeveloper-dct-34f38f7/dct/cli.py :174
import sqlalchemy as sa_mod - db fotodeveloper-dct-34f38f7/dct/core/analytics.py :16
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/changelog.py :5
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/checkpoints.py :5
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/decisions.py :15
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/engine.py :11
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/handoff.py :10
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/items.py :6
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/plans/crud.py :18
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/projects.py :6
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/sprint.py :23
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/core/sprints.py :32
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/db.py :12
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/export.py :6
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/mcp/server.py :234
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/migrate.py :48
import sqlite3 - db fotodeveloper-dct-34f38f7/dct/web/changes.py :13
import sqlalchemy as sa - db fotodeveloper-dct-34f38f7/dct/workflows/session.py :36
import sqlalchemy as sa - db (weak) fotodeveloper-dct-34f38f7/tests/test_engine.py :5
import sqlalchemy as sa - db (weak) fotodeveloper-dct-34f38f7/tests/test_migrate.py :409
import sqlite3 - db (weak) fotodeveloper-dct-34f38f7/tests/test_migration.py :11
import sqlalchemy as sa - db (weak) fotodeveloper-dct-34f38f7/tests/test_provenance.py :11
import sqlalchemy as sa
tool registrations 52
- list_projects fotodeveloper-dct-34f38f7/dct/mcp/server.py :326
- create_item fotodeveloper-dct-34f38f7/dct/mcp/server.py :349
- list_items fotodeveloper-dct-34f38f7/dct/mcp/server.py :413
- get_item fotodeveloper-dct-34f38f7/dct/mcp/server.py :466
- update_item fotodeveloper-dct-34f38f7/dct/mcp/server.py :483
- resolve_item fotodeveloper-dct-34f38f7/dct/mcp/server.py :553
- add_note fotodeveloper-dct-34f38f7/dct/mcp/server.py :592
- add_checkpoint fotodeveloper-dct-34f38f7/dct/mcp/server.py :621
- complete_checkpoint fotodeveloper-dct-34f38f7/dct/mcp/server.py :663
- reject_checkpoint fotodeveloper-dct-34f38f7/dct/mcp/server.py :692
- reopen_checkpoint fotodeveloper-dct-34f38f7/dct/mcp/server.py :723
- list_checkpoints fotodeveloper-dct-34f38f7/dct/mcp/server.py :749
- add_changelog fotodeveloper-dct-34f38f7/dct/mcp/server.py :779
- list_changelog fotodeveloper-dct-34f38f7/dct/mcp/server.py :827
- count_unreleased_changelog fotodeveloper-dct-34f38f7/dct/mcp/server.py :852
- release_changelog fotodeveloper-dct-34f38f7/dct/mcp/server.py :871
- export_changelog fotodeveloper-dct-34f38f7/dct/mcp/server.py :917
- set_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :958
- clear_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :997
- review_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1019
- create_handoff fotodeveloper-dct-34f38f7/dct/mcp/server.py :1060
- list_handoffs fotodeveloper-dct-34f38f7/dct/mcp/server.py :1107
- get_handoff fotodeveloper-dct-34f38f7/dct/mcp/server.py :1141
- consume_handoff fotodeveloper-dct-34f38f7/dct/mcp/server.py :1163
- delete_handoff fotodeveloper-dct-34f38f7/dct/mcp/server.py :1186
- update_handoff fotodeveloper-dct-34f38f7/dct/mcp/server.py :1202
- get_context_snapshot fotodeveloper-dct-34f38f7/dct/mcp/server.py :1260
- pickup_work fotodeveloper-dct-34f38f7/dct/mcp/server.py :1320
- handoff_work fotodeveloper-dct-34f38f7/dct/mcp/server.py :1413
- create_plan fotodeveloper-dct-34f38f7/dct/mcp/server.py :1508
- list_plans fotodeveloper-dct-34f38f7/dct/mcp/server.py :1551
- get_plan fotodeveloper-dct-34f38f7/dct/mcp/server.py :1586
- add_plan_section fotodeveloper-dct-34f38f7/dct/mcp/server.py :1598
- list_plan_sections fotodeveloper-dct-34f38f7/dct/mcp/server.py :1650
- complete_plan_checkpoint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1683
- reject_plan_checkpoint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1697
- promote_section_to_item fotodeveloper-dct-34f38f7/dct/mcp/server.py :1711
- promote_checkpoint_to_item fotodeveloper-dct-34f38f7/dct/mcp/server.py :1745
- promote_section_to_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1779
- create_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1820
- update_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1866
- list_sprints fotodeveloper-dct-34f38f7/dct/mcp/server.py :1931
- assign_item_to_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1965
- remove_item_from_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1981
- list_items_in_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :1995
- add_item_to_current_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :2015
- remove_item_from_current_sprint fotodeveloper-dct-34f38f7/dct/mcp/server.py :2030
- create_decision fotodeveloper-dct-34f38f7/dct/mcp/server.py :2046
- list_decisions fotodeveloper-dct-34f38f7/dct/mcp/server.py :2107
- update_decision fotodeveloper-dct-34f38f7/dct/mcp/server.py :2141
- supersede_decision fotodeveloper-dct-34f38f7/dct/mcp/server.py :2197
- ingest_plan_file fotodeveloper-dct-34f38f7/dct/mcp/server.py :2221
declared dependencies 9
- mcp@>=2,<3
- sqlalchemy@>=2.0
- python-ulid@>=2.0
- platformdirs@>=4.9.6; sys_platform ==
- psycopg@*
- flask@>=3.0
- markdown@>=3.5
- pytest@*
- pytest-cov@*