Contributor-focused workflows: local setup details stay in SETUP.md at the repo root (Windows, troubleshooting, MCP/OpenClaw).
git clone https://github.com/Tracer-Cloud/opensre.git
cd opensre
make installmake install runs uv sync --frozen --extra dev and the analytics install helper. Use uv run opensre … from the repo root so you always hit this checkout’s .venv, not another opensre on your PATH.
opensre onboard
opensre investigate -i tests/e2e/kubernetes/fixtures/datadog_k8s_alert.jsonFrom the repo root:
make lint # ruff check
make format-check # ruff format --check (CI-enforced)
make typecheck # mypy app/
make test-cov # pytest + coverage (default unit suite)One-shot (includes heavier test-full): make check.
Before a PR, run at least make lint, make format-check, make typecheck, and make test-cov (see CONTRIBUTING.md).
Routing precedence, postprocessing transforms, compatibility seams, and the rule-extension checklist are documented in docs/routing-policy-architecture.md.
Tool schemas, provider adapters (agent_llm_client.py), and investigation message shapes are documented in docs/investigation-tool-calling.md (all LLM providers, not vendor-specific).
PR reviewers expect a visible demo (terminal log or screenshot) in the PR under Demo/Screenshot, not only tests. Copy the exact steps from this section into your PR description, then attach your terminal output or recording.
uv run opensre(TTY)./trust on(or confirm the elevated-action prompt when running/watch)./watch <pid> --max-cpu 80— expecttask … started.(use a real PID, e.g. the shell’s Python process)./watches— table columns include id, pid, kind, status, thresholds, last sample./unwatch <task_id>or/cancel <task_id>— then/watchesagain; status should show cancelled.- Optional: lower
--max-cpuso a threshold trips; after Telegram sends, the REPL prints one line:[task …] alarm fired: … (telegram delivered).
Automated equivalent (runs in make test-cov):
uv run pytest tests/cli/interactive_shell/test_watchdog_repl_e2e_demo.py -v --tb=short
Longer transcript (optional): tests/cli/interactive_shell/repl_watchdog_demo.md.
The dev container is defined under .devcontainer/. It builds from .devcontainer/Dockerfile (Python 3.13), then postCreateCommand creates .venv-devcontainer and runs pip install -e '.[dev]' (not uv). Docker Desktop, OrbStack, Colima, or another compatible runtime must be available on the host.
make benchmarkTo refresh README benchmark copy from cached results (no LLM calls): make benchmark-update-readme.
- Deploy this repository as a standard Python/FastAPI app using the repo
Dockerfileor your host's native Python workflow. - Set
LLM_PROVIDERand the matching API key (for exampleANTHROPIC_API_KEY,OPENAI_API_KEY— see.env.example). - Add integration and storage env vars your deployment needs.
Minimal LLM env:
export LLM_PROVIDER=anthropic
export ANTHROPIC_API_KEY=...Ensure the Railway project has Postgres and Redis and that the OpenSRE service has DATABASE_URI and REDIS_URI wired to them before deploying.
opensre deploy railway --project <project> --service <service> --yesIf the service never becomes healthy, confirm both URIs are set on the service.
After deploy:
opensre remote ops --provider railway --project <project> --service <service> status
opensre remote ops --provider railway --project <project> --service <service> logs --lines 200
opensre remote ops --provider railway --project <project> --service <service> logs --follow
opensre remote ops --provider railway --project <project> --service <service> restart --yesOpenSRE remembers the last provider, so you can shorten to:
opensre remote ops status
opensre remote ops logs --followopensre ships with two telemetry stacks, both opt-out:
- PostHog — anonymous product analytics (commands used, success/failure, rough runtime, CLI/Python/OS/arch, and limited command metadata).
- Sentry — crashes and errors (stack traces, environment, release).
Events are tagged with entrypoint, opensre.runtime, and deployment_method. Sensitive headers, paths, and secret-shaped keys are scrubbed before send.
A random install ID is stored under ~/.opensre/anonymous_id. PostHog distinct_id is scoped to that ID. Telemetry is off in GitHub Actions and pytest.
| Env var | PostHog | Sentry |
|---|---|---|
OPENSRE_NO_TELEMETRY=1 |
disabled | disabled |
DO_NOT_TRACK=1 |
disabled | disabled |
OPENSRE_ANALYTICS_DISABLED=1 |
disabled | unaffected |
OPENSRE_SENTRY_DISABLED=1 |
unaffected | disabled |
OPENSRE_SENTRY_LOGGING_DISABLED=1 |
unaffected | disables logger.error/logger.exception forwarding to Sentry; capture_exception unaffected |
Full opt-out:
export OPENSRE_NO_TELEMETRY=1Self-hosted users can set SENTRY_DSN to their project; unset uses the bundled default. SENTRY_DSN= (empty) drops events in before_send.
Set OPENSRE_DEPLOYMENT_METHOD to railway, ec2, vercel, or local (default local) to label Sentry events.
By default, outbound PostHog payloads are also appended to ~/.opensre/posthog_events.txt (rotates at 1000 lines). Disable:
export OPENSRE_ANALYTICS_LOG_EVENTS=0We do not collect alert contents, file contents, hostnames, credentials, raw CLI arguments, or PII by design.