DEV Community

gracefullight
gracefullight

Posted on

oh-my-agent: shared Serena daemons, bounded retry loops

Five CLI releases, 15.0.2 through 15.0.6, shipped this week. The theme is long-running agents that stay well-behaved: fewer stray processes, bounded memory, and retry loops that know when to stop.

20 commits, 69 files, roughly 3,700 lines added. Most of it went into how oh-my-agent manages Serena, the code-search backend that every agent leans on.

What's new

  • Managed Serena runtime: version-gated Serena adapters are installed with a per-file SQLite symbol cache. Python no longer holds full workspace symbol trees in memory.
  • oma serena check: a new command that validates the Serena config and runs Dart checks against the shared daemon, with exit codes you can script against.
  • Scheduled daemon cleanup: a separate periodic task reaps idle shared Serena daemons. It verifies process identity before signaling a registered PID, so a recycled PID never gets killed by mistake.
  • Managed Dart diagnostics: package diagnostics reuse the managed Dart language server. Adapter revisions are tracked whenever a shared daemon starts or is replaced.
  • Doctor reporting: oma doctor now reports the Serena adapter state, in both the terminal footer and the JSON report.

What's fixed

  • Duplicate Serena stacks: when the shared server is unreachable, oma now reports the connection failure instead of spawning a private Serena stack. Managed contexts are normalized before registry lookup.
  • Daemon replacement under load: if the runtime revision changes while clients are attached, the loaded daemon is reused and the replacement waits until every client detaches. Active, busy, and legacy-revision cases are covered by tests.
  • Eager Dart analysis: Dart now defaults to analysis on file open, and uses the local stable SDK version when none is configured.
  • Unbounded orchestration retries: plans are pinned when dispatched, and retries are counted by workflow lineage and logical goal. Evidence failures are now separate from product failures, and a missing-metadata problem gets one bounded repair without restarting product planning.
  • Flaky checks: the bridge timeout test asserts the protected bridge's response instead of wall time. Boundary scanning retries transient TypeScript worker exits.

What's better

  • Quieter updates: oma update shows the changed Hyperframes components, deduplicates repaired links, and ends with one version summary. The inaccurate file totals and routine notices are gone.
  • Cleaner module boundaries: Serena config validation moved into the shared I/O layer, so serena check and setup no longer import the bridge command slice. Behavior is unchanged.
  • Verification: the duplicate-server fix was checked with 211 affected tests, type checking, lint, boundary checks, and a smoke test of symbol and definition lookup on Serena 1.7.0 with Dart 3.13.4.
  • Docs and tests: integrations/serena/README.md is expanded, with new Python tests for the Dart adapter, installer, and symbol cache.

Installation

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash
Enter fullscreen mode Exit fullscreen mode
# Windows (PowerShell)
irm https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.ps1 | iex
Enter fullscreen mode Exit fullscreen mode

Links

oh-my-agent is built for teams who orchestrate more than they prompt. Next up: tighter guardrails around long-running orchestration runs, so a stuck goal fails fast instead of looping.

https://github.com/first-fluke/oh-my-agent

Top comments (0)