A local orchestrator for semi-autonomous agentic SDLC
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 19 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
approve_gate
-
create_work_item
-
ensure_repo
-
escalate_work_item
-
get_gate_artifact
-
get_work_item
-
list_work_items
-
pause_work_item
-
permission_request
-
reject_gate
-
report_progress
-
resume_work_item
-
retry_work_item
-
search
-
set_agent_overrides
-
set_chain_template
-
set_mr_labels
-
set_node_overrides
-
skip_work_item
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit f214d70 · analyzer v33 · 22h ago
skills & prompt files 25
- skill itsOmidKarami-kraft-f214d70/.agents/skills/beads/SKILL.md
- agent-rules itsOmidKarami-kraft-f214d70/AGENTS.md
- agent-rules itsOmidKarami-kraft-f214d70/CLAUDE.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft-lite/skills/gate/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft-lite/skills/init/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft-lite/skills/next/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft-lite/skills/start/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft-lite/skills/status/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft/skills/board/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft/skills/check/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft/skills/gates/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft/skills/handoff/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft/skills/onboard/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft/skills/prepare/SKILL.md
- skill itsOmidKarami-kraft-f214d70/plugins/kraft/skills/status/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/chain-review/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/code-review/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/fix-loop-judge/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/gate-review/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/mr-checks-repair/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/mr-metadata/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/plan/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/review-brief/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/security-review/SKILL.md
- skill itsOmidKarami-kraft-f214d70/src/kraft/skills/spec/SKILL.md
danger signals1
- dynamic code execution eval()/exec() itsOmidKarami-kraft-f214d70/tests/test_adapters_subprocess.py :1245
assert eval(out.read_text()) == weird
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 431
filesystem 176
- fs itsOmidKarami-kraft-f214d70/dev/build_lite_chain.py :14
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/dev/seed.py :16
from pathlib import Path - fs (weak) itsOmidKarami-kraft-f214d70/frontend/e2e/serve.py :24
import pathlib - fs itsOmidKarami-kraft-f214d70/plugins/kraft-lite/kl.py :18
import shutil - fs (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_backend_bd.py :9
from pathlib import Path - fs (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_backend_bd_real.py :13
import shutil - fs (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_detect.py :8
from pathlib import Path - fs (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_records.py :8
from pathlib import Path - fs (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_skills.py :11
from pathlib import Path - fs (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_walk_end_to_end.py :9
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/agent.py :5
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/ci.py :9
from pathlib import Path
show 28 more
- fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/gh.py :6
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/git.py :9
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/glab.py :6
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/models.py :8
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/mr.py :9
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/run.py :9
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/adapters/subprocess.py :8
import shutil - fs itsOmidKarami-kraft-f214d70/src/kraft/api/deps.py :18
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/api/routes/board.py :354
# 409 on. Fails open (True) when the node isn't in its own chain -- - fs itsOmidKarami-kraft-f214d70/src/kraft/api/routes/lifecycle.py :7
import shutil - fs itsOmidKarami-kraft-f214d70/src/kraft/api/routes/repos.py :5
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/api/routes/search.py :5
import shutil - fs itsOmidKarami-kraft-f214d70/src/kraft/api/routes/sessions.py :6
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/api/routes/settings.py :4
import shutil - fs itsOmidKarami-kraft-f214d70/src/kraft/api/routes/work_items.py :4
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/api/startup.py :7
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/auth.py :26
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/builtins.py :7
import shutil - fs itsOmidKarami-kraft-f214d70/src/kraft/cli/admin.py :10
import shutil - fs itsOmidKarami-kraft-f214d70/src/kraft/cli/item.py :8
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/client/actions.py :7
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/client/context.py :7
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/client/reads.py :9
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/client/transport.py :14
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/config.py :22
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/db.py :7
from pathlib import Path - fs itsOmidKarami-kraft-f214d70/src/kraft/doctor.py :14
import shutil - fs itsOmidKarami-kraft-f214d70/src/kraft/escalate.py :16
from pathlib import Path
136 more not shown — this panel samples each group; the count above is the real total.
shell / exec 65
- shell itsOmidKarami-kraft-f214d70/dev/seed.py :13
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/frontend/e2e/serve.py :27
import subprocess - shell itsOmidKarami-kraft-f214d70/plugins/kraft-lite/kl.py :19
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_backend_bd.py :7
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_backend_bd_real.py :14
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/plugins/kraft-lite/tests/test_walk_end_to_end.py :7
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/adapters/agent.py :11
from kraft.adapters import subprocess as _subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/adapters/beads.py :5
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/adapters/forge/git.py :8
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/adapters/subprocess.py :10
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/api/routes/lifecycle.py :9
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/api/routes/search.py :7
import subprocess
show 28 more
- shell itsOmidKarami-kraft-f214d70/src/kraft/builtins.py :8
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/cli/admin.py :13
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/config.py :16
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/executor/dispatch.py :21
from kraft.adapters import subprocess as _subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/executor/walk.py :14
from kraft.adapters import subprocess as _subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/gate_review.py :21
from kraft.adapters import subprocess as _subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/index/ingest.py :8
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/init.py :16
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/intent.py :11
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/render.py :14
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/sandbox.py :32
import subprocess - shell itsOmidKarami-kraft-f214d70/src/kraft/update.py :14
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/support/fake_agent.py :25
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/support/harness.py :6
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/support/server.py :6
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_adapters_beads.py :3
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_adapters_subprocess.py :6
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_api_lifecycle.py :9
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_api_repos.py :8
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_api_retry_open_log.py :7
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_api_work_items.py :10
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_archive_poller.py :6
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_bd_workspace.py :15
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_bead_bookkeeping.py :13
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_builtins.py :2
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_cli.py :7
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_cli_admin.py :10
import subprocess - shell (weak) itsOmidKarami-kraft-f214d70/tests/test_cli_doctor.py :8
import subprocess
25 more not shown — this panel samples each group; the count above is the real total.
network 25
- net itsOmidKarami-kraft-f214d70/dev/seed.py :18
import httpx - net (weak) itsOmidKarami-kraft-f214d70/frontend/e2e/serve.py :26
import socket - net itsOmidKarami-kraft-f214d70/src/kraft/api/perimeter.py :12
from urllib.parse import urlsplit - net itsOmidKarami-kraft-f214d70/src/kraft/api/routes/settings.py :8
from urllib.parse import urlsplit - net itsOmidKarami-kraft-f214d70/src/kraft/cli/admin.py :12
import socket - net itsOmidKarami-kraft-f214d70/src/kraft/client/reads.py :11
import httpx - net itsOmidKarami-kraft-f214d70/src/kraft/client/transport.py :16
import httpx - net itsOmidKarami-kraft-f214d70/src/kraft/notify.py :30
from urllib.parse import urlsplit - net itsOmidKarami-kraft-f214d70/src/kraft/update.py :63
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/conftest.py :5
import socket - net (weak) itsOmidKarami-kraft-f214d70/tests/support/server.py :5
import socket - net (weak) itsOmidKarami-kraft-f214d70/tests/test_api_gates.py :12
import httpx
show 13 more
- net (weak) itsOmidKarami-kraft-f214d70/tests/test_api_settings_steering.py :10
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/test_cli_admin.py :9
import socket - net (weak) itsOmidKarami-kraft-f214d70/tests/test_cli_service.py :134
import socket - net (weak) itsOmidKarami-kraft-f214d70/tests/test_client_act.py :9
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/test_client_read.py :6
`httpx.ASGITransport` does not run the app's lifespan the way `TestClient` does, - net (weak) itsOmidKarami-kraft-f214d70/tests/test_client_repo_context.py :9
from urllib.parse import quote - net (weak) itsOmidKarami-kraft-f214d70/tests/test_client_write.py :8
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/test_e2e_serve.py :14
import socket - net (weak) itsOmidKarami-kraft-f214d70/tests/test_needs_context.py :16
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/test_notify.py :13
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/test_pause_resume.py :16
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/test_skip_api.py :9
import httpx - net (weak) itsOmidKarami-kraft-f214d70/tests/test_update.py :13
import httpx
database 33
- db itsOmidKarami-kraft-f214d70/src/kraft/analytics.py :26
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/api/routes/search.py :6
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/auth.py :24
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/db.py :5
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/events.py :4
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/executor/dispatch.py :8
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/executor/walk.py :4
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/index/db.py :4
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/index/service.py :8
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/store/budget.py :3
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/store/chain.py :4
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/store/counters.py :3
import sqlite3
show 21 more
- db itsOmidKarami-kraft-f214d70/src/kraft/store/gates.py :3
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/store/repos.py :4
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/store/sessions.py :3
import sqlite3 - db itsOmidKarami-kraft-f214d70/src/kraft/store/work_items.py :5
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/support/api.py :8
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_board.py :9
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_gates.py :8
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_lifecycle.py :8
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_rate_limit_detail.py :6
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_retry_open_log.py :6
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_settings_templates.py :6
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_shutdown.py :4
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_api_work_items.py :9
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_db.py :2
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_diff_api.py :11
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_escalate_api.py :8
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_forge_run.py :11
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_index_db.py :3
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_item_overrides.py :9
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_permissions.py :12
import sqlite3 - db (weak) itsOmidKarami-kraft-f214d70/tests/test_progress_api.py :8
import sqlite3
tool registrations 19
- list_work_items itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :25
- get_work_item itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :32
- get_gate_artifact itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :39
- search itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :44
- create_work_item itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :51
- ensure_repo itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :80
- approve_gate itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :87
- reject_gate itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :95
- pause_work_item itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :109
- report_progress itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :116
- resume_work_item itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :123
- retry_work_item itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :130
show 7 more
- skip_work_item itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :137
- escalate_work_item itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :145
- set_mr_labels itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :154
- set_chain_template itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :162
- set_agent_overrides itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :170
- set_node_overrides itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :187
- permission_request itsOmidKarami-kraft-f214d70/src/kraft/mcp.py :211
declared dependencies 10
- mcp@>=2
- pyyaml@>=6
- psutil@>=5
- argcomplete@>=3
- fastapi@>=0.141.1
- uvicorn@>=0.52.4
- websockets@>=15
- sqlite-vec@>=0.1.9
- httpx@>=0.28.1
- fastembed@>=0.8