Ghostty (and libghostty!) now has a 100% complete implementation of the Kitty Graphics Protocol. We support every feature, every option. We are the first terminal beyond Kitty to do this.
Most terminals stop at basic image placements, then give up on the long tail of other features. Ghostty covers all of them:
- Unicode placeholders (so it works in tmux)
- Relative placements (so images can be positioned relative to other images)
- Animation
- Scroll region handling (so images scroll properly with terminal scroll regions)
- All transport mediums: shared memory, temp files, etc.
- etc...
All of these features don't impact steady-state use (CPU or memory, besides raw code size). And for libghostty consumers, you can use the compile-time features flags to disable them completely.
I read the spec myself a hundred times. I read Kitty's source code to validate behaviors (our implementation is markedly different, so no GPL violation).
I also utilized agents, primarily for validation. I spun Fable and Sol in a loop for 3 weeks (pausing only when their dedicated subs exhausted limits) with a prompt to find mismatches between the spec, Kitty's reference implementation, and Ghostty.
And now we're done. Ghostty is the most compliant Kitty Graphics implementation (ignoring Kitty itself of course). And, this is all in libghostty, so now everyone can be perfectly compliant.
If your code sucks, your agent will too.
So, software fundamentals matter more than ever.
That's why I'm interviewing @unclebobmartin this Wednesday, live on YouTube.
Don't miss it. Link below.
New AI Infrastructure podcast: "Decision Records for AI" https://t.co/AenJyn6G3Z
And anyone I know using @InvictiSecurity ? I need a solution for managing vulnerabilities across a large estate.
Let's talk a bit about what makes the Superlogical multiplexer different architecturally from traditional terminal multiplexers! There's a lot (a LOT) more coming, but wanted to share a little bit about the terminal-specific part compared to tmux and zellij.
I've been hooked on system-wide ghost text for over a year — inline completion that follows you into every app, not just your editor. One problem: the tool I loved is macOS-only and closed source, and I
live on macOS and Linux.
So I built CompMe: an open-source, local-first inline completion + grammar engine in Rust. 🦀
The macOS app ships now — signed, notarized, free. Windows and Linux foundations already build and test natively in CI behind the same platform contract.
How it works:
• Type anywhere → a dim ghost continuation appears at your caret. Tab accepts a word, one key accepts everything, Esc dismisses. You stay in control, keystroke by keystroke.
• Hit the grammar shortcut → the word at your caret gets a vetted, in-place correction (underline + banner). The local model proposes; deterministic code decides if the proposal is safe enough to even show
— one ASCII word, case preserved, edit distance capped.
• Emoji shortcodes, typo fixes, US↔UK spelling, synonyms → instant local tables, zero model latency.
• Per-app + per-domain rules, Tab-means-indent opt-outs, browser domain restrictions, global snooze.
The parts I'm proudest of are the invisible ones:
🔒 Everything runs locally through llama.cpp (Metal on Apple Silicon). No telemetry, no cloud round-trip. History is opt-in, redacted before encryption, AES-256-GCM, key in the OS keychain. Secure fields
and terminal prompts block collection — fail closed.
⚙️ A pure event→command state machine with generation counters means a slow model response can never land in a field you already left. A completion meant for Mail must never appear in your chat window —
that's tested, not hoped.
🧪 ~1,900 tests across a 25-crate workspace. fmt + clippy + full suite gate every commit. Releases are provenance-attested.
Getting text into other apps' fields is the actual boss fight — atomic Accessibility writes, guarded clipboard fallbacks with change-count restore, stale-focus rejection, graceful degradation to a popup.
The blog post goes deep on all of it:
📖 https://t.co/yjKnOvsRzr
⭐ Code: https://t.co/dOIOTVE61T
Cotypist proved the idea. CompMe is the bet it deserves an open implementation — on every OS. Issues, audits, and PRs welcome.
HermesD 2026.7.11 is live.
This release brings much better monitoring and visibility for Hermes Agent.
You can now see more of what matters in one dashboard:
- verification progress
- failed checks
- active goals
- project state
- Kanban boards and blockers
- gateway drain / busy state
- scheduler and cron activity
- skills and integration freshness
- safer log previews with secret redaction
HermesD is still standalone and read-only. It does not write to Hermes Agent data. It simply gives you a clearer operational view of what your agent is doing, what is waiting, and what needs attention.
Less digging through files.
Less guessing.
More confidence while running Hermes Agent.
Release: v2026.7.11
GitHub: https://t.co/xBl9wzq8fH
PyPI: https://t.co/Jnxu16iBrW
@NousResearch
#HermesAgent #HermesD #AIAgents #AgentOps #DeveloperTools #OpenSource
🚀 OpenClaw Dashboard v2026.6.15 — shipped
Zero-dependency Go monitoring dashboard for OpenClaw AI bots. One static binary. Embedded SPA. stdlib only — no require block, no go.sum. Loopback-bound by default. CGO off. This release survives OpenClaw 2026.6's storage migration and adds 5 new observability features.
🧵 What's in it:
The migration that broke everything (and the fix)
OpenClaw 2026.6 ripped cron jobs + sub-agent tracking out of on-disk JSON and into a gateway-served SQLite store. Cron Jobs panel → blank. Sub-Agent panel → empty.
The catch: a zero-dependency build literally cannot read SQLite (that needs CGO or a third-party driver — both banned by design). So instead of caving on the constraint, both panels now source through the gateway CLI:
• Cron ← openclaw cron list --json
• Sub-agents ← openclaw tasks list --json --runtime subagent
Same shell-out pattern the dashboard already used for models list and status. CLI-first, with a fallback to the legacy cron/jobs.json for anyone still pre-migration. The tasks store doesn't expose per-run cost/tokens, so
the sub-agent cost column is dropped rather than showing fake zeros — honest beats pretty.
✨ 5 new features
1️⃣ Live channel health — a /readyz probe reads the gateway's failing[] and marks those channels unhealthy, overriding the old session-activity heuristic. Channel cards turn the Health value red. Probe down? Falls back to the heuristic.
2️⃣ Runtime Health panel from status --json — task-queue counts, an event-loop utilization gauge, plugin-compatibility warning badge, last-heartbeat age, channel summary. Opt into --deep via config for the event-loop + heartbeat blocks; lean status covers the rest.
3️⃣ Linux journald log fallback — systemd hosts logs to journald, no file to tail, so the Logs panel was empty. Records now synthesized from journalctl --user -o json (PRIORITY→severity, __REALTIME_TIMESTAMP→time). macOS path unchanged.
4️⃣ Live model catalog — display names + context-window limits from openclaw models list --json, cached with TTL + singleflight. Curated names still win; the catalog fills the gaps.
5️⃣ Install-independent gateway metadata — PID/uptime/RSS read straight from the lock file (openclaw-<uid>/gateway.<hash>.lock), correct on homebrew, raw binary, bun, AND source installs — not just npm. /healthz stays the liveness signal; pgrep is last resort.
➕ Bonus: cron delivery + flapping — delivery-outcome dots and a ⚡FLAPPING badge once a job logs 3 consecutive errors.
🐛 Bug fixes (mostly model display)
• Full model versions preserved everywhere — the curated fallback was collapsing glm-5.2→GLM-5, gpt-5.5→GPT-5. Now GLM-5.2, GPT-5.5, GPT-4.1 stay intact.
• Bare model ids resolved — session logs emit MiniMax-M3 / kimi-k2.7-code (no provider prefix) while the catalog is keyed by full id. Catalog now also indexed by bare id, so panels show real names (MiniMax M3, Kimi K2.7
Code) not collapsed fallbacks.
• Bare-id catalog name no longer shadows curated names (OpenClaw emits the raw id as the "name" when none is registered).
• Claude versions preserved too — claude-opus-4-7→Claude Opus 4.7, dated snapshots dropped, no more hardcoded 4.5.
• Agent & Model Config panel now shows each agent's inherited default — 2026.6 writes agents.defaults.model as a bare string with null per-agent models; that was rendering blank.
• Unknown Gemini id → tier-neutral "Gemini" instead of mislabeled "Gemini Flash".
• Gateway liveness honors EPERM — kill(pid,0)→EPERM was read as dead, killing lock metadata for a gateway under a different uid on shared hosts. Only ESRCH is dead now.
• Explicit JSON null status block omitted instead of rendering empty.
• Non-UTF-8 journald messages (byte-array form) decoded instead of dropped.
🔒 CI + supply chain
• gofmt now enforced in lint (golangci-lint v2 formatters) — unformatted code can't merge
• Cross-compiled darwin + linux, amd64 + arm64
• Every archive ships a CycloneDX SBOM
• Checksums keyless-signed with cosign
• All backend logic test-driven, make check-clean, validated by a multi-pass two-axis review + TDD coverage audit
No breaking changes. Every new field is additive and back-compatible.
👇 Release + binaries:
https://t.co/nBzzdq5T29
#golang #observability #opensource #AI
🚀 hermesd 2026.6.15 shipped.
A read-only terminal dashboard for Hermes Agent — one live screen for your whole ~/.hermes/: gateway, sessions, tokens, cost, tools, cron, skills, logs, memory, kanban, operations, and curator. No API keys. No network. Zero writes to agent state.
When you run an agent for real — a gateway across Telegram/Discord/Slack, cron jobs, dozens of sessions spawning sub-agents, 9 providers, skills, memory files — answering "is it healthy and where are my tokens going?" used to mean 6 commands + tailing logs. hermesd reads it all and refreshes automatically.
🆕 New in this release:
▸ Curator panel (13) — the newest memory-curation run: before→after skill counts, archived/pruned/added/consolidated, a per-tool call breakdown, the state-transition trail, model/provider, duration, and the LLM summary.
▸ Sessions → Billing & Context — per session: end reason, billing endpoint (billing_base_url), billing mode, and the model's context-window limit joined from context_length_cache.yaml.
▸ Tokens → By Endpoint + Cost Status — spend/tokens aggregated per billing endpoint (finer than per-provider), plus a reconciliation line splitting sessions into unknown / subscription-included / estimated. Costs now show authoritative $ for reported/exact/included and ~$ only when truly estimated.
▸ Gateway health — per-platform connection errors (e.g. discord "failed to reconnect"), active-agent count, restart-requested marker, ⚠ in the compact view.
▸ Operations → Response Store stats from response_store.db; PR-monitor reads now cover every naming family with per-repo dedup.
▸ Logs — extra streams: audit, mcp-stderr, workspace, workspace.error.
▸ Kanban — task workflow fields + a parent→child decomposition tree.
🔧 Fixed (the important part):
The agent had quietly changed several on-disk shapes and hermesd was reading stale formats — so panels silently blanked. Repaired: credential-pool list-vs-dict in auth.json, desktop build-stamp camelCase keys, retired pr-monitor keys, and cost-status vocabulary. To stop this recurring, I added an opt-in contract test (HERMESD_CONTRACT_TEST=1) that runs the collector against real ~/.hermes and fails the instant a populated field reads blank — catching the next drift before users do.
🛡️ Hardening:
- Rich markup-injection escaping on all untrusted ~/.hermes free-text (a [/] in a value could crash the TUI)
- symlink + path-escape guards on every file read (stays inside the Hermes home)
- SQL LIKE wildcard escaping in message search
- cache-preservation invariant: on any read error, the last-good data stays on screen — the dashboard never blanks
✅ Quality:
777 tests + 1 opt-in contract test, 99% coverage, ruff + mypy + pip-audit clean, CI matrix on Python 3.11/3.12/3.13, trusted-publish to PyPI.
Read-only. Fast. Minimal deps (Rich + Pydantic + PyYAML). Python 3.11+.
@NousResearch
⭐ https://t.co/tBh3g8rr6a
📦 pip install hermesd → run hermesd
#AIAgents #LLMOps #DevTools #Python #OpenSource #Observability
🚀 hermesd 2026.6.15 shipped.
A read-only terminal dashboard for Hermes Agent — one live screen for your whole ~/.hermes/: gateway, sessions, tokens, cost, tools, cron, skills, logs, memory, kanban, operations, and curator. No API keys. No network. Zero writes to agent state.
When you run an agent for real — a gateway across Telegram/Discord/Slack, cron jobs, dozens of sessions spawning sub-agents, 9 providers, skills, memory files — answering "is it healthy and where are my tokens going?" used to mean 6 commands + tailing logs. hermesd reads it all and refreshes automatically.
🆕 New in this release:
▸ Curator panel (13) — the newest memory-curation run: before→after skill counts, archived/pruned/added/consolidated, a per-tool call breakdown, the state-transition trail, model/provider, duration, and the LLM summary.
▸ Sessions → Billing & Context — per session: end reason, billing endpoint (billing_base_url), billing mode, and the model's context-window limit joined from context_length_cache.yaml.
▸ Tokens → By Endpoint + Cost Status — spend/tokens aggregated per billing endpoint (finer than per-provider), plus a reconciliation line splitting sessions into unknown / subscription-included / estimated. Costs now show authoritative $ for reported/exact/included and ~$ only when truly estimated.
▸ Gateway health — per-platform connection errors (e.g. discord "failed to reconnect"), active-agent count, restart-requested marker, ⚠ in the compact view.
▸ Operations → Response Store stats from response_store.db; PR-monitor reads now cover every naming family with per-repo dedup.
▸ Logs — extra streams: audit, mcp-stderr, workspace, workspace.error.
▸ Kanban — task workflow fields + a parent→child decomposition tree.
🔧 Fixed (the important part):
The agent had quietly changed several on-disk shapes and hermesd was reading stale formats — so panels silently blanked. Repaired: credential-pool list-vs-dict in auth.json, desktop build-stamp camelCase keys, retired pr-monitor keys, and cost-status vocabulary. To stop this recurring, I added an opt-in contract test (HERMESD_CONTRACT_TEST=1) that runs the collector against real ~/.hermes and fails the instant a populated field reads blank — catching the next drift before users do.
🛡️ Hardening:
- Rich markup-injection escaping on all untrusted ~/.hermes free-text (a [/] in a value could crash the TUI)
- symlink + path-escape guards on every file read (stays inside the Hermes home)
- SQL LIKE wildcard escaping in message search
- cache-preservation invariant: on any read error, the last-good data stays on screen — the dashboard never blanks
✅ Quality:
777 tests + 1 opt-in contract test, 99% coverage, ruff + mypy + pip-audit clean, CI matrix on Python 3.11/3.12/3.13, trusted-publish to PyPI.
Read-only. Fast. Minimal deps (Rich + Pydantic + PyYAML). Python 3.11+.
@NousResearch
⭐ https://t.co/tBh3g8rr6a
📦 pip install hermesd → run hermesd
#AIAgents #LLMOps #DevTools #Python #OpenSource #Observability
As artificial intelligence continues its disruption of the tech industry, the future of work for developers is shifting from writing implementation details to becoming "explorers of problems".
ATDD IS the next generation of programming language.
📽️ Watch now (link in bio)
Released hermesd v2026.6.5.
hermesd is a terminal dashboard for Hermes Agent. It gives you one place to quickly see what your agent is doing, what is running, what needs attention, and what changed recently.
New in this release:
- Kanban view for active, blocked, and recent agent work
- Operations view for runtime activity
- Better Gateway and platform visibility
- More log views, including update, dashboard, gateway error, and crash logs
- Richer session details
- Better cron and configuration visibility
- Installed hermesd version shown in the header
- Updated docs and release packaging
Install or upgrade:
pip install -U hermesd
Run:
hermesd
Release:
https://t.co/QmzGsDeCZG
PyPI:
https://t.co/Jnxu16iBrW
#AI #AIAgents #OpenSource #Python #DevTools #Automation #TerminalUI #HermesAgent
@NousResearch
hermesd 2026.6.3 is out — a read-only TUI dashboard for the Hermes AI agent.
▎
▎ If you run Hermes Agent, you've probably wished for a single pane of glass over everything it's doing — sessions, token spend, tool calls, cron jobs, providers, logs, memory. That's hermesd: a live terminal dashboard that
▎ reads straight from ~/.hermes/ and renders it in a 10-panel Rich UI.
▎
▎ The hard constraint that shapes the whole project: hermesd is strictly read-only. It never writes to the agent's data directory and never imports a line of agent code. It's a pure observer — so it can't corrupt the thing
▎ it's watching. That discipline runs deep: read-only SQLite URIs, cache-preservation on transient errors (the display never blanks), and WAL-aware snapshots so it sees uncommitted data without touching the live DB.
▎
▎ What's in 2026.6.3:
▎ 🔒 Cleared CVE-2026-45409 by bumping a transitive dependency — lockfile-only, runtime closure untouched.
▎ 🧱 Refactored the token-summary path to build its validated model once at the boundary instead of mutating it in place, so Pydantic validation can no longer be skipped.
▎ ✅ Added regression tests pinning the three behaviors that refactor had to preserve.
▎
▎ No new features in this one — it's a security-and-quality release. Sometimes the best release is the one nobody notices because nothing broke.
▎
▎ Built in Python 3.11+, tested across 3.11/3.12/3.13, 396 tests, TDD throughout. MIT licensed.
▎
▎ 👉 https://t.co/tBh3g8rr6a
▎
▎ #Python #AIagents #OpenSource #DevTools #TUI #Observability
OpenClaw Dashboard v2026.6.1 is shipped 🚀
▎
▎ A zero-dependency Go binary + embedded SPA for real-time monitoring of the OpenClaw AI gateway. No npm tree, no go.sum — just stdlib. This release wasn't about flashy features; it was the unglamorous, trust-building work
▎ that most changelogs skip.
▎
▎ 🔒 Security held the line. Mid-release, the govulncheck gate caught two reachable Go stdlib CVEs (net/textproto + crypto/x509). I bumped the toolchain go1.26.3 → go1.26.4, re-verified clean, and refused to tag until it was
▎ green. Every artifact ships with an SBOM and a keyless cosign signature — supply chain stays tight, no shortcuts.
▎
▎ 🐛 Three real bugs killed — each one revert-tested:
▎ • A log-timestamp parser that could infinite-recurse into a stack overflow on malformed input
▎ • A model-cache deadlock where one panicking refresh left every waiting request hung forever
▎ • Dashboard panels rendering blank when a metric hit zero or a plugin lacked a label
▎
▎ Every fix landed with a regression test — and I proved each test by reverting the fix and watching it fail. That's the difference between a test that guards a bug and a test that just happens to pass today. Proof, not
▎ vibes.
▎
▎ ⚙️ Plus hardening: observable cache-discard warnings (no more silent drops), defense-in-depth HTTP timeouts, a bounded --refresh CLI, and magic numbers promoted to named constants.
▎
▎ 📦 Multi-platform signed binaries (darwin/linux × amd64/arm64), a Homebrew tap, and signed checksums. CI runs vet + lint + race + govulncheck on every single PR.
▎
▎ Open source, MIT-licensed, built entirely in the open — CHANGELOG, build logs, and the full review trail are all public.
▎
▎ 👉 https://t.co/Vh7DLZmIp7
▎
▎ #golang #opensource #devops #securityengineering #observability
You asked for it, so here it is: a deep-dive on my new /handoff skill.
It's an alternative to /compact that gives you WAY more flexibility with your context window.
- Think of an idea, handoff to another agent to implement
- Grill, handoff to prototype, handoff BACK
Enjoy:
Hermes Agent now has access to hundreds of browser skills through @browserbase’s new https://t.co/SZ93w9Z0mk hub, so agents can more reliably perform any task on the internet. You can try a skill from their catalog or contribute your own.