github Python analyzed 6fdf091

Pher217/LibreControl

github

LibreControl — one universal /remote-control for every coding agent you run (Claude Code, Codex, Gemini, Cursor, Copilot, any MCP tool), across all your machines, centralized into the single chat app you choose: Telegram, WhatsApp, Slack, Signal, Discord. Self-hosted, with approvals and audit.

maintainer
Pher217
licence
Apache-2.0
first seen
2026-08-03
last seen
2026-08-04
releases · 30d
0
short id

Drift inferred · capture-to-capture

  1. HIGH code analysis flagged dynamic code execution in Pher217/LibreControl
  2. HIGH code analysis flagged dynamic code execution in Pher217/LibreControl
capabilities 4 tools
transport counts 4 tools · 0 res · 0 prompts permission surface via code analysis

tools

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

analyzed commit 6fdf091 · analyzer v33 · 2w ago

skills & prompt files 2

danger signals11

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

code files: 403

filesystem 14

  • fs Pher217-LibreControl-6fdf091/backend/apps/setup/env_writer.py :34 from pathlib import Path
  • fs (weak) Pher217-LibreControl-6fdf091/backend/apps/setup/tests/test_models.py :619 return open(spec.origin, encoding="utf-8").read()
  • fs Pher217-LibreControl-6fdf091/backend/apps/setup/views.py :10 from pathlib import Path
  • fs Pher217-LibreControl-6fdf091/backend/config/settings/base.py :2 from pathlib import Path
  • fs Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/codex_discovery.py :60 with open(path, encoding="utf-8") as fh:
  • fs Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/signing.py :16 from pathlib import Path
  • fs Pher217-LibreControl-6fdf091/host-agent/agent_host/claude_headless.py :9 import shutil
  • fs Pher217-LibreControl-6fdf091/host-agent/agent_host/config.py :19 from pathlib import Path
  • fs Pher217-LibreControl-6fdf091/host-agent/agent_host/daemon.py :22 from pathlib import Path
  • fs Pher217-LibreControl-6fdf091/host-agent/agent_host/pty_session.py :37 from pathlib import Path
  • fs Pher217-LibreControl-6fdf091/host-agent/agent_host/queue.py :25 from pathlib import Path
  • fs Pher217-LibreControl-6fdf091/host-agent/agent_host/transcript_tail.py :217 with open(path, "rb") as f:
show 2 more
  • fs (weak) Pher217-LibreControl-6fdf091/host-agent/tests/test_transcript_tail.py :256 with open(transcript_file, "ab") as f:
  • fs (weak) Pher217-LibreControl-6fdf091/host-agent/tests/test_wsclient_tail.py :96 with open(fake_transcript, "ab") as f:

shell / exec 5

  • shell Pher217-LibreControl-6fdf091/host-agent/agent_host/claude_headless.py :10 import subprocess
  • shell Pher217-LibreControl-6fdf091/host-agent/agent_host/codex_engine.py :14 import subprocess
  • shell Pher217-LibreControl-6fdf091/host-agent/agent_host/interactive_engine.py :13 import subprocess
  • shell (weak) Pher217-LibreControl-6fdf091/host-agent/tests/test_cli.py :7 import subprocess
  • shell (weak) Pher217-LibreControl-6fdf091/host-agent/tests/test_headless.py :9 - Unexpected exception from subprocess.run → is_error=True, no raise.

