OpenSRE v1.1.0 — Claude Agent SDK, Neo4j memory, Teams, and a whole new investigation console
LatestOpenSRE v1.1.0
The biggest public update since launch. ~47 days of private development (~225 commits, 23+ PRs) landed in #17.
OpenSRE now runs on the Claude Agent SDK, stores episodic memory in Neo4j, ships a Microsoft Teams bot, and has a rebuilt investigation console that shows the work — not just a spinner and a paragraph.
Upgrade note: This is a large behavioral jump from v1.0.0. LangGraph is gone. Episodes live in Neo4j (not Postgres). LiteLLM is optional. Read Breaking changes before upgrading self-hosted installs.
Highlights
Claude Agent SDK investigation engine
The LangGraph orchestration layer is removed. Investigations now run on the Claude Agent SDK:
- Root investigator plans work and dispatches specialist subagents via the SDK
Tasktool - Progressive skill loading — metadata first, full
SKILL.md+ scripts on demand - Direct Anthropic by default; LiteLLM is an opt-in compose profile (
--profile litellm) - SDK upgraded 0.1.19 → 0.2.110
Background agents that finish the job
When subagents run in the background, the parent no longer stops early:
- Stream drained with
receive_messages()(SDK-recommended) - Tracks outstanding tasks from
TaskStarted/TaskNotification - Emits
background_waitingwhile work is in flight - Auto-continues and only emits the terminal
resultwhen all tasks complete
Mid-run message queue
Send more context while an investigation is running:
POST /threads/{id}/queue-message+ SSEmessage_queued- Debounced merge at turn boundaries
- Wired in Web UI and Teams
Interrupt and resume
Stop a runaway investigation, then continue:
- Simple-mode interrupt → run status
interrupted - Warm follow-up when the in-process session is still alive
- Cold resume via persisted
sdk_session_id - Follow-up composer on the investigation detail page
Neo4j episodic memory (redesign)
Past investigations are no longer a Postgres side-table:
:Episodenodes in Neo4j 2026.02 with vector search (neo4j-graphrag+ fastembed)- One episode per conversation (
correlation_id) - Agent-driven recall via the
memory-searchskill (no automatic pre-injection) - Strategy playbooks as
:Strategynodes - Agent-run traces still live in Postgres for the Investigations UI
Knowledge graph, agent-driven
Topology / blast-radius queries go through the infrastructure-neo4j skill after symptoms are known — not dumped into every prompt up front.
Investigation console overhaul
The web UI finally feels like an SRE console:
- Investigations list (
/team/agent-runs) — episode/thread summary as the primary title - Unified run trace: humanized tool labels, Skill → Bash nesting, turn collapse, thinking vs final result dedupe
- Nested agent tree with stable invocation IDs
- Memory hub polish (tabs, search, strategies, overview)
- Team context — human-authored operating facts injected into the system prompt
- Dashboard Investigate CTA, faster in-progress polling, Stop on the detail page
Microsoft Teams bot
First-class chat surface alongside Slack:
- New
teams-bot/on the Microsoft Teams SDK (microsoft-teams-apps) - Live SSE progress (humanized tools, nested Skill/Bash, current thought last)
- Adaptive Card Q&A / finals
make dev-teams/ compose--profile teams
New and expanded skills (~51 public)
| Skill | What it unlocks |
|---|---|
memory-search |
Mid-investigation episodic recall |
infrastructure-neo4j |
Topology / blast radius after symptoms |
platform-jenkins |
Jobs, builds, console across named controllers |
platform-argocd |
Argo CD inspect + guarded sync |
vcs-bitbucket |
Bitbucket Data Center via bkt |
vcs-github |
GitHub via gh |
project-jira |
Jira Data Center (PAT bearer + API v2) as well as Cloud |
Org-specific hostnames and defaults scrubbed from committed skill docs.
Architecture docs that match reality
docs/ARCHITECTURE.md rewritten for the public tree: Web UI + Slack + Teams entry points, SDK runtime, Neo4j memory, local ports, key files.
Notable bug fixes
Agent / SDK
- System-prompt edits reach the SDK via nested
agents.{id}.prompt.system - Nested tool-call attribution via stable invocation IDs
- Failed tool calls persisted (
PostToolUseFailure) instead of silently dropped - Interrupted runs normalized after SDK stop; failed background tasks finalize as
failed - API error classification:
subtype=success+is_error=Trueno longer treated as a clean win
Web UI
- Synthesize terminal result when SSE stream closes without a
resultevent - Dedupe in-flight follow-up turns; cancel-safe polling
- Stop button on agent-run detail page
- Skills tree expansion stable; Customized badge driven by live lineage
Teams bot
- Read SSE stream to close instead of exiting on first
resultevent - On queue
409, start follow-up run instead of dead-end error
Config / compose
- Direct Anthropic default; LiteLLM opt-in
ENABLED_SKILLSempty by default so team-level skill toggles work- Slack bot behind compose
--profile slacksomake devdoesn't require Slack tokens - Kubernetes skill: stop silent
--cluster-idno-op that caused redundantlist_podsstorms
Breaking changes for self-hosters
- LangGraph removed — custom extensions against
graph.py/nodes/will not work. - Episodes moved to Neo4j — Postgres episode tables dropped; v1 episode data is not migrated.
- Neo4j required for memory —
make devstarts it; configureNEO4J_*in.env. - No automatic memory/KG pre-injection — agents call
memory-search/infrastructure-neo4jwhen appropriate. - LLM config — set
ANTHROPIC_API_KEY; LiteLLM is optional (docker compose --profile litellm up). - Prompt config shape —
agents.{id}.prompt.system(nested). Flat LangGraph-era shapes are gone. - Ports — web UI is http://localhost:3002 (not 3000).
Quick start
git clone https://github.com/swapnildahiphale/OpenSRE.git
cd OpenSRE
cp .env.example .env
# Set ANTHROPIC_API_KEY in .env
make dev
# Open http://localhost:3002For Teams: make dev-teams (requires Teams app credentials in .env).
Links
- PR: #17
- Website: https://opensre.in
- Docs: https://opensre.in/docs
- Demo: https://demo.opensre.in
- Architecture: https://github.com/swapnildahiphale/OpenSRE/blob/main/docs/ARCHITECTURE.md
Full diff: 694 files changed, +69,645 / −22,456 lines since v1.0.0