Skip to content

Releases: nikhilsoman/synlynk

v0.12.0 — Measurement & Reliability

Choose a tag to compare

@nikhilsoman nikhilsoman released this 15 Jul 13:10
0bec635

One sentence: the operational backbone gets provably reliable and provably accounted for — dispatched jobs finish their own git steps, a 5th zero-cost local agent joins the fleet, story routing gets real capability+quota+cost scoring with a fleet batch scheduler, and every dollar synlynk reports is now either structurally sourced or visibly flagged as an estimate.

Milestones

  • Job Lifecycle Ground-Truth Verification (#126#129) — dispatch worktree isolation, git-state-verified reconciliation, real files_touched, fail-loud migration.
  • Dispatch git-finalization reliability chain (#182#199) — synlynk finishes agents' git steps for them.
  • Capability Matrix Hardening + Fleet Scheduler (epic #137) — 3-stage routing (capability → quota gate → cost tie-break) + unattended batch scheduler.
  • Local Agent — a 5th dispatch agent running Aider over on-device oMLX inference, $0 per token.
  • Measurement Ledger Hardening (epic #210) — every cost figure synlynk shows is now structurally sourced or visibly flagged as an estimate.

71 PRs merged since v0.11.0 (2026-07-05). Full details: CHANGELOG.md · Release blog post

🤖 Generated with Claude Code

v0.11.0 — The Agent Ecosystem Operational Layer

Choose a tag to compare

@nikhilsoman nikhilsoman released this 05 Jul 10:34
4b06e85

Release pitch: synlynk v0.11.0 is the Agent Ecosystem Operational Layer — every dispatch now carries permissions and recovery paths, your terminal shows a live fleet of agents in real time, and the full workflow discipline is baked into every agent directive file at init.

What's in v0.11.0

Agent Autonomy Bridge (BS-12, PR #119)

  • synlynk dispatch --grant <perm> --revoke <perm> — per-task permission overrides with role defaults for 12 role types
  • synlynk configure agent <name> — per-project harness overrides in .agents/<agent>.json
  • synlynk jobs --stalled — list jobs with HANDOFF_PENDING sentinel
  • synlynk jobs handoff <job_id> [--to <agent>] — transfer stalled jobs to a new agent with full context preservation
  • synlynk doctor TC-5 — SOP presence check with interactive fix wizard and "I'm stuck" Claude escalation
  • synlynk sync --repair-sops — re-inject missing SOP sections without touching existing harness content
  • 6 SOP blocks baked into all directive files at init: PR Review Discipline · Brainstorm-First · Design→Plan→Build · Capability Allocation · Cost Visibility · Repo Hygiene

Live Job Observatory (BS-13, PR #117)

  • synlynk watch --live — fullscreen live terminal job board, auto-refreshes every 3s
  • Vizor Observatory tab — real-time fleet view in the browser dashboard

Vizor Efficiency Enrichment (BS-22, PRs #113, #118)

  • R/W/T budget bars per agent card
  • 6×4 Cycle × Agent capability matrix with full/partial/none badges
  • Per-agent radar hexagon SVGs (6-axis, 80×80px)

Ecosystem Status + Capacity (BS-16, PR #110)

  • synlynk status / synlynk status --json — terminal + machine-readable ecosystem snapshot
  • Three dispatch modes: eco / daily-grind / perf
  • Three new _preflight_dispatch() budget gates

Modularisation

  • synlynk/__init__.py split from 11,268L into 5 focused modules: probe.py, sentinel.py, upgrade.py, dispatch.py, _constants.py

Fixes

  • TC-2 false-positive fix arc (PRs #114#116) — eliminated blocking of all Agy dispatches in probed repos

Test count

868 tests (up from 616 at v0.10.0)

Full release notes

Blog post 48 — The Agent Ecosystem Operational Layer

v0.10.0 — Developer Preview

Choose a tag to compare

@nikhilsoman nikhilsoman released this 03 Jul 13:49
9588e52

synlynk v0.10.0 is the Developer Preview — install via pipx, set up your workspace in 60 seconds with the terminal wizard, and get a live browser dashboard showing what your agent team is doing.

Install

pipx install git+https://github.com/nikhilsoman/synlynk

What's in v0.10.0

FTUE + Onboarding

  • synlynk init --wizard — 6-screen terminal wizard: harness detection, workspace topology, skills scan, agent fleet, role assignment, launch cheat sheet
  • synlynk scan — re-runnable repo analysis with 14-heuristic stack fingerprinting and deep 6-stage pipeline (BS-20)
  • synlynk launch — FTUE task picker with 6-cycle SDLC view and 12 scan-triggered templates (BS-19)
  • synlynk roles — print agent role table; init and doctor now write per-agent role blocks into CLAUDE.md / GEMINI.md / AGENTS.md (BS-12a)

State + Migration

  • synlynk migrate — one-shot atomic import of project-docs/ markdown into state.db with write-through backup and DR sync
  • synlynk memory add / synlynk devlog append — write to state.db with immediate flat-file write-through
  • 5 new state.db tables: memory_entries, roadmap_arcs, roadmap_phases, cost_entries, devlog_entries

Daily-Driver Commands

  • synlynk jobs --summary <id> — structured job completion summary: files touched, cost, tokens, duration
  • synlynk release — Ship cycle stub: VERSION bump + CHANGELOG entry + blog post stub
  • synlynk status --platform — infrastructure health: harness compliance, agent availability, budget pulse

Browser Dashboard

  • synlynk viz — 5-view local dashboard at http://localhost:8721: Gantt, User Journeys, Architect Map (tube map), Effort & Cost, Efficiency report cards. Sticky note system feeds notes back into generate_context(). Zero new deps. (BS-21)

Packaging

  • pyproject.toml with [project.scripts] entry point — install via pipx install git+<url>
  • synlynk upgrade routes to pipx upgrade synlynk when installed via pipx
  • Python requirement raised to 3.9+

Tests: 747 passing (up from 503 at v0.9.9)


Full CHANGELOG: https://github.com/nikhilsoman/synlynk/blob/main/CHANGELOG.md

v0.9.7 — Grok Agent Support

Choose a tag to compare

@nikhilsoman nikhilsoman released this 26 Jun 18:29
0344a41

What's new in v0.9.7

Grok is now a first-class fourth agent peer alongside claude, agy, and codex.

Added

  • Grok agent registrationAGENT_CAPABILITY_BASELINES["grok"], discovery path ~/.grok, version probe via grok -v
  • GROK.md instruction file — managed by synlynk with synlynk:start/end markers; Co-Authored-By: Grok <noreply@x.ai>; injected via --rules at exec time
  • Init wizardsynlynk init --agents claude,agy,codex,grok creates GROK.md; grok now in the default agent set
  • Exec context injectionsynlynk exec grok prepends --rules GROK.md; headless (-p) mode also injects --rules .synlynk/context.md
  • Dispatch--always-approve for non-interactive dispatch; --permission-mode bypassPermissions fallback via agent profile; --output-format json for token extraction
  • Token extraction — nested usage.input_tokens/output_tokens JSON pattern for Grok structured output
  • Model version extraction — tier-2 path reads .agents/grok.json"model" field

Fixed

  • Stale time-sensitive fixture in test_collect_capability_drop_returns_finding

Tests

488 passing (15 new tests for Grok support)


Delivered by Agy (Tasks 1–3), Codex (Tasks 4–6), Claude (Task 7 + spec + plan + review).

v0.9.4 — Context, Dispatch, and Relay

Choose a tag to compare

@nikhilsoman nikhilsoman released this 24 Jun 12:23

What's new in v0.9.4

SQLite-primary task state

  • stories.status column — SQLite is now the single source of truth for task state
  • _generate_todo_md() writes project-docs/todo.md as a generated view
  • _import_todo_to_stories() syncs hand-written - [ ] items into the DB (idempotent, title-dedup)
  • synlynk story create auto-regenerates todo.md

Per-agent context profiles

  • .agents/<agent>.json overrides context_mode and context_max_bytes per agent
  • synlynk agent configure <name> — interactive profile writer
  • Explicit --context-mode CLI flag always beats the profile default

synlynk jobs — SQLite read

  • Reads live daemon_jobs table (not JSON file)
  • --all includes done/failed rows; --watch refreshes every 2s
  • Pre-flight gate (_preflight_dispatch) checks agent CLI is on PATH before every dispatch
  • synlynk dispatch gains --context-mode none|task|full

HTTP SSE relay broker

  • synlynk relay start [--port N] — stateless fan-out broker (default port 27472)
  • GET /events (SSE stream), POST /publish (JSON fan-out), GET /health
  • synlynk relay broadcast <body> [--kind motd|wellness|message|joke|custom]
  • 7 typed relay events: story_updated, job_dispatched, job_completed, alert_raised, context_checkpoint, table_changed, broadcast

VERIFY_SKIP sentinel

  • Fires informational alert when a job exits 0 but output shows no test/verify evidence
  • Builds compliance dataset for the Agent Behaviour (AB) epic

Dispatch fixes

  • subprocess.Popen now sets cwd=os.getcwd() — Agy no longer drifts to its scratch space
  • dispatch_flags key in AGENT_CAPABILITY_BASELINES--dangerously-skip-permissions now scoped to background dispatch only, not all Claude subprocesses
  • Agy prompt includes explicit ## Working Directory header

472 tests (+33 since v0.9.3)

Install / upgrade

curl -sSL https://raw.githubusercontent.com/nikhilsoman/synlynk/main/install.sh | bash

What's next

  • BS-2: Onboarding + Mode Taxonomy (synlynk doctor, agent state machine, progressive init)
  • BS-3: Agent Behaviour (instruction compliance measurement, per-agent variance dataset)
  • BS-4: Command Audit (OTel tracer, synlynk telemetry, hook wiring)

v0.9.3 — Async Daemon

Choose a tag to compare

@nikhilsoman nikhilsoman released this 23 Jun 17:25
a5908cf

What's new in v0.9.3

synlynk is now always-on. Agents can pull context without invoking the CLI each time.

synlynk daemon

synlynk daemon start               # fork-daemonize, write .synlynk/daemon.pid
synlynk daemon stop
synlynk daemon status              # running/stopped + queue depth + HTTP URL
synlynk daemon restart
synlynk daemon --install-service   # register with launchd / systemd / crontab
synlynk daemon --uninstall-service

HTTP API — localhost:27471

Method Path Description
GET /context Current context.md
GET /status Uptime, queue depth, pid
GET /jobs All jobs (filter with ?status=)
GET /jobs/<id> Single job + log tail
POST /dispatch Enqueue a job
GET /stories Story list
GET /stories/<id> Single story
GET /capability Capability ratings
GET /sentinel Active sentinel alerts
POST /checkpoint Force context regeneration

Persistent job queue

  • daemon_jobs table in state.db — survives restarts
  • Priority 1–10, dependency chains via depends_on JSON array
  • Zombie-safe process reaping via os.waitpid(WNOHANG)
  • Per-job commit — crash mid-dispatch never produces duplicate runs

Service installation

  • macOS: launchd plist → ~/Library/LaunchAgents/com.synlynk.daemon.plist
  • Linux: systemd user unit → ~/.config/systemd/user/synlynk-daemon.service
  • Fallback: @reboot crontab entry

432 tests passing. Full changelog: CHANGELOG.md

synlynk v0.9.2 — Team Onboarding + Consensus

Choose a tag to compare

@nikhilsoman nikhilsoman released this 23 Jun 01:26
9c39f54

What's new

  • synlynk join — new member onboarding: seeds devlog stub, regenerates AI context files (CLAUDE.md, GEMINI.md, AGENTS.md) with joining member's identity, prints team digest
  • synlynk team status — team digest view: all members, story assignments, token budget consumption, last-active timestamps
  • synlynk decide <topic> --panel <agents> — multi-agent consensus panel: dispatches panel agents, collects responses, synthesizes a unified decision via the first panel member; --record writes signed Decision record to project-docs/decisions/
  • --tokens <N> flag on synlynk story create — set estimated token budget on a story
  • Pull-before-write arbitration_check_upstream_divergence() warns before any write to project-docs/ if the local branch is behind remote

Fixes

  • None (feature-only release)

Upgrade

curl -sSL https://raw.githubusercontent.com/nikhilsoman/synlynk/main/install.sh | bash

Full changelog

See CHANGELOG.md and blog post #21.

v0.9.1 — Install + Init Hardening

Choose a tag to compare

@nikhilsoman nikhilsoman released this 22 Jun 01:56

What's fixed

synlynk init in any repo now works correctly

Three production gaps found when first using synlynk in an external repo (rxcc):

Install broken after package split
The v0.9.0 package split turned bin/synlynk.py into a 5-line shim, but install.sh still only copied the shim — leaving the synlynk/ package absent from ~/.synlynk/. Result: ModuleNotFoundError: No module named 'synlynk' on any machine that installed before this patch.

Fix: install.sh now copies synlynk/ to ~/.synlynk/lib/synlynk/. Curl installs download synlynk/__init__.py directly. The shim's sys.path is patched at install time to point at ~/.synlynk/lib/.

synlynk init generated blank skeletons over existing project docs
Running synlynk init in a mature repo with existing roadmap.md, todo.md, memory.md (at root or under project-docs/) always wrote blank git-history templates, losing real project content. Agents saw two conflicting doc sets.

Fix: synlynk init now searches for existing docs before generating anything — root level, project-docs/, project-prefixed variants (rxcc_memory.md), uppercase names. First match with >200 bytes is migrated verbatim. Blank skeletons from git history are last resort only.

Output now shows what happened:

✓ ./roadmap.md  (migrated from project-docs/roadmap.md)
✓ ./memory.md   (generated from git history)

Repos with root-level docs conflicted with project-docs/ convention
Repos that keep docs at the root (not under project-docs/) had no way to tell synlynk where to look. All ~35 hardcoded "project-docs/" strings are now configurable.

Fix: synlynk init --docs-dir <path> writes project_docs_dir to .synlynk/config.json. All downstream commands (generate_context, checkpoint, update_costs, synlynk scan --deep) respect it.

synlynk init --docs-dir .      # docs at repo root
synlynk init --docs-dir docs/  # docs under docs/

VERSION string corrected
synlynk --version was reporting 0.7.0 since the package split. Fixed to 0.9.00.9.1.

Upgrading

curl -sSL https://raw.githubusercontent.com/nikhilsoman/synlynk/main/install.sh | bash

Existing installs need to re-run the installer — the shim at ~/.synlynk/bin/synlynk needs to be updated and the package needs to be placed at ~/.synlynk/lib/synlynk/.

v0.9.0 — Kernel Fixes + Package Split

Choose a tag to compare

@nikhilsoman nikhilsoman released this 21 Jun 10:46

What's new

Dispatch quality

  • Scoped contextgenerate_context(scope="task:<id>") writes a minimal snapshot (story metadata, active tasks, up to 20 domain-filtered source files) instead of the full 7-day devlog dump
  • Relevant Files injection## Relevant Files section added to every dispatch prompt from the source-map scan cache
  • Verify contract## How to Verify: pytest tests/test_<story>.py injected per dispatch when a tests/ directory exists
  • Per-agent framing — Codex gets ## Task Criteria bullets; AGY gets Task: prefix + 2000-char context; Claude gets full narrative

Ed25519 identity signing

  • _ensure_identity_key() creates ~/.synlynk/identity.key on first use
  • _sign_capability_rating() signs every capability score write; capability_ratings.ed25519_sig now populated
  • synlynk identity init CLI subcommand

Anti-gaming quality cap

  • quality_auto capped at 5.0 when test_pass_rate == 1.0 and test_count < 3
  • A 1-test suite that always passes no longer scores identically to a 100-test suite

Package split

  • All application code moved to synlynk/__init__.py
  • bin/synlynk.py is now a 5-line shim — CLI entry point unchanged
  • Python 3.8 compatible (Optional[str] instead of str | None)

Tests

365 passing (up from 316 at v0.7.0)

Built with

Hybrid dispatch — Claude subagents (Tasks 1–4), AGY (Task 5), Codex (Task 7). First release where synlynk dispatched to itself to build itself.

v0.8.0 — Support Engineer Agent

Choose a tag to compare

@nikhilsoman nikhilsoman released this 21 Jun 10:21
ccd3454

What's new

Support Engineer Agent (synlynk agent run support)

synlynk now watches itself. On every push to main (and on a 6-hour schedule), the Support Engineer collects health signals across 5 dimensions, deduplicates against a 7/30-day history, dispatches Claude to investigate new findings, files GitHub issues with results, and opens draft fix PRs when the investigation produces a passing diff.

New commands:

  • synlynk agent run <name> — run a named agent (support, or any .agents/*.json config)
  • synlynk agent list — list configured agents and their last run time
  • synlynk agent run support --dry-run — print findings without filing issues or writing DB

Signal collectors:

  • Test suite health (pass rate trends)
  • Sentinel alerts (FLATLINE, SUCCESS_LOOP, QUOTA_EXHAUSTED)
  • Telemetry anomalies (duration spikes, error rate)
  • Capability score drops (agent routing degradation)
  • GitHub issues (open bug reports)

Deduplication: 7-day window for ephemeral signals, 30-day for structural findings. New autopilot_runs SQLite table tracks run history.

Agent config: .agents/support.json (stdlib JSON). Add more agents by dropping a new JSON file — the engine picks them up automatically.

GitHub Actions: .github/workflows/support-engineer.yml fires on push to main and on 0 */6 * * *. Requires ANTHROPIC_API_KEY secret.

Tests

342 passing (up from 318 in v0.7.0). 24 new tests cover all collectors, dedup windows, issue filing, fix attempt, dry-run no-side-effects, and cron idempotency.