Skip to content

Add emacsification of coding agents blog post - #6424

Closed
lawrencecchen wants to merge 1 commit into
mainfrom
task-emacsification-blog
Closed

lawrencecchen wants to merge 1 commit into
mainfrom
task-emacsification-blog

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Jun 19, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add a blog post based on Lawrence's May 14, 2026 emacsification tweet
  • Wire the post into the blog index, sitemap, and agent-readable page list
  • Add English and Japanese message catalog entries

Source

  • Local tweet capture: /Users/lawrence/fun/cmuxterm-hq/skills/marketing/data/lawrencecchen-tweets.md
  • Tweet URL: https://x.com/lawrencecchen/status/2054882625760956603
  • Excalidraw search found only unrelated iCloud files: /Users/lawrence/Library/Mobile Documents/com~apple~CloudDocs/Documents/Untitled-2022-01-23-1656.excalidraw and /Users/lawrence/Library/Mobile Documents/com~apple~CloudDocs/Documents/lmao.excalidraw

Verification

  • jq empty web/messages/en.json && jq empty web/messages/ja.json
  • bun run lint (passes with existing warnings)
  • VERCEL_ENV=preview bun run build

Docs-only change, so no tagged runtime reload.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Note

Low Risk
Content and routing-only changes with no runtime, auth, or data-handling impact.

Overview
Adds a new blog article The Emacsification of Coding Agents at /blog/emacsification-of-coding-agents, following the same localized Next.js page pattern as other posts (metadata, back link, body from next-intl).

The post is registered as the newest entry in blogPosts, included in agentReadablePages and the sitemap (with /blog lastModified bumped to 2026-06-19). English and Japanese message catalogs gain SEO meta plus post copy, with a rich-text link to the source tweet.

Reviewed by Cursor Bugbot for commit f63e1d4. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Adds the “The Emacsification of Coding Agents” blog post at /blog/emacsification-of-coding-agents with SEO metadata and translations (en, ja). Wired into the blog index, sitemap, and agentReadablePages, with Open Graph/Twitter tags set.

Written for commit f63e1d4. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

Release Notes

  • New Features
    • Launched a new blog post, "The Emacsification of Coding Agents" (June 19, 2026), now available in English and Japanese. The post has been fully integrated into the blog platform with improved search visibility, better metadata optimization, complete site indexing, and enhanced accessibility features for broader user reach and maximum discoverability.

@vercel

vercel Bot commented Jun 19, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jun 19, 2026 4:20am
cmux-staging Building Building Preview, Comment Jun 19, 2026 4:20am

@coderabbitai

coderabbitai Bot commented Jun 19, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: f4baeb30-cf4f-45c7-9ecd-76000264fcb8

📥 Commits

Reviewing files that changed from the base of the PR and between acda0d0 and f63e1d4.

📒 Files selected for processing (6)
  • web/app/[locale]/blog/emacsification-of-coding-agents/page.tsx
  • web/app/[locale]/components/blog-posts.ts
  • web/app/lib/agent-page-paths.ts
  • web/app/sitemap.ts
  • web/messages/en.json
  • web/messages/ja.json

📝 Walkthrough

Walkthrough

A new blog post, "The Emacsification of Coding Agents," is added as a Next.js locale-aware page. The change includes the page component with generateMetadata, English and Japanese i18n message content, registration in the blogPosts array, agentReadablePages, and the sitemap.

Changes

Emacsification of Coding Agents Blog Post

Layer / File(s) Summary
i18n content (EN + JA)
web/messages/en.json, web/messages/ja.json
Adds emacsificationOfCodingAgents entries in both locale files with SEO meta fields (metaTitle, metaDescription, metaKeywords) and post body content (title, summary, date, p1–p5 including a source link).
Page component and metadata
web/app/[locale]/blog/emacsification-of-coding-agents/page.tsx
Introduces generateMetadata (async locale resolution, i18n meta loading, keywords array normalization, OpenGraph/Twitter/SEO alternates) and the default page component rendering translated content with a rich-text source link anchor.
Registry and sitemap registration
web/app/[locale]/components/blog-posts.ts, web/app/lib/agent-page-paths.ts, web/app/sitemap.ts
Inserts the new post into blogPosts, adds /blog/emacsification-of-coding-agents to agentReadablePages, and adds the new sitemap entry while updating the /blog lastModified date to 2026-06-19.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • manaflow-ai/cmux#4540: Follows the same pattern of adding a new blog post with blogPosts registration, agentReadablePages entry, sitemap update, and a locale-aware page.tsx with generateMetadata.
  • manaflow-ai/cmux#5190: Uses the identical integration pattern — [locale]/blog/*/page.tsx with generateMetadata, shared registry registration, and sitemap extension — for a different blog slug.