network 23

  • net Pher217-LibreControl-6fdf091/backend/apps/connectors/qr.py :16 from urllib.parse import urlparse
  • net Pher217-LibreControl-6fdf091/backend/apps/observe/delivery.py :8 import httpx
  • net (weak) Pher217-LibreControl-6fdf091/backend/apps/observe/tests/test_delivery.py :3 import httpx
  • net Pher217-LibreControl-6fdf091/backend/apps/setup/auth.py :25 from urllib.parse import urlparse
  • net Pher217-LibreControl-6fdf091/backend/apps/setup/serializers.py :10 #: with control characters can raise httpx.InvalidURL. Rejecting anything
  • net Pher217-LibreControl-6fdf091/backend/apps/setup/telegram_flow.py :12 import httpx
  • net (weak) Pher217-LibreControl-6fdf091/backend/apps/setup/tests/test_telegram_flow.py :8 import httpx
  • net Pher217-LibreControl-6fdf091/backend/apps/supervisor/brain.py :16 import httpx
  • net Pher217-LibreControl-6fdf091/backend/apps/telegram/telegram_api.py :9 import httpx
  • net (weak) Pher217-LibreControl-6fdf091/backend/apps/telegram/tests/test_fleet_context_injection.py :85 monkeypatch.setattr("apps.tier2.ollama.httpx.AsyncClient", _client_factory)
  • net (weak) Pher217-LibreControl-6fdf091/backend/apps/telegram/tests/test_telegram.py :69 monkeypatch.setattr("apps.tier2.ollama.httpx.AsyncClient", _FakeOllamaClient)
  • net (weak) Pher217-LibreControl-6fdf091/backend/apps/threads/tests/test_consumers.py :168 monkeypatch.setattr("apps.tier2.ollama.httpx.AsyncClient", _FakeOllamaClient)
show 11 more
  • net (weak) Pher217-LibreControl-6fdf091/backend/apps/threads/tests/test_dispatch.py :75 monkeypatch.setattr("apps.tier2.ollama.httpx.AsyncClient", _FakeOllamaClient)
  • net (weak) Pher217-LibreControl-6fdf091/backend/apps/threads/tests/test_dispatch_fleet_context.py :119 monkeypatch.setattr("apps.tier2.ollama.httpx.AsyncClient", _client_factory)
  • net Pher217-LibreControl-6fdf091/backend/apps/tier2/ollama.py :9 import httpx
  • net Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/client.py :18 import socket
  • net Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/pair.py :6 import socket
  • net (weak) Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/tests/test_client.py :1 """Unit tests for OrcBackendClient using httpx.MockTransport (no network, no mcp)."""
  • net (weak) Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/tests/test_pair.py :7 import httpx
  • net Pher217-LibreControl-6fdf091/host-agent/agent_host/enroll.py :7 The *http* parameter accepts an httpx.Client (or anything with a .post()
  • net Pher217-LibreControl-6fdf091/host-agent/agent_host/sdk_session.py :33 import httpx
  • net (weak) Pher217-LibreControl-6fdf091/host-agent/tests/test_enroll.py :11 import httpx
  • net (weak) Pher217-LibreControl-6fdf091/host-agent/tests/test_wsclient.py :12 from urllib.parse import parse_qs, urlparse

secrets 4

  • secrets Pher217-LibreControl-6fdf091/backend/config/settings/base.py :18 SECRET_KEY = os.environ.get("SECRET_KEY", "dev-key-do-not-use-in-production")
  • secrets Pher217-LibreControl-6fdf091/backend/config/settings/local.py :7 SECRET_KEY = os.environ.get("SECRET_KEY", "local-dev-key-not-for-production")
  • secrets (weak) Pher217-LibreControl-6fdf091/backend/config/settings/test.py :14 "PASSWORD": os.environ.get("POSTGRES_PASSWORD", "acc_password"),
  • secrets Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/client.py :53 self.token = token if token is not None else os.environ.get("LCTL_CONNECTOR_TOKEN", "")

tool registrations 4

  • librecontrol Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/server.py :32
  • notify Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/server.py :86
  • ask_human Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/server.py :91
  • request_approval Pher217-LibreControl-6fdf091/connectors/librecontrol-mcp/librecontrol_mcp/server.py :96

declared dependencies 25

  • Django@>=5.2,<7.0
  • djangorestframework@>=3.15
  • django-cors-headers@>=4.4
  • channels@>=4.2
  • channels-redis@>=4.2
  • celery@>=5.4
  • psycopg@>=3.2
  • redis@>=5.0,<9
  • django-redis@>=5.4
  • cryptography@>=43.0
  • python-dotenv@>=1.0
  • structlog@>=24.4
show 13 more
  • gunicorn@>=23.0
  • httpx@>=0.27
  • segno@>=1.6
  • uvicorn@>=0.30
  • whitenoise@>=6.7
  • pytest@>=8.3,<9
  • pytest-django@>=4.9
  • pytest-asyncio@>=0.24,<1
  • factory-boy@>=3.3
  • ruff@>=0.15,<0.17
  • mypy@>=1.11
  • bandit@>=1.9,<2
  • coverage@>=7.6