github Python re-analysis due

itsOmidKarami/kraft

github

A local orchestrator for semi-autonomous agentic SDLC

maintainer
itsOmidKarami
licence
Apache-2.0
first seen
2026-09-16
last seen
2026-09-17
releases · 30d
7
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 19 tools
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
skills & danger signals github-tarball
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

danger signals1

code evidence vHEAD · github-tarball
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