Poem

🐇 A new post appears, with paragraphs bright,
In English and Japanese, translated just right,
The sitemap grows longer, the registry too,
generateMetadata does what it ought to do,
The Emacs of agents now lives on the web —
Hop hop, little rabbit, there's nothing to dread! ✨


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Full Internationalization ❌ Error New blog post content introduced for 20 locales per web/i18n/routing.ts, but only translated to English and Japanese; missing translations in 18 locales (ar, bs, da, de, es, fr, it, km, ko, no, pl,... Add emacsificationOfCodingAgents entries with full translations to all 18 missing web/messages/*.json files, or restrict the blog post to English-only pages.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (20 passed)
Check name Status Explanation
Title check ✅ Passed The title directly and concisely describes the main change: adding a new blog post about emacsification of coding agents.
Description check ✅ Passed The description includes a clear summary of what changed and why, verification steps taken, and relevant context, though it deviates from the template structure.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed PR contains no Swift code changes—only TypeScript, JavaScript, and JSON web/documentation files. Swift actor isolation check is not applicable.
Cmux Swift Blocking Runtime ✅ Passed PR modifies only TypeScript, TSX, and JSON files (blog post content and metadata). No Swift files are changed, so the "cmux Swift blocking runtime" check does not apply.
Cmux Expensive Synchronous Load ✅ Passed PR contains only TypeScript (TSX/TS) and JSON files for a blog post addition. No Swift production code changes are present, making this check inapplicable.
Cmux Cache Substitution Correctness ✅ Passed PR makes only additive blog content/metadata changes with no cache substitution, persistence path modifications, or fresh-read-to-cache swaps as defined by the rule.
Cmux No Hacky Sleeps ✅ Passed PR adds blog post page and content with no sleep/timer/polling patterns in TypeScript/JavaScript/shell code; changes are entirely declarative metadata and message catalog entries.
Cmux Algorithmic Complexity ✅ Passed PR adds static blog post content with fixed-size arrays (blog metadata, page paths, sitemap entries). No loops over scalable collections, nested scans, sorting/filtering, or complex algorithms—all...
Cmux Swift Concurrency ✅ Passed Check not applicable: PR contains no Swift code (only TypeScript/TSX/JSON files for blog post documentation addition).
Cmux Swift @Concurrent ✅ Passed PR contains no Swift code changes—only TypeScript/React/JSON files for a blog post. Custom check for Swift @concurrent annotations is not applicable.
Cmux Swift File And Package Boundaries ✅ Passed This PR contains no Swift file modifications. It only adds TypeScript/React web components and JSON message catalog entries. The Swift file and package boundaries check is not applicable.
Cmux Swiftpm Lockfiles ✅ Passed PR is a docs-only blog post addition (TypeScript/JSON files) with no SwiftPM, Xcode, .gitignore, workflow, or dependency changes, so SwiftPM lockfile rules do not apply.
Cmux Swift Logging ✅ Passed This PR contains only TypeScript/JavaScript web code and JSON message files; no Swift files are modified. The Swift logging check does not apply to this PR.
Cmux User-Facing Error Privacy ✅ Passed PR adds blog post documentation, not user-facing error messages. Content includes public product names from a cited public tweet source; no sensitive implementation details, credentials, or vendor-...
Cmux Swiftui State Layout ✅ Passed This PR contains only web (TypeScript/Next.js) and JSON files with no SwiftUI code. The swiftui-state-layout check only applies to SwiftUI changes and is not relevant to this documentation-only blo...
Cmux Architecture Rethink ✅ Passed PR contains no Swift code changes; it only modifies TypeScript/JSON web documentation files. The swift-architectural-rethink rule is not applicable to non-Swift changes.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR contains no Swift code changes—only TypeScript, React (.tsx), and JSON files for adding a blog post. The check is not applicable to non-Swift PRs.
Cmux Source Artifacts ✅ Passed All changed files are hand-written source code, configuration, or localization catalogs. No artifact directories or generated content detected; all changes meet the Pass criteria of the rules.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task-emacsification-blog

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps

greptile-apps Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds a new "Emacsification of Coding Agents" blog post, wiring it into the blog index, sitemap, agent-readable page list, and the en and ja message catalogs.

  • The new page.tsx correctly uses next-intl for all user-facing text, and the English and Japanese catalogs are complete.
  • The blog index and sitemap entries look correct; the blogPosts array hardcoded fields are not rendered directly — the index page reads them via t() — so they carry no i18n risk on their own.
  • 18 of the 20 supported locales are missing the new translation keys, meaning any user hitting the blog index or post page in zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km, or uk will encounter missing-key errors or blank content.

Confidence Score: 3/5

Not safe to merge until the 18 missing locale message files are updated.

The blog index page iterates every entry in blogPosts and calls t() for title, date, and summary. Because the new post is first in the array, a missing-key in any of the 18 untouched locale files will break the entire blog index for those users — not just the new post's card. Both the index and the new post's metadata page are affected.

All 18 non-en/ja locale files under web/messages/ need emacsificationOfCodingAgents entries in both the blog.posts and blog namespaces.

Important Files Changed

Filename Overview
web/app/[locale]/blog/emacsification-of-coding-agents/page.tsx New blog post page using next-intl for all user-facing text; metadata and content translations are wired correctly for en and ja, but will fail for the 18 other supported locales.
web/app/[locale]/components/blog-posts.ts New post added as first entry; hardcoded title/summary fields are not rendered directly — the blog page reads them via t() — so no i18n regression here.
web/app/lib/agent-page-paths.ts New blog entry added to the agent-readable page list; looks correct.
web/app/sitemap.ts Sitemap entry added and blog index lastModified date bumped; no issues.
web/messages/en.json English translations complete — meta namespace and posts content both present.
web/messages/ja.json Japanese translations complete — meta namespace and posts content both present.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[User visits /blog or /blog/emacsification-of-coding-agents] --> B{Locale?}
    B -->|en| C[en.json complete]
    B -->|ja| D[ja.json complete]
    B -->|18 other locales| E[locale files missing keys]
    C --> F[Blog index renders correctly]
    D --> F
    E --> G[next-intl missing-key error or blank title/date/summary]
    F --> H[Page renders]
    G --> I[Broken page for 18 locales]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[User visits /blog or /blog/emacsification-of-coding-agents] --> B{Locale?}
    B -->|en| C[en.json complete]
    B -->|ja| D[ja.json complete]
    B -->|18 other locales| E[locale files missing keys]
    C --> F[Blog index renders correctly]
    D --> F
    E --> G[next-intl missing-key error or blank title/date/summary]
    F --> H[Page renders]
    G --> I[Broken page for 18 locales]
Loading

Reviews (1): Last reviewed commit: "Add emacsification blog post" | Re-trigger Greptile

Comment thread web/messages/en.json
Comment on lines 409 to 424
"metaDescription": "A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side."
},
"posts": {
"emacsificationOfCodingAgents": {
"title": "The Emacsification of Coding Agents",
"summary": "Why open, terminal-native agent interfaces let developers compose their own workflows instead of waiting for one IDE to own them.",
"date": "June 19, 2026",
"p1": "Agent tools are moving into terminals because terminals are the shared interface every provider can support.",
"p2": "Claude Code, Codex, OpenCode, Gemini CLI, Aider, and custom SDK agents should not require a different dashboard for every run. The useful layer is a programmable terminal where panes, browsers, notifications, and workspace state are scriptable.",
"p3": "That is the emacsification: providers keep interfaces open, developers compose their own workflows, and the best patterns become reusable scripts instead of product lock-in.",
"p4": "cmux exists for that world. It stays close to the shell, adds native macOS panes and an embedded browser, and exposes a CLI/socket API so background agents can be launched, watched, resumed, and rearranged by code.",
"p5": "Source: <sourceLink>May 14, 2026 tweet</sourceLink>."
},
"passkeyAuth": {
"title": "Passkey auth in the cmux browser",
"summary": "cmux's embedded browser supports passkey authentication and can import cookies from other browsers with cmux browser import.",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Missing translations for 18 locales

web/i18n/routing.ts defines 20 supported locales, but this PR only adds blog.posts.emacsificationOfCodingAgents (and the matching meta-level blog.emacsificationOfCodingAgents) to en.json and ja.json. The remaining 18 locale files — zh-CN, zh-TW, ko, de, es, fr, it, da, pl, ru, bs, ar, no, pt-BR, th, tr, km, uk — are missing both the blog-index keys (blog.posts.emacsificationOfCodingAgents.title, .date, .summary) and the post-page meta keys (blog.emacsificationOfCodingAgents.metaTitle, etc.).

The blog index (web/app/[locale]/blog/page.tsx) calls t('posts.${post.key}.title'), t('posts.${post.key}.date'), and t('posts.${post.key}.summary') for every entry in blogPosts. Because emacsificationOfCodingAgents is now first in that array, any user hitting /zh-CN/blog (or any of the other 18 locale paths) will see a missing-key error or blank content for all three fields on the very first article card.

Rule Used: Flag production user-facing text that is not fully... (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@lawrencecchen lawrencecchen added the stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening. label Sep 23, 2026
@github-project-automation github-project-automation Bot moved this from Todo to Done in cmux backlog Sep 23, 2026

This branch was successfully deployed

1 active deployment
Preview – cmux — f63e1d4b Deployed Jun 19, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants