github Python analyzed 7a5bdb1

MadnessEngineering/Omnispindle

github

A comprehensive MCP-based todo management system, that serves as a central nervous system for Madness Interactive, a multi-project task coordination workshop.

maintainer
MadnessEngineering
license
first seen
2026-06-08
last seen
2026-08-21
releases · 30d
0
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged committed secret in MadnessEngineering/Omnispindle
capabilities 41 tools
transport stdio · http · sse counts 41 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • add_explanation
  • add_lesson
  • add_todo
  • check_quest
  • complete_todo
  • create_quest
  • delete_lesson
  • delete_todo
  • explain
  • find_relevant
  • get_context_bundle
  • get_lesson
  • get_todo
  • grep_lessons
  • inventorium_sessions_create
  • inventorium_sessions_fork
  • inventorium_sessions_genealogy
  • inventorium_sessions_get
  • inventorium_sessions_list
  • inventorium_sessions_spawn
  • inventorium_sessions_tree
  • inventorium_todos_link_session
  • link_quest
  • link_todos
  • list_lessons
  • list_project_todos
  • list_quests
  • list_todos_by_status
  • point_out_obvious
  • preflight_rag
  • query_todo_logs
  • query_todos
  • query_todos_near
  • read_agent_journal
  • regenerate_embedding
  • search_lessons
  • search_todos
  • update_lesson
  • update_quest
  • update_todo
  • write_agent_journal
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 7a5bdb1 · analyzer v33 · 2w ago

skills & prompt files 3

danger signals1

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 89

filesystem 15

  • fs (weak) MadnessEngineering-Omnispindle-7a5bdb1/scripts/host_watch.py :50 import shutil
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/__main__.py :8 import shutil
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/auth_flow.py :7 from pathlib import Path
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/auth_setup.py :143 with open(output_path, 'w') as f:
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/git_integration.py :10 from pathlib import Path
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/mqtt.py :3 import shutil
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/server.py :6 import shutil
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/token_exchange.py :18 from pathlib import Path
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/tools.py :2722 os.unlink(temp_file)
  • fs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/utils.py :130 with open(flow_path, 'r') as file:
  • fs MadnessEngineering-Omnispindle-7a5bdb1/test_api_client.py :9 from pathlib import Path
  • fs (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_add_todo_direct.py :7 from pathlib import Path
  • fs (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_auth_flow.py :7 from pathlib import Path
  • fs (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_http_server_bindings.py :14 from pathlib import Path
  • fs (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_user_identity.py :3 from pathlib import Path

shell / exec 8

  • shell (weak) MadnessEngineering-Omnispindle-7a5bdb1/scripts/host_watch.py :52 import subprocess
  • shell MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/__main__.py :9 import subprocess
  • shell MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/git_integration.py :8 import subprocess
  • shell MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/mqtt.py :2 import subprocess
  • shell MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/server.py :7 import subprocess
  • shell MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/tools.py :5 import subprocess
  • shell MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/utils.py :5 import subprocess
  • shell (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_git_integration.py :13 import subprocess

network 10

  • net (weak) MadnessEngineering-Omnispindle-7a5bdb1/scripts/host_watch.py :55 import urllib.request
  • net MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/api_client.py :4 import aiohttp
  • net MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/auth.py :13 import httpx
  • net MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/auth_setup.py :15 import urllib.parse
  • net MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/auth_utils.py :6 import httpx
  • net MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/embeddings.py :17 import httpx
  • net MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/token_exchange.py :17 import httpx
  • net MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/verify_token.py :2 from urllib.request import urlopen
  • net (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_auth_flow.py :8 import requests
  • net (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_user_identity.py :4 import requests

secrets 6

  • secrets MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/api_client.py :30 self.auth_token = auth_token or os.getenv("MADNESS_AUTH_TOKEN")
  • secrets MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/auth_flow.py :134 os.environ['AUTH0_TOKEN'] = token
  • secrets MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/embeddings.py :22 GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
  • secrets MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/stdio_server.py :91 auth0_token = os.getenv("AUTH0_TOKEN")
  • secrets MadnessEngineering-Omnispindle-7a5bdb1/test_api_client.py :24 auth_token = os.getenv("MADNESS_AUTH_TOKEN")
  • secrets (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_auth_flow.py :101 self.assertEqual(os.environ['AUTH0_TOKEN'], test_token)

database 13

  • db MadnessEngineering-Omnispindle-7a5bdb1/migration_scripts/migrate_todo_schema.py :31 from pymongo import MongoClient
  • db (weak) MadnessEngineering-Omnispindle-7a5bdb1/scripts/backfill_embeddings.py :24 from pymongo import MongoClient
  • db (weak) MadnessEngineering-Omnispindle-7a5bdb1/scripts/dedupe_todo_logs.py :16 from pymongo import MongoClient
  • db (weak) MadnessEngineering-Omnispindle-7a5bdb1/scripts/lesson_refiner.py :33 from pymongo import MongoClient
  • db MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/ai_assistant.py :17 from pymongo import MongoClient
  • db MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/context.py :3 from pymongo import MongoClient
  • db MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/database.py :4 from pymongo import MongoClient
  • db MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/scheduler.py :20 from pymongo import MongoClient
  • db MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/todo_log_service.py :21 import pymongo
  • db MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/tools.py :16 from pymongo import MongoClient
  • db (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_db_collections.py :3 from pymongo import MongoClient
  • db (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_search.py :11 from pymongo import MongoClient
  • db (weak) MadnessEngineering-Omnispindle-7a5bdb1/tests/test_todo_handler.py :19 from pymongo import MongoClient

tool registrations 41

  • add_todo MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :209
  • query_todos MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :220
  • get_todo MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :227
  • complete_todo MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :234
  • update_todo MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :241
  • list_todos_by_status MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :252
  • list_project_todos MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :259
  • delete_todo MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :267
  • search_todos MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :274
  • add_lesson MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :282
  • get_lesson MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :289
  • update_lesson MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :296
  • delete_lesson MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :303
  • regenerate_embedding MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :310
  • search_lessons MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :317
  • grep_lessons MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :324
  • list_lessons MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :331
  • query_todo_logs MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :339
  • explain MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :346
  • add_explanation MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :353
  • point_out_obvious MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :360
  • inventorium_sessions_list MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :368
  • inventorium_sessions_get MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :375
  • inventorium_sessions_create MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :382
  • inventorium_sessions_spawn MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :389
  • inventorium_sessions_fork MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :396
  • inventorium_sessions_genealogy MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :403
  • inventorium_sessions_tree MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :410
  • inventorium_todos_link_session MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :417
  • create_quest MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :425
  • check_quest MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :432
  • list_quests MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :439
  • link_quest MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :446
  • update_quest MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :453
  • query_todos_near MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :461
  • link_todos MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :468
  • get_context_bundle MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :476
  • find_relevant MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :483
  • preflight_rag MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :490
  • write_agent_journal MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :497
  • read_agent_journal MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/http_server.py :504

declared dependencies 17

  • fastmcp@==2.2.8
  • pymongo@>=4.0.0
  • paho-mqtt@>=2.0.0
  • python-dotenv@>=0.19.0
  • uvicorn@>=0.17.0
  • starlette@>=0.17.1
  • numpy@>=1.20.0
  • python-dateutil@>=2.8.2
  • python-jose@>=3.3.0
  • httpx@>=0.23.0
  • pytest@>=7.0.0
  • pytest-asyncio@>=0.21.0
  • black@>=22.0.0
  • isort@>=5.10.0
  • mypy@>=1.0.0
  • lmstudio@*
  • scikit-learn@>=1.0.0

transport_posture 3

  • network-listening, binds all interfaces, no auth detected MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/__main__.py :90 host = "0.0.0.0" # Force binding to all interfaces
  • network-listening, binds all interfaces, no auth detected MadnessEngineering-Omnispindle-7a5bdb1/src/Omnispindle/stdio_http_server.py :65 host = "0.0.0.0"
  • network-listening, binds all interfaces, no auth detected MadnessEngineering-Omnispindle-7a5bdb1/src/start_uvicorn.py :34 host = "0.0.0.0"