github Python analyzed de78165

Khronos31/embodied-ha

github

家に住み込む自律エージェント HAOS アドオン。Claude が家の様子を観察・探索・会話します

maintainer
Khronos31
licence
MIT
first seen
2026-08-16
last seen
2026-08-28
releases · 30d
0
short id

Drift inferred · capture-to-capture

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

capabilities 0 tools
transport counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit de78165 · analyzer v33 · 3w ago

skills & prompt files 1

danger signals14

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

code files: 213

filesystem 178

  • fs (weak) Khronos31-embodied-ha-de78165/docs/render_flowchart.py :16 from pathlib import Path
  • fs Khronos31-embodied-ha-de78165/embodied_ha/agent_prefs.py :58 with open(prefs_path(), encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/agy_update_freeze.py :47 self._fd = os.open(self._path, os.O_CREAT | os.O_RDWR, 0o600)
  • fs Khronos31-embodied-ha-de78165/embodied_ha/ambient_speech_context.py :13 from pathlib import Path
  • fs Khronos31-embodied-ha-de78165/embodied_ha/anomaly_state.py :393 with open(path, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/antigravity_setup.py :65 os.remove(path)
  • fs Khronos31-embodied-ha-de78165/embodied_ha/audio-mcp.py :11 import shutil
  • fs Khronos31-embodied-ha-de78165/embodied_ha/audio_stt.py :42 with open(path, "rb") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/auditory_context.py :56 with open(path, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/body-mcp.py :161 with open(path, "a", encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/body_state.py :174 with open(path, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/boundary.py :203 with open(path, encoding="utf-8") as f:
show 28 more
  • fs Khronos31-embodied-ha-de78165/embodied_ha/camera-mcp.py :152 with open(_body_location_path(), encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/camera_history.py :16 import shutil
  • fs Khronos31-embodied-ha-de78165/embodied_ha/chat.py :77 with open(character_file, encoding="utf-8") as fh:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/chat_context.py :29 with open(path, encoding="utf-8") as fh:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/chat_invoke.py :16 from pathlib import Path
  • fs Khronos31-embodied-ha-de78165/embodied_ha/chat_postprocess.py :54 os.remove(pending_file)
  • fs Khronos31-embodied-ha-de78165/embodied_ha/claude_setup.py :9 import shutil
  • fs Khronos31-embodied-ha-de78165/embodied_ha/codex_setup.py :9 import shutil
  • fs Khronos31-embodied-ha-de78165/embodied_ha/concentrate_hearing_files.py :6 from pathlib import Path
  • fs Khronos31-embodied-ha-de78165/embodied_ha/content_blocks.py :11 import shutil
  • fs Khronos31-embodied-ha-de78165/embodied_ha/counterfactual_state.py :40 with open(path, "a", encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/daemon.py :380 with open(prefs_file, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/daybook_rollup.py :60 with open(path, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/desire_state.py :223 with open(tmp, "w", encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/discover.py :102 with open(os.environ.get("EHA_PREFS_FILE", ""), encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/eha_config.py :52 with open(conf_path, encoding="utf-8") as fh:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/feature-flags.py :24 with open(FLAGS_FILE, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/files-mcp.py :62 fd = os.open(
  • fs Khronos31-embodied-ha-de78165/embodied_ha/game-mcp.py :352 with open(_cpu_session_path(cpu_session_id), encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/ha-control-mcp.py :48 with open(ACTIONS_LOG, "a", encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/harness_binary_update.py :63 import shutil
  • fs Khronos31-embodied-ha-de78165/embodied_ha/harness_pin.py :69 with open(path, "rb") as handle:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/harness_state.py :32 with open(flag_path(), encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/http-mcp.py :110 with _OPENER.open(request, timeout=TIMEOUT_SECONDS) as response:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/init_fts.py :22 with open(path, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/introspection_facts.py :128 os.unlink(tmp)
  • fs Khronos31-embodied-ha-de78165/embodied_ha/invoke_failure.py :88 with open(path, encoding="utf-8") as f:
  • fs Khronos31-embodied-ha-de78165/embodied_ha/loop.py :19 from pathlib import Path

138 more not shown — this panel samples each group; the count above is the real total.

shell / exec 46

  • shell (weak) Khronos31-embodied-ha-de78165/docs/render_flowchart.py :15 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/audio-mcp.py :12 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/body-mcp.py :12 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/camera-mcp.py :13 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/chat.py :16 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/chat_invoke.py :13 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/chat_postprocess.py :27 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/daemon.py :15 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/daybook_rollup.py :14 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/discover.py :26 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/eha_config.py :12 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/game-mcp.py :17 import subprocess
show 28 more
  • shell Khronos31-embodied-ha-de78165/embodied_ha/ha-control-mcp.py :14 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/ha-mcp.py :15 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/harness_binary_update.py :68 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/loop.py :14 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/lounge-mcp.py :12 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/mcp-schema-manifest.py :15 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/media_capture.py :5 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/memory-mcp.py :28 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/migrate_antigravity_structured_output.py :18 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/render-sensors.py :65 r = subprocess.run(
  • shell Khronos31-embodied-ha-de78165/embodied_ha/sensors-mcp.py :13 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/speak.py :13 import subprocess
  • shell Khronos31-embodied-ha-de78165/embodied_ha/web/server.py :266 r = subprocess.run(
  • shell (weak) Khronos31-embodied-ha-de78165/scripts/check_release_invariants.py :24 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/scripts/check_repo_hygiene.py :30 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/claude_allowedtools_canary.py :20 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/loop_shadow_harness.py :13 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_agent_prefs_step4.py :10 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_daybook_marker.py :12 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_fault_injection.py :19 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_game_mcp_cpu.py :4 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_harness_status_step4.py :12 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_http_mcp.py :3 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_instance_identity.py :5 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_invoke_agent.py :4 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_loop_shadow_harness.py :4 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_mcp_config.py :16 import subprocess
  • shell (weak) Khronos31-embodied-ha-de78165/tests/test_mcp_config_body_env.py :10 import subprocess

6 more not shown — this panel samples each group; the count above is the real total.

network 35

  • net Khronos31-embodied-ha-de78165/embodied_ha/antigravity_setup.py :6 from urllib.request import urlopen
  • net Khronos31-embodied-ha-de78165/embodied_ha/audio_stt.py :5 import urllib.error
  • net Khronos31-embodied-ha-de78165/embodied_ha/claude_setup.py :11 from urllib.request import urlopen
  • net Khronos31-embodied-ha-de78165/embodied_ha/codex_setup.py :14 from urllib.request import urlopen
  • net Khronos31-embodied-ha-de78165/embodied_ha/daemon.py :18 import urllib.request
  • net Khronos31-embodied-ha-de78165/embodied_ha/game-mcp.py :22 from urllib.error import HTTPError, URLError
  • net Khronos31-embodied-ha-de78165/embodied_ha/ha_api_path.py :18 from urllib.parse import unquote
  • net Khronos31-embodied-ha-de78165/embodied_ha/harness_binary_update.py :64 import socket
  • net Khronos31-embodied-ha-de78165/embodied_ha/http-mcp.py :18 from urllib.error import HTTPError, URLError
  • net Khronos31-embodied-ha-de78165/embodied_ha/lounge-mcp.py :19 from urllib.error import HTTPError, URLError
  • net Khronos31-embodied-ha-de78165/embodied_ha/migrate_antigravity_structured_output.py :22 from urllib.request import urlopen
  • net Khronos31-embodied-ha-de78165/embodied_ha/motion-history.py :18 import urllib.error
show 23 more
  • net Khronos31-embodied-ha-de78165/embodied_ha/spatial_context.py :7 import urllib.error
  • net Khronos31-embodied-ha-de78165/embodied_ha/speak.py :17 from urllib.parse import urlencode
  • net Khronos31-embodied-ha-de78165/embodied_ha/tts_discovery.py :7 from urllib.parse import urlsplit, urlunsplit
  • net Khronos31-embodied-ha-de78165/embodied_ha/web/server.py :6 import urllib.request
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_agent_setup_e2e_step3.py :109 with mock.patch.object(daemon.urllib.request, "urlopen", return_value=_mock_response()) as urlopen:
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_claude_setup.py :10 import urllib.request
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_codex_setup.py :12 import urllib.error
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_daemon_child_watchdog.py :56 with mock.patch.object(self.daemon.urllib.request, "urlopen", return_value=response) as urlopen:
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_daemon_loop_failure_alert.py :117 with mock.patch.object(self.daemon.urllib.request, "urlopen") as urlopen:
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_daemon_maintenance.py :87 with mock.patch.object(self.daemon.urllib.request, "urlopen", return_value=response) as urlopen:
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_daybook_empty_request_and_loop_recovery.py :165 with mock.patch.object(self.daemon.urllib.request, "urlopen", return_value=response) as urlopen:
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_files_mcp.py :156 import socket
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_ha_speaker_output.py :10 from urllib.parse import parse_qs, urlparse
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_harness_binary_update.py :7 import socket
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_harness_setup_step3.py :295 mock.patch.object(daemon.urllib.request, "urlopen", return_value=response) as urlopen, \
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_logout_step3.py :6 import urllib.request
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_motion_history.py :28 with mock.patch.object(self.module.urllib.request, "urlopen", return_value=response) as urlopen:
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_sensory_origin.py :119 with mock.patch.object(self.sensory_origin.urllib.request, "urlopen", return_value=mocked) as run_mock:
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_setup_guard.py :9 import urllib.error
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_setup_mutation_locks.py :8 import urllib.error
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_setup_terms.py :8 import urllib.error
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_speak.py :8 from urllib.parse import parse_qs, urlparse
  • net (weak) Khronos31-embodied-ha-de78165/tests/test_web_home_policy_api.py :8 import urllib.request

secrets 13

  • secrets Khronos31-embodied-ha-de78165/embodied_ha/audio_stt.py :38 token = clean(os.environ.get("SUPERVISOR_TOKEN"))
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/camera-mcp.py :110 return os.environ.get("SUPERVISOR_TOKEN", "")
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/camera_history.py :705 token=os.environ.get("SUPERVISOR_TOKEN", ""),
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/claude_setup.py :118 if os.environ.get("ANTHROPIC_API_KEY"):
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/daemon.py :165 return os.environ.get("SUPERVISOR_TOKEN", "")
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/discover.py :34 return os.environ.get("SUPERVISOR_TOKEN", "")
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/ha-control-mcp.py :33 return os.environ.get("SUPERVISOR_TOKEN", "")
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/ha-mcp.py :24 return os.environ.get("SUPERVISOR_TOKEN", "")
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/motion-history.py :25 return os.environ.get("SUPERVISOR_TOKEN", "")
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/render-sensors.py :33 return os.environ.get("SUPERVISOR_TOKEN", "")
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/spatial_context.py :32 return clean(os.environ.get("SUPERVISOR_TOKEN")) or clean(os.environ.get("HASSIO_TOKEN"))
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/speak.py :32 return os.environ.get("SUPERVISOR_TOKEN", "")
show 1 more
  • secrets Khronos31-embodied-ha-de78165/embodied_ha/web/server.py :491 HA_TOKEN = os.environ.get("SUPERVISOR_TOKEN", "")

database 1

  • db Khronos31-embodied-ha-de78165/embodied_ha/memory_state.py :16 import sqlite3