π¨ Your assistant's home β the memory, keys, code, and automations your AI agent keeps, portable across every MCP host. Built on Cloudflare Workers.
by kentcdoddsTypeScript
Last 12 weeks Β· 905 commits
4 of 6 standards met
Intent Stop from treating session-branch git pushes as real source updates. Opening a session must stay isolated: omit and you get a new workspace, because never-edited is not the same as abandoned. Summary Opening a repo session git-pushes on the source Artifacts repo. Those pushes are now ignored in fan-out, same as session-fork Artifacts repo names. without always mints a new session. Two callers of the same source must not share a workspace that has not checkpointed yet. Pass to resume that conversation's active session. Edited sessions stay isolated either way. Docs updated so handlers are not told that every push on a managed repo fans out. Live stop already shipped in (handler skips ). This PR is the platform backstop so the next package cannot recreate the loop. Testing β 10 passed β 1 passed System changes System recap β extends repo-sessions (medium risk) Mode: recap Β· Base: @ Β· Head: Classification: extends β session-branch pushes no longer fan out as . Open-session isolation is unchanged: omit and mint a new session. Primitives touched System map Session open still git-pushes , but that ref no longer fans out as , so a handler cannot open another session from the open itself. Legend:** green = composes (wiring only) Β· amber = extended by this PR Β· red = new primitive Β· gray = context (unchanged, included only when an edge crosses it). Change flow Before / after
Intent Kent is at ~19.9k / 20k active repo sessions after the D1 catalog cutover. Leftover unused rows were hydrated into and still count against entitlements. The sweeper was due but only processed ~100 git-heavy workspace cleanups per tick, so the pile never drained. This PR drops unused due catalog rows immediately and finishes leftover hydrate-flag cleanup. Follow-up: #1465. Summary Unused (never-checkpointed) due sessions leave the catalog in one SQL pass so / entitlements drop immediately Workspace Durable Objects then purge in bounded alarm batches; unused cleanup no longer waits on remote branch deletes Next-due scheduling uses bounds instead of loading every catalog row Removes the leftover flag Edited sessions ( set) keep the 7-day idle window Not in this PR (see #1465): retiring the no-op lane name, sweeping leftover Artifacts session branches, and resume-by-source to stop unused-session leaks. Testing on , , System changes System recap β extends existing primitives (medium risk) Mode: recap Β· Base: Β· Head: this branch Classification: extends β unused due catalog rows drop in one SQL pass; workspace purge is batched; next-due no longer loads the full catalog. Primitives touched System map Unused leftover sessions leave the per-user catalog first so entitlement counts drop; workspace purge continues on the index alarm. Legend:** green = composes (wiring only) Β· amber = extended by this PR Β· red = new primitive Β· gray = context (unchanged, included only when an edge crosses it). Before / after
Intent Stop making a maintainer edit after a valid individual signing comment. Record the commenter on automatically, and stop tests from pinning the live allowlist or signer roster. Summary Vojta's comment on #1233 was the exact phrase. That part worked. Nothing recorded him because the workflow only ran on pull request events, and the designed next step was a manual edit on . job checks out only (never the PR head), records the commenter's login when the body is exactly , commits to , and re-runs the CLA check Only the commenter is recorded; bots are ignored; Entity CLA stays a maintainer step Jobs use glanceable emoji (, ) to match Validate/Preview After recording, wait for an in-flight CLA run on that head SHA before re-running it, so a check that started against the old signers file does not stay red Backfill from that already-posted comment Tests use fixtures for check/record behavior and only assert that the repo signers file is valid version-1 JSON Same process on the product repos: kody-video#172 and kody-exchange#28. Testing System changes CI and contributing docs only. No runtime primitives. System recap β composes existing primitives (low risk) Mode: recap Β· Base: @ Β· Head: Classification: composes β no primitives added or changed; this PR automates the inbound CLA signer record and names the jobs with glanceable emoji. Primitives touched _None._ The diff is CI, the CLA checker, tests, and contributing docs. System map The CLA job still reads signers from and still fails closed. A comment job writes only that file on , then waits for an in-flight check before re-running it. Legend: green = composes (wiring only) Β· amber = extended by this PR Β· red = new primitive Β· gray = context (unchanged, included only when an edge crosses it). Summary by CodeRabbit New Features Contributors can sign the individual agreement directly by commenting on a pull request with the required signing phrase. Valid signatures are recorded automatically, duplicate signatures are handled, and the agreement check is rerun with updated status messaging. Documentation Updated contributor guidance to explain the automated signing process and clarify maintainer responsibilities for entity agreements. Tests Expanded validation coverage for signing comments, identity checks, duplicate signatures, and recorded results.
Ports the approved heykody.dev redesign prototype into the app β the full surface set in one branch, each surface implemented and adversarially reviewed against the prototype before landing. What's inside Foundation Green OKLCH token system on the existing custom-property names ( = the green, flat grey canvas, paired values; the mechanism is unchanged) Self-hosted Bricolage Grotesque (display) + Wix Madefor Text (body) β Google Fonts wouldn't survive the CSP Motion system: one ease (), page-open choreography, scroll/card reveals, everything enhance-only () and off under Shared style primitives: pill/ghost buttons, page-head scaffold, prose, surface cards, layout-stable swap-label copy buttons Surfaces: landing, pricing, blog index + post, community index + detail, login, onboarding (the new 3-step wizard), account (incl. the sticky sidebar scaffold that account + admin pages share) Kept intact: every loader, form POST, frame mechanism, auth flow (password/passkeys/social/Turnstile), the per-pinned-commit community icon architecture, and all server-owned content (plans.ts limits, blog markdown, community data β nothing hardcoded) Notable fixes along the way Posts now render markdown headings at authored depth ( β h2) instead of the README demotion; README/community rendering unchanged and test-pinned uses a fixed locale (was a SSR/hydration mismatch) on the auth forms so a pre-hydration native submit can never GET credentials into the URL nav state, focus-ring layering fixes, green for radios/checkboxes Verification clean; 475 files / 1581 tests green on top of latest main Every surface browser-verified in both themes, mobile widths, and reduced motion Known follow-ups Account sidebar's grid implementation could be simplified (works, commented) The prototype's onboarding-callout dismiss β needs a persistence decision Pricing says "every limit is published below" while exists unpublished β copy question π€ Generated with Claude Code https://claude.ai/code/session_0134SBHSA9QGtS4E3uTiaCdf Motion & interaction polish (added 2026-08-05) Four follow-up commits from a full animation audit: Native route animations: SPA navigations now commit inside (feature-detected; Firefox and reduced-motion get today's instant swap). Old page fades 120ms, new page fades + rises 8px over 220ms; header/footer/progress bar are pinned out of the snapshot. The page-open choreography now plays on full document loads only. entrances: onboarding client-tab panel and BYOK details enter via interruptible transitions instead of keyframes; account settings and community report disclosures no longer teleport open. Feedback physicality: onboarding checkmark/status pops reuse the shared at 200ms (was 400ms from ); tab pills and wizard step buttons compress on press; hover art lifts aligned to house durations. Fixes: hero pointer-parallax rAF loop no longer runs forever while the cursor rests on the stage; reduced-motion now keeps color/opacity feedback (only movement is dropped); motion tokens consolidated (140ms stragglers, WAAPI ease literal, lantern glow deduped). Summary by CodeRabbit New Features Redesigned home, login, pricing, blog, community, onboarding, account, and timeline experiences. Added responsive navigation and footer links, theme switching, waitlist signup, blog βread nextβ links, and richer community views. Added accessible illustrations, copy controls, reveal animations, reduced-motion support, and light/dark social preview images. Bug Fixes Improved navigation transitions, scroll restoration, markdown rendering, date formatting, and protected-form retry handling. Expanded smoke and server-rendering coverage for redesigned pages.
Intent Fix late Bugbot findings from #1462 without interrupting already-authorized remote MCP connections or promising a replacement authorization link when Kody could not identify a server. Summary Treat unusable callback replays as already complete when the saved server is ready or otherwise past OAuth, preserving its live connection and tokens. Report connecting, connected, and discovering replay states as successful authorization instead of showing a reconnect error while the connection settles. Distinguish recovery with a newly minted authorization link from recovery where the user must choose a server and click Reconnect. Add regression coverage for past-OAuth callback replay and the unknown-server recovery redirect. Testing (11 passed) Preview at : signed in as the non-admin seed user, added the preview itself as an OAuth-protected MCP server, approved access, and confirmed it reached Connected with 2 tools. Replayed the already-used authorization by navigating Back and approving the same state again; the server remained Connected with 2 tools and showed no internal state or reconnect error. System changes System recap β extends existing primitives (medium risk) Mode: recap Β· Base: @ Β· Head: Classification: extends β tightens remote MCP callback recovery behavior and account UI messaging; no new primitive is added. Primitives touched System map Callback recovery checks the existing per-user MCP connection before deciding whether to restart OAuth, then selects UI copy that matches whether a new link exists. Legend:** green = composes (wiring only) Β· amber = extended by this PR Β· red = new primitive Β· gray = context (unchanged, included only when an edge crosses it). Invariants Per-user isolation remains unchanged. Replayed callbacks never clear credentials from an already-authenticated or settling connection.
Repository: kentcdodds/kody. Description: π¨ Your assistant's home β the memory, keys, code, and automations your AI agent keeps, portable across every MCP host. Built on Cloudflare Workers. Stars: 457, Forks: 40. Primary language: TypeScript. Languages: TypeScript (99.7%), JavaScript (0.2%), CSS (0.1%), Shell (0%). Homepage: https://kody.codes Topics: agents, ai-assistant, cloudflare-workers, code-mode, mcp, personal-assistant. Latest release: v2026.08.15 (23h ago). Open PRs: 4, open issues: 7. Last activity: 1m ago. Community health: 85%. Top contributors: kentcdodds, cursor[bot], kody-bot, cursoragent, devin-ai-integration[bot], sentry[bot], vojtaholik.