Kody v2026.08.20
This release is about the surfaces you touch every day. List/detail screens now expand records inline instead of popping a side pane, integrations gain undoable disconnect and delete, and the status page gets favicons that follow real incidents. Invocation tokens also move to a per-package model so a bearer proves access to one package — not a grab bag of grants.
New
-
List/detail records now unfold inline inside the table. Secrets, integrations, MCP servers, memories, jobs, values, and the remaining admin screens expand the selected record under its own row — the same accordion packages already used. If a record is off-window or not found, it falls back to a pane so nothing vanishes. (#1594)
-
Disconnect or delete an integration with undo. Both actions use a double-check, then a short delayed-commit window where clicking Undo brings everything back before the change is committed. Built-in integrations stay operator-owned; you can only disconnect their accounts, but user-registered OAuth apps can be fully deleted. (#1574)
-
Invocation tokens now belong to one saved package. The URL names the owner and package, and the bearer proves access to that package only — the same model webhook secrets already use. The token form also describes each field and lets you pick from the package's real exports via checkboxes instead of typing names into a textarea. The unreliable source allowlist is gone; request
sourcestays as an optional log label. (#1553, #1571, #1570) -
Status-page favicons now switch with incidents. An open status tab shows a green check, red exclamation, or amber question mark depending on overall health — no JavaScript required, just the existing meta refresh. The favicons are also transparent so they sit cleanly on any tab chrome. (#1587, #1590)
-
Two new guides: the Kody factory map and local MCP tunnels. The factory guide gives you a concrete picture of hosted primitives; the tunnel guide covers Cloudflare Tunnel + Access, OAuth, and a forkable home MCP server starter. Both guides ship with editorial artwork and generated social share cards. (#1577, #1584, #1589)
-
Admin-only
community.listing.publishedsubscription topic. Operators can now subscribe to first-publish events for community listings, with idempotent delivery and metadata-only payloads. Republish does not fan out. (#1592) -
Join the Discord from the README and onboarding. A badge in the README and a compact link under the onboarding header point at the community Discord on every step. (#1578)
Improved
-
Community search misses now point you toward package authoring. Instead of a dead end, a no-match result offers a query-specific agent prompt that loads the authoring guides before creating a git-backed package. (#1576)
-
Onboarding does a better job of guiding first connections. Step 1 now requires a two-click confirmation before an unconnected user leaves, a prominent Authenticate callout appears for Cursor and Claude Code, and Step 2 scopes package search prompts to your username. The factory-map card also moved above the onboarding steps so it stays discoverable. (#1579, #1581)
-
Open Graph emoji now render with Twemoji. Profile and guide cards that include emoji like 🐨 show the real glyph instead of a tofu box. (#1572)
-
GitHub social preview now reads as this repository. The card carries the official Invertocat and
github.com/kentcdodds/kodyso Slack, Discord, and Twitter unfurls look like the repo, not the marketing site. (#1593, #1596) -
Prefilled secret links now focus the value field. Opening
/account/secrets/new?name=…puts the cursor on the secret value so you can paste immediately. (#1591) -
Account packages search keeps focus after the first keystroke. The caret no longer jumps out of the field on the first character. (#1585)
-
The built-in integrations badge uses a cleaner stroke key. The glyph insets inside the circle rim so the diagonal stays readable at small sizes. (#1541)
-
Docs and examples now use
home.example.cominstead of a personal hostname, and several guides and cleanup runbooks got a present-tense and accuracy pass. (#1588, #1599, #1567)
Fixed
-
Status history no longer paints amber days for isolated probe blips. One-minute failures that never opened an incident are cleared from daily rollups, and the uptime label uses the measured span. The one real Package runtime incident (HTTP 530, 6 minutes) stays amber. (#1575, #1580)
-
Oversized webhook bodies no longer hit a 413 under the ack queue cap. Bodies that exceed the serialized ceiling spill to temporary storage and hydrate on the consumer side, so every payload that passed the 1 MB ingress limit is accepted. (#1582)
-
Standalone scheduled jobs can now call
packages.invoke. The nightly thermostat job that crashed with a nullinvokeerror is bound the same way authenticated workflows already are. (#1583) -
Package apps can destructure
kody.mcpservers without them vanishing. Connected MCP server names are now advertised so destructuringkody.mcpbinds the real proxy instead ofundefined. (#1586, #1561) -
The admin system inbox no longer shows each email three times. The list query resolves the inbox label correctly and now includes the actual To address. (#1573)
-
Stale package artifacts refresh after an
already_publishedpublish. Jobs andpackages.invokeno longer execute an old bundle when the database already points at the latest commit. (#1563) -
Missing-package publish/adopt no longer fires false crash reports. (#1557)
-
Retired service-instance bindings and leftover storage purge lanes are fully removed now that production inventory is clean. (#1559, #1560, #1569)
-
The Nx cache worker can be redeployed on demand. (#1564)