Local, on-box LLM platform: build a model library, then run, chat, and serve it with MCP tools. Ships a DHIS2 assistant Chrome side panel. Source-available, proprietary.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 70 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_to_date
-
base64_decode
-
base64_encode
-
calc
-
char_count
-
convert_time
-
current_datetime
-
day_of_week
-
days_between
-
factorial
-
from_base
-
gcd
-
git_blame
-
git_branches
-
git_diff
-
git_log
-
git_ls_files
-
git_show
-
git_status
-
hex_decode
-
hex_encode
-
http_get
-
http_head
-
is_leap_year
-
is_prime
-
json_format
-
json_keys
-
json_minify
-
lcm
-
list_files
-
list_timezones
-
local_timezone
-
location
-
md5
-
mean
-
median
-
memory_delete
-
memory_get
-
memory_list
-
memory_search
-
memory_set
-
month_calendar
-
public_ip
-
read_file
-
read_url
-
reverse_text
-
run
-
run_python
-
search
-
search_files
-
sha256
-
slugify
-
tailscale_host
-
tailscale_ip
-
tailscale_status
-
time_in
-
timezone_offset
-
title_case
-
to_base
-
to_lower
-
to_upper
-
today
-
total
-
url_decode
-
url_encode
-
weather_forecast
-
weather_forecast_at
-
week_number
-
word_count
-
write_file
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 61adba9 · analyzer v33 · 4d ago
skills & prompt files 1
- agent-rules winterop-com-stabbur-61adba9/CLAUDE.md
danger signals3
- suspicious endpoint 93.184.216.34 winterop-com-stabbur-61adba9/tests/mcp_servers/http/test_http.py :75
target, headers, ext = app._pin_host(urlparse("https://93.184.216.34:8443/x?q=1")) - suspicious endpoint 169.254.169.254 (cloud metadata) winterop-com-stabbur-61adba9/tests/mcp_servers/web/test_web.py :46
"http://169.254.169.254/latest/meta-data/", - suspicious endpoint 93.184.216.34 winterop-com-stabbur-61adba9/tests/mcp_servers/web/test_web.py :54
app._guard_url("http://93.184.216.34/")
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 358
filesystem 124
- fs winterop-com-stabbur-61adba9/packages/stabbur-sandbox/src/stabbur_sandbox/__init__.py :14
from pathlib import Path - fs (weak) winterop-com-stabbur-61adba9/packages/stabbur-sandbox/tests/test_sandbox.py :72
root = run_code("python", "open('/oops', 'w'); print('WROTE')") - fs (weak) winterop-com-stabbur-61adba9/scripts/capture_hero.py :27
import shutil - fs (weak) winterop-com-stabbur-61adba9/scripts/check_ui_classes.py :23
from pathlib import Path - fs (weak) winterop-com-stabbur-61adba9/scripts/gen_extension_icons.py :34
from pathlib import Path - fs (weak) winterop-com-stabbur-61adba9/scripts/gen_tui_logo.py :14
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/arch.py :13
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/attach.py :12
from pathlib import Path - fs (weak) winterop-com-stabbur-61adba9/src/stabbur/benchmark/core.py :15
from pathlib import Path - fs (weak) winterop-com-stabbur-61adba9/src/stabbur/benchmark/dhis2_state.py :21
from pathlib import Path - fs (weak) winterop-com-stabbur-61adba9/src/stabbur/benchmark/plugin.py :14
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/capabilities.py :26
from pathlib import Path
show 28 more
- fs winterop-com-stabbur-61adba9/src/stabbur/cards.py :15
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/catalog.py :3
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/chat_tui/app.py :7
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/_common.py :4
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/chat.py :5
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/config.py :3
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/ext_dev.py :11
import shutil - fs winterop-com-stabbur-61adba9/src/stabbur/cli/health.py :3
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/library.py :5
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/mcp.py :3
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/project.py :4
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/cli/serve.py :229
# single address to open ("" printed as `http://:2222`), so name the loopback route to the - fs winterop-com-stabbur-61adba9/src/stabbur/cli/voice.py :5
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/config.py :26
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/consumers.py :18
import shutil - fs winterop-com-stabbur-61adba9/src/stabbur/doctor.py :20
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/fsatomic.py :14
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/gguf.py :21
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/hfcache.py :19
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/host.py :12
import shutil - fs winterop-com-stabbur-61adba9/src/stabbur/library/_manage.py :3
import shutil - fs winterop-com-stabbur-61adba9/src/stabbur/library/_model.py :5
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/library/_roots.py :3
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/library/_scan.py :4
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/locking.py :21
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/mcp_catalog.py :29
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :22
from pathlib import Path - fs winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/files/core.py :10
from pathlib import Path
84 more not shown — this panel samples each group; the count above is the real total.
shell / exec 20
- shell winterop-com-stabbur-61adba9/packages/stabbur-sandbox/src/stabbur_sandbox/__init__.py :11
import subprocess - shell (weak) winterop-com-stabbur-61adba9/scripts/capture_hero.py :29
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/cli/ext_dev.py :12
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/cli/health.py :152
import subprocess # noqa: PLC0415 - shell winterop-com-stabbur-61adba9/src/stabbur/cli/voice.py :240
import subprocess # noqa: PLC0415 - shell winterop-com-stabbur-61adba9/src/stabbur/consumers.py :19
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :23
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/network/app.py :19
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/shell/app.py :25
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/project/scaffold.py :15
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/runtime/serve_registry.py :15
import subprocess - shell winterop-com-stabbur-61adba9/src/stabbur/runtime/supervisor.py :33
import subprocess
show 8 more
- shell winterop-com-stabbur-61adba9/src/stabbur/voice/audio.py :13
import subprocess - shell (weak) winterop-com-stabbur-61adba9/tests/mcp_servers/git/test_git.py :4
import subprocess - shell (weak) winterop-com-stabbur-61adba9/tests/test_api.py :1103
"import subprocess, sys, time\n" - shell (weak) winterop-com-stabbur-61adba9/tests/test_chat_tui.py :5
import subprocess - shell (weak) winterop-com-stabbur-61adba9/tests/test_chat_tui_confirm.py :8
import subprocess - shell (weak) winterop-com-stabbur-61adba9/tests/test_e2e.py :9
import subprocess - shell (weak) winterop-com-stabbur-61adba9/tests/test_server.py :3
import subprocess - shell (weak) winterop-com-stabbur-61adba9/tests/test_supervisor.py :12
import subprocess
network 55
- net (weak) winterop-com-stabbur-61adba9/packages/stabbur-sandbox/tests/test_sandbox.py :64
r = run_code("python", "import socket; socket.create_connection(('1.1.1.1', 80), 2); print('LEAK')") - net (weak) winterop-com-stabbur-61adba9/scripts/capture_hero.py :28
import socket - net winterop-com-stabbur-61adba9/src/stabbur/agent.py :13
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/app.py :8
from urllib.parse import urlsplit - net winterop-com-stabbur-61adba9/src/stabbur/backends.py :412
Both managers list synchronously (a filesystem walk; a blocking ``httpx.get``), so each - net (weak) winterop-com-stabbur-61adba9/src/stabbur/benchmark/dhis2_state.py :23
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/chat_tui/app.py :464
import httpx # noqa: PLC0415 - keep the TUI module import-light - net winterop-com-stabbur-61adba9/src/stabbur/cli/chat.py :8
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/cli/init_wizard.py :159
import httpx # noqa: PLC0415 - only this path makes a request - net winterop-com-stabbur-61adba9/src/stabbur/cli/serve.py :86
import socket # noqa: PLC0415 - net winterop-com-stabbur-61adba9/src/stabbur/config.py :28
from urllib.parse import urlparse - net winterop-com-stabbur-61adba9/src/stabbur/doctor.py :18
import socket
show 28 more
- net winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/http/app.py :35
import socket - net winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/network/app.py :22
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/search/app.py :24
from urllib.parse import parse_qs, urlparse - net winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/utils/app.py :22
import urllib.parse - net winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/weather_yr/core.py :18
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/web/app.py :33
import socket - net winterop-com-stabbur-61adba9/src/stabbur/pageactions.py :32
from urllib.parse import urlparse - net winterop-com-stabbur-61adba9/src/stabbur/routers/serving/_base.py :8
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/routers/serving/proxy.py :20
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/runtime/__init__.py :21
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/runtime/supervisor.py :32
import socket - net winterop-com-stabbur-61adba9/src/stabbur/server.py :16
import httpx - net winterop-com-stabbur-61adba9/src/stabbur/targets.py :16
from urllib.parse import urlsplit - net winterop-com-stabbur-61adba9/src/stabbur/voice/kokoro.py :21
import httpx - net (weak) winterop-com-stabbur-61adba9/tests/benchmark/tests/test_benchmark.py :323
net = core.run_code("python", "import socket; socket.create_connection(('1.1.1.1', 53), 2)") - net (weak) winterop-com-stabbur-61adba9/tests/mcp_servers/http/test_http.py :9
import httpx - net (weak) winterop-com-stabbur-61adba9/tests/mcp_servers/network/test_network.py :5
import httpx - net (weak) winterop-com-stabbur-61adba9/tests/mcp_servers/weather_yr/test_weather.py :51
"""A stand-in for ``httpx.Client``: records request params, returns the sample forecast.""" - net (weak) winterop-com-stabbur-61adba9/tests/mcp_servers/web/test_web.py :9
from urllib.parse import urlparse - net (weak) winterop-com-stabbur-61adba9/tests/test_agent_stream.py :6
coverage. These drive the real parser through an ``httpx.AsyncClient`` backed by a - net (weak) winterop-com-stabbur-61adba9/tests/test_api.py :9
from httpx import ASGITransport, AsyncClient - net (weak) winterop-com-stabbur-61adba9/tests/test_assistants_registry.py :16
from httpx import ASGITransport, AsyncClient - net (weak) winterop-com-stabbur-61adba9/tests/test_backend_listing.py :10
from httpx import ASGITransport, AsyncClient - net (weak) winterop-com-stabbur-61adba9/tests/test_backend_load.py :14
from httpx import ASGITransport, AsyncClient - net (weak) winterop-com-stabbur-61adba9/tests/test_backend_release.py :16
from httpx import ASGITransport, AsyncClient - net (weak) winterop-com-stabbur-61adba9/tests/test_chat_confirm.py :19
from httpx import ASGITransport, AsyncClient - net (weak) winterop-com-stabbur-61adba9/tests/test_chat_target.py :17
from httpx import ASGITransport, AsyncClient - net (weak) winterop-com-stabbur-61adba9/tests/test_chat_tui.py :836
# `/model <name>` on a remote attach listed the server's models with a blocking httpx.get (5s
15 more not shown — this panel samples each group; the count above is the real total.
secrets 4
- secrets (weak) winterop-com-stabbur-61adba9/src/stabbur/benchmark/dhis2_state.py :68
password=os.environ.get("STABBUR_BENCH_DHIS2_PASSWORD", "district"), - secrets winterop-com-stabbur-61adba9/src/stabbur/cli/serve.py :241
os.environ["STABBUR_AUTH_TOKEN"] = auth_token # part of the serve→worker env API (_export_serve_env) - secrets (weak) winterop-com-stabbur-61adba9/tests/test_api.py :960
"open(sys.argv[1],'w').write(os.environ.get('MY_SECRET','')+'|'+sys.argv[2])\n" - secrets (weak) winterop-com-stabbur-61adba9/tests/test_cli.py :912
token = os.environ.get("STABBUR_AUTH_TOKEN", "")
tool registrations 70
- current_datetime winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :179
- today winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :188
- day_of_week winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :194
- time_in winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :201
- local_timezone winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :213
- timezone_offset winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :228
- convert_time winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :237
- list_timezones winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :259
- days_between winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :277
- add_to_date winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :283
- week_number winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :298
- is_leap_year winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :305
show 28 more
- month_calendar winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/datetime/app.py :312
- run_python winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/exec/app.py :21
- list_files winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/files/app.py :21
- read_file winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/files/app.py :32
- search_files winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/files/app.py :38
- write_file winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/files/app.py :48
- git_status winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :136
- git_log winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :146
- git_diff winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :160
- git_show winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :175
- git_branches winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :185
- git_ls_files winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :192
- git_blame winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/git/app.py :211
- http_get winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/http/app.py :251
- http_head winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/http/app.py :266
- memory_set winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/memory/app.py :33
- memory_get winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/memory/app.py :46
- memory_list winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/memory/app.py :53
- memory_search winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/memory/app.py :60
- memory_delete winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/memory/app.py :67
- public_ip winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/network/app.py :36
- location winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/network/app.py :51
- tailscale_ip winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/network/app.py :112
- tailscale_host winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/network/app.py :119
- tailscale_status winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/network/app.py :131
- search winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/search/app.py :160
- run winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/shell/app.py :167
- reverse_text winterop-com-stabbur-61adba9/src/stabbur/mcp_servers/utils/app.py :35
30 more not shown — this panel samples each group; the count above is the real total.
declared dependencies 19
- fastmcp@>=3.4.2
- fastapi@>=0.138.2
- hf-xet@>=1.5.1
- httpx@>=0.28.1
- huggingface-hub@>=1.21.0
- pydantic@>=2.0
- Listen@*
- textual@>=8.0
- typer@>=0.25.1
- uvicorn@>=0.49.0
- mlx-lm@>=0.31.3; sys_platform ==
- and@platform_machine ==
show 7 more
- darwin@*
- arm64@*
- s@# voice-design model). An older wheel resolves fine and then 404s on the model type.
- soxr@*
- .@*
- playwright@>=1.47
- trafilatura@>=1.12
perm:untrusted 1
- untrusted winterop-com-stabbur-61adba9/src/stabbur/chat_tui/app.py :467
data = httpx.get(f"{self._base}/v1/models", timeout=5).json()
transport_posture 1
- network-listening, binds all interfaces, no auth detected winterop-com-stabbur-61adba9/tests/test_manager_surface.py :158
assert ServerManager(host="0.0.0.0", port=1).base_url == "http://0.0.0.0:1"