<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>silenceper – silenceper | AI Agents, Developer Tools, Open Source &amp; Tech Notes</title><link>https://silenceper.com/en/</link><description>Recent content in silenceper | AI Agents, Developer Tools, Open Source &amp; Tech Notes on silenceper</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><atom:link href="https://silenceper.com/en/index.xml" rel="self" type="application/rss+xml"/><item><title>html-video: Generate Real MP4s Locally with HTML, CSS, and Coding Agents</title><link>https://silenceper.com/en/article/2026-06-05-html-video-agent-mp4/</link><pubDate>Fri, 05 Jun 2026 23:34:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-06-05-html-video-agent-mp4/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260605/html-video-hero.png" alt="html-video hero" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;html-video is a local video generation workflow for coding agents: give it a prompt, an article link, or a GitHub repository, and it generates animated multi-frame HTML that can be rendered into a real MP4.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Basic Information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Information&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;html-video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/nexu-io/html-video" target="_blank" rel="noopener"&gt;https://github.com/nexu-io/html-video&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://open-design.ai/html-video" target="_blank" rel="noopener"&gt;https://open-design.ai/html-video&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team&lt;/td&gt;
&lt;td&gt;Open Design / nexu-io&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main technologies&lt;/td&gt;
&lt;td&gt;HTML, CSS, TypeScript, Headless Chromium, ffmpeg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default render engine&lt;/td&gt;
&lt;td&gt;Hyperframes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Templates&lt;/td&gt;
&lt;td&gt;21 built-in templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supported agents&lt;/td&gt;
&lt;td&gt;Open Design, Claude Code, Cursor, Codex, Gemini, Qwen, OpenCode, Copilot, Aider, Hermes, and more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Agent-driven local HTML-to-video workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem It Solves&lt;span class="hx-absolute -hx-mt-20" id="what-problem-it-solves"&gt;&lt;/span&gt;
&lt;a href="#what-problem-it-solves" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Programmatic video is not a new idea. Tools such as Remotion, Motion Canvas, and Manim can all turn code into video, but each comes with its own authoring model: some are React-oriented, some are canvas-oriented, and some are built primarily for mathematical animation.&lt;/p&gt;
&lt;p&gt;That creates a practical barrier. You are not just “making a video”; you first need to choose a framework, learn its model, understand its rendering pipeline, and then manually break the content into scenes.&lt;/p&gt;
&lt;p&gt;html-video tries to move that complexity behind a higher-level workflow. The user interacts with a local Studio or CLI, while the connected coding agent handles content analysis, template selection, and frame generation.&lt;/p&gt;
&lt;pre class="mermaid hx-mt-6"&gt;
flowchart LR
A[Prompt / Article Link / GitHub Repository] --&amp;gt; B[Fetch and Prepare Source Material]
B --&amp;gt; C[Coding Agent Builds a Storyboard]
C --&amp;gt; D[Generate Animated HTML Per Frame]
D --&amp;gt; E[Record with Headless Chromium]
E --&amp;gt; F[Encode and Compose with ffmpeg]
F --&amp;gt; G[Export MP4]
&lt;/pre&gt;&lt;p&gt;The key idea is to separate content understanding from rendering. The agent decides what to say and how to structure the scenes; the rendering engine decides how those scenes become video frames.&lt;/p&gt;
&lt;h2&gt;Core Features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Generate Video from Links or Repositories&lt;span class="hx-absolute -hx-mt-20" id="1-generate-video-from-links-or-repositories"&gt;&lt;/span&gt;
&lt;a href="#1-generate-video-from-links-or-repositories" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;html-video is not limited to a single prompt. You can paste a web article, a WeChat article, or a GitHub repository URL. The Studio fetches and flattens the source content into Markdown, then passes it to the agent as material for the video.&lt;/p&gt;
&lt;p&gt;This is especially useful for technical content. For example, if you provide an open-source repository, it can read the project description, README, and top-level structure, then generate a structured project introduction video.&lt;/p&gt;
&lt;h3&gt;2. Multi-frame Storyboards&lt;span class="hx-absolute -hx-mt-20" id="2-multi-frame-storyboards"&gt;&lt;/span&gt;
&lt;a href="#2-multi-frame-storyboards" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project uses a content-graph to organize multi-scene videos. In practice, the agent breaks the source material into nodes; each node becomes a frame, while the sequence, contrast, and dependency relationships between nodes define the pacing of the final video.&lt;/p&gt;
&lt;p&gt;Single-frame videos can take a fast path. Multi-scene videos generate HTML frame by frame, then compose those frames into one MP4.&lt;/p&gt;
&lt;h3&gt;3. Express Frames with HTML and CSS&lt;span class="hx-absolute -hx-mt-20" id="3-express-frames-with-html-and-css"&gt;&lt;/span&gt;
&lt;a href="#3-express-frames-with-html-and-css" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Compared with writing directly in a specialized video framework, HTML and CSS are easier to author, inspect, and modify. Titles, cards, charts, gradients, animations, and layouts can all be represented with common web technologies.&lt;/p&gt;
&lt;p&gt;The current default engine is Hyperframes. It loads animated HTML with Headless Chromium, records the frames, and hands them to ffmpeg for MP4 encoding.&lt;/p&gt;
&lt;h3&gt;4. Built-in Template Library&lt;span class="hx-absolute -hx-mt-20" id="4-built-in-template-library"&gt;&lt;/span&gt;
&lt;a href="#4-built-in-template-library" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;html-video includes 21 templates covering data visualization, product promos, title cards, outros, kinetic typography, decision trees, cinematic frames, and other common video scenes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260605/html-video-data-chart-nyt.png" alt="Template example: data chart" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;A data chart template like this is useful when a video needs to explain how a metric changes over time. Instead of designing every frame from scratch, the agent can fill the template with a headline, data points, annotations, and a source line.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260605/html-video-glitch-title.png" alt="Template example: glitch title" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;A title template like this works well for openers, topic reveals, or technical videos that need a stronger “system online” visual style.&lt;/p&gt;
&lt;h3&gt;5. Local Agent Workflow&lt;span class="hx-absolute -hx-mt-20" id="5-local-agent-workflow"&gt;&lt;/span&gt;
&lt;a href="#5-local-agent-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project supports multiple coding agents, including Open Design, Trae CLI, Claude Code, Cursor Agent, Codex CLI, Gemini CLI, Grok, Qwen Code, OpenCode, Copilot CLI, Aider, Hermes, and the Anthropic API.&lt;/p&gt;
&lt;p&gt;That means it is not locked to a single model or vendor. It behaves more like a local video generation workstation that can be driven by whichever coding agent you already use.&lt;/p&gt;
&lt;h3&gt;6. Optional Soundtrack and Narration&lt;span class="hx-absolute -hx-mt-20" id="6-optional-soundtrack-and-narration"&gt;&lt;/span&gt;
&lt;a href="#6-optional-soundtrack-and-narration" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;If a MiniMax API key is configured, html-video can also generate background music and TTS narration. During export, ffmpeg mixes the audio into the final MP4. Without an audio key, the rest of the video generation workflow still works normally.&lt;/p&gt;
&lt;h2&gt;Who It Is For&lt;span class="hx-absolute -hx-mt-20" id="who-it-is-for"&gt;&lt;/span&gt;
&lt;a href="#who-it-is-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;html-video is especially useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developers who want to turn technical articles, open-source projects, or product updates into short videos;&lt;/li&gt;
&lt;li&gt;Content teams that want to generate project introduction videos with agents;&lt;/li&gt;
&lt;li&gt;Engineers exploring “Video as Code” workflows;&lt;/li&gt;
&lt;li&gt;Users who prefer local rendering and do not want per-render cloud fees;&lt;/li&gt;
&lt;li&gt;People already using coding agents such as Claude Code, Codex, Cursor, or Hermes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is particularly well suited to content that already has a clear structure but needs to be turned into video more quickly: open-source project introductions, product updates, data explainers, technical tutorial intros, and social video assets.&lt;/p&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The project is a pnpm-managed monorepo. The official quick start is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm -r build
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node packages/cli/dist/bin.js studio&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then open the local Studio:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://127.0.0.1:3071&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Useful CLI commands:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node packages/cli/dist/bin.js doctor
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node packages/cli/dist/bin.js search-templates --intent &lt;span class="s2"&gt;&amp;#34;github stars race&amp;#34;&lt;/span&gt; --top &lt;span class="m"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;doctor&lt;/code&gt; checks available local agents and render engines. &lt;code&gt;search-templates&lt;/code&gt; helps find suitable templates based on a video intent.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The value of html-video is not simply “turning HTML screenshots into video.” Its stronger idea is connecting source input, agent understanding, storyboard generation, animated HTML, and MP4 rendering into one workflow.&lt;/p&gt;
&lt;p&gt;For developers, it lowers the entry barrier for programmatic video. You do not need to commit to one video framework first, nor do you need to design every scene from a blank canvas. You can start with an article, a repository, or a prompt, then let an agent generate the video from templates.&lt;/p&gt;
&lt;p&gt;Today, the truly runnable core is the Hyperframes engine, while other render engines are still on the roadmap. But if you care about AI agents, content automation, and technical video generation, html-video is an open-source project worth following.&lt;/p&gt;</description></item><item><title>html-ppt-skill: Let AI Generate Professional HTML Presentations</title><link>https://silenceper.com/en/article/2026-06-02-html-ppt-skill/</link><pubDate>Tue, 02 Jun 2026 15:20:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-06-02-html-ppt-skill/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260602/html-ppt-hero.gif" alt="html-ppt cover with live previews" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;html-ppt-skill is an AgentSkill for AI agents to generate professional HTML presentations with themes, layouts, animations, and presenter mode using pure static HTML/CSS/JS.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Basic Information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Information&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;html-ppt-skill / HTML PPT Studio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/lewislulu/html-ppt-skill" target="_blank" rel="noopener"&gt;https://github.com/lewislulu/html-ppt-skill&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;lewis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main technologies&lt;/td&gt;
&lt;td&gt;HTML, CSS, JavaScript, Shell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stars&lt;/td&gt;
&lt;td&gt;About 5.3k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forks&lt;/td&gt;
&lt;td&gt;About 505&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;AgentSkill / HTML presentation generation toolkit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core highlights&lt;/td&gt;
&lt;td&gt;36 themes, 15 full-deck templates, 31 page layouts, 47 animations, presenter mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build model&lt;/td&gt;
&lt;td&gt;Pure static HTML/CSS/JS, no build step required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem It Solves&lt;span class="hx-absolute -hx-mt-20" id="what-problem-it-solves"&gt;&lt;/span&gt;
&lt;a href="#what-problem-it-solves" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Many AI tools can generate a presentation outline, but turning that outline into slides that are presentable, well-designed, and ready for a real talk still usually requires a lot of manual layout work.&lt;/p&gt;
&lt;p&gt;html-ppt-skill addresses this gap: &lt;strong&gt;it lets an agent move beyond writing content and directly generate an HTML presentation that can be opened, presented, previewed, and exported.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It packages common presentation authoring capabilities into an AgentSkill, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;visual themes;&lt;/li&gt;
&lt;li&gt;page layouts;&lt;/li&gt;
&lt;li&gt;full-deck templates;&lt;/li&gt;
&lt;li&gt;CSS and Canvas animations;&lt;/li&gt;
&lt;li&gt;presenter mode;&lt;/li&gt;
&lt;li&gt;export scripts;&lt;/li&gt;
&lt;li&gt;example decks and verification screenshots.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For users, the interaction can be very direct. You can ask an AgentSkill-compatible agent something like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Create an 8-page technical sharing deck with a cyberpunk theme.”&lt;br&gt;
“Turn this outline into an investor pitch deck.”&lt;br&gt;
“Create a 9-card Xiaohongshu-style visual post with a soft white style.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The agent can then use this skill to generate the corresponding HTML presentation.&lt;/p&gt;
&lt;h2&gt;Core Features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. 36 Visual Themes&lt;span class="hx-absolute -hx-mt-20" id="1-36-visual-themes"&gt;&lt;/span&gt;
&lt;a href="#1-36-visual-themes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project includes 36 themes covering minimal, editorial, dark, cyberpunk, blueprint, Xiaohongshu, investor pitch, academic, and other styles.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260602/html-ppt-themes.png" alt="36 themes · 8 examples" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Themes are driven by CSS tokens. Swapping one &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; can reskin the entire deck. This makes it easy for an agent to choose a style based on the content type:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;technical sharing: &lt;code&gt;tokyo-night&lt;/code&gt;, &lt;code&gt;cyberpunk-neon&lt;/code&gt;, &lt;code&gt;engineering-whiteprint&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;business reporting: &lt;code&gt;corporate-clean&lt;/code&gt;, &lt;code&gt;pitch-deck-vc&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Xiaohongshu-style posts: &lt;code&gt;xiaohongshu-white&lt;/code&gt;, &lt;code&gt;soft-pastel&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;academic content: &lt;code&gt;academic-paper&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;architecture proposals: &lt;code&gt;blueprint&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 15 Full-deck Templates&lt;span class="hx-absolute -hx-mt-20" id="2-15-full-deck-templates"&gt;&lt;/span&gt;
&lt;a href="#2-15-full-deck-templates" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This is not just a collection of single-page components. It also provides complete multi-slide deck templates.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260602/html-ppt-templates.png" alt="15 full-deck templates" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;The templates fall into two groups.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Extracted visual styles&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xiaohongshu white editorial style;&lt;/li&gt;
&lt;li&gt;dark knowledge graph style;&lt;/li&gt;
&lt;li&gt;blueprint / architecture diagram style;&lt;/li&gt;
&lt;li&gt;terminal cyberpunk style;&lt;/li&gt;
&lt;li&gt;purple gradient card style;&lt;/li&gt;
&lt;li&gt;warning / safety testing style;&lt;/li&gt;
&lt;li&gt;soft pastel card style;&lt;/li&gt;
&lt;li&gt;minimal keyboard navigation style.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Scenario templates&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;investor pitch deck;&lt;/li&gt;
&lt;li&gt;product launch;&lt;/li&gt;
&lt;li&gt;technical sharing;&lt;/li&gt;
&lt;li&gt;weekly report;&lt;/li&gt;
&lt;li&gt;9-page Xiaohongshu post;&lt;/li&gt;
&lt;li&gt;course module;&lt;/li&gt;
&lt;li&gt;presenter-mode template with full speaker scripts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These templates are especially useful for agents because the agent does not need to design every page from scratch. It can start from a scenario-specific structure and adapt the content.&lt;/p&gt;
&lt;h3&gt;3. 31 Single-page Layouts&lt;span class="hx-absolute -hx-mt-20" id="3-31-single-page-layouts"&gt;&lt;/span&gt;
&lt;a href="#3-31-single-page-layouts" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project provides 31 common page layouts that cover most presentation needs.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260602/html-ppt-layouts.png" alt="31 single-page layouts" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;The layout set includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cover;&lt;/li&gt;
&lt;li&gt;table of contents;&lt;/li&gt;
&lt;li&gt;section divider;&lt;/li&gt;
&lt;li&gt;bullet list;&lt;/li&gt;
&lt;li&gt;two-column and three-column pages;&lt;/li&gt;
&lt;li&gt;quote pages;&lt;/li&gt;
&lt;li&gt;statistic highlights;&lt;/li&gt;
&lt;li&gt;KPI grids;&lt;/li&gt;
&lt;li&gt;tables;&lt;/li&gt;
&lt;li&gt;code pages;&lt;/li&gt;
&lt;li&gt;diffs;&lt;/li&gt;
&lt;li&gt;terminal pages;&lt;/li&gt;
&lt;li&gt;flow diagrams;&lt;/li&gt;
&lt;li&gt;timelines;&lt;/li&gt;
&lt;li&gt;roadmaps;&lt;/li&gt;
&lt;li&gt;mind maps;&lt;/li&gt;
&lt;li&gt;comparison pages;&lt;/li&gt;
&lt;li&gt;Gantt charts;&lt;/li&gt;
&lt;li&gt;image hero pages;&lt;/li&gt;
&lt;li&gt;image grids;&lt;/li&gt;
&lt;li&gt;bar, line, pie, and radar charts;&lt;/li&gt;
&lt;li&gt;architecture diagrams;&lt;/li&gt;
&lt;li&gt;CTA pages;&lt;/li&gt;
&lt;li&gt;thanks pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The README also shows a live cycling preview of real layout files:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260602/html-ppt-layouts-live.gif" alt="31 layouts cycling through real template files" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;4. 47 Animations&lt;span class="hx-absolute -hx-mt-20" id="4-47-animations"&gt;&lt;/span&gt;
&lt;a href="#4-47-animations" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;html-ppt-skill includes 27 CSS animations and 20 Canvas FX animations.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260602/html-ppt-animations.png" alt="47 animations · 27 CSS &amp;#43; 20 Canvas FX" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;CSS animations include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fade-in;&lt;/li&gt;
&lt;li&gt;rise-in;&lt;/li&gt;
&lt;li&gt;zoom-pop;&lt;/li&gt;
&lt;li&gt;blur-in;&lt;/li&gt;
&lt;li&gt;typewriter;&lt;/li&gt;
&lt;li&gt;neon glow;&lt;/li&gt;
&lt;li&gt;gradient flow;&lt;/li&gt;
&lt;li&gt;staggered list entrance;&lt;/li&gt;
&lt;li&gt;counter-up;&lt;/li&gt;
&lt;li&gt;path drawing;&lt;/li&gt;
&lt;li&gt;3D card flip;&lt;/li&gt;
&lt;li&gt;page turn;&lt;/li&gt;
&lt;li&gt;spotlight effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Canvas FX modules include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;particle burst;&lt;/li&gt;
&lt;li&gt;confetti cannon;&lt;/li&gt;
&lt;li&gt;fireworks;&lt;/li&gt;
&lt;li&gt;starfield;&lt;/li&gt;
&lt;li&gt;Matrix rain;&lt;/li&gt;
&lt;li&gt;knowledge graph;&lt;/li&gt;
&lt;li&gt;neural-network pulses;&lt;/li&gt;
&lt;li&gt;constellation lines;&lt;/li&gt;
&lt;li&gt;data stream;&lt;/li&gt;
&lt;li&gt;magnetic field;&lt;/li&gt;
&lt;li&gt;shockwave effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means the result is not just a static web page pretending to be a slide deck. It can behave like a real presentation with motion and visual emphasis.&lt;/p&gt;
&lt;h3&gt;5. Presenter Mode&lt;span class="hx-absolute -hx-mt-20" id="5-presenter-mode"&gt;&lt;/span&gt;
&lt;a href="#5-presenter-mode" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Presenter mode is one of the most interesting parts of the project.&lt;/p&gt;
&lt;p&gt;Pressing &lt;code&gt;S&lt;/code&gt; in any deck opens a separate presenter window with four draggable and resizable magnetic cards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;current slide preview;&lt;/li&gt;
&lt;li&gt;next slide preview;&lt;/li&gt;
&lt;li&gt;speaker script;&lt;/li&gt;
&lt;li&gt;timer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260602/html-ppt-presenter-mode.jpg" alt="Presenter mode with 4 magnetic cards" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;The implementation is thoughtful. The previews are not screenshots. Each preview is an iframe loading the same deck HTML with a &lt;code&gt;?preview=N&lt;/code&gt; parameter, so it renders only the target slide. The presenter preview and the audience view use the same CSS, fonts, theme, and viewport, which keeps the visual result consistent.&lt;/p&gt;
&lt;p&gt;Slide changes are synchronized through &lt;code&gt;BroadcastChannel&lt;/code&gt; and &lt;code&gt;postMessage&lt;/code&gt;, so the preview does not need to reload and avoids flicker.&lt;/p&gt;
&lt;h2&gt;Who It Is For&lt;span class="hx-absolute -hx-mt-20" id="who-it-is-for"&gt;&lt;/span&gt;
&lt;a href="#who-it-is-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This project is useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;users who want AI to directly generate presentation decks;&lt;/li&gt;
&lt;li&gt;people using Claude Code, Codex, Cursor, OpenClaw, or similar agent tools;&lt;/li&gt;
&lt;li&gt;anyone who often creates technical talks, product launches, weekly reports, or course materials;&lt;/li&gt;
&lt;li&gt;developers who prefer HTML/CSS/JS over traditional slide tools;&lt;/li&gt;
&lt;li&gt;users who need to generate Xiaohongshu-style visual posts, course slides, or project introductions in batches;&lt;/li&gt;
&lt;li&gt;teams that want presentation assets to be versioned, scripted, and exported like code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is especially suitable when the content is generated by AI but the final output still needs a deliberate visual design.&lt;/p&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Installation is simple:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add https://github.com/lewislulu/html-ppt-skill&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After installation, an AgentSkill-compatible agent can use the skill directly.&lt;/p&gt;
&lt;p&gt;If you clone the project manually, you can scaffold a new deck with:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./scripts/new-deck.sh my-talk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Browse the built-in resources:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;open templates/theme-showcase.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;open templates/layout-showcase.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;open templates/animation-showcase.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;open templates/full-decks-index.html&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Export PNG images:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./scripts/render.sh templates/theme-showcase.html
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./scripts/render.sh examples/my-talk/index.html &lt;span class="m"&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Common keyboard shortcuts:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;← → Space PgUp PgDn Home End Navigate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F Fullscreen
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;S Open presenter window
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;N Open notes drawer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;R Reset timer
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;O Slide overview
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;T Cycle themes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;A Demo animation on current slide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#/N Jump to slide N
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?preview=N Single-slide preview mode&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The value of html-ppt-skill is not simply “writing presentations in HTML.” It packages &lt;strong&gt;themes, layouts, templates, animations, presenter mode, and export scripts&lt;/strong&gt; into a reusable capability that agents can call.&lt;/p&gt;
&lt;p&gt;If you already use AI agents to write documents, prepare proposals, or generate code, this project makes the next step feel natural: &lt;strong&gt;let the agent turn the content directly into a presentable HTML slide deck.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Agents Need More Than Models: Context Infrastructure Is Taking Shape</title><link>https://silenceper.com/en/article/2026-05-31-agent-context-infrastructure/</link><pubDate>Sun, 31 May 2026 22:55:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-31-agent-context-infrastructure/</guid><description>
&lt;p&gt;Looking at recent GitHub projects, one pattern is becoming harder to ignore:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The central problem for agents is moving from &amp;ldquo;can I call a stronger model?&amp;rdquo; to &amp;ldquo;can I manage context reliably, continuously, and at a reasonable cost?&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is not a single news event. Several projects are pointing in the same direction.&lt;/p&gt;
&lt;p&gt;OpenViking describes itself as a context database for AI agents, using a filesystem-like model to manage memory, resources, and skills. Mirage tries to mount external services such as S3, Google Drive, Slack, Gmail, and Redis into one virtual file tree, so agents can use familiar Unix-like operations across different backends. SkillOpt goes one layer further and treats natural-language skills as external state that can be trained, validated, and improved instead of being a one-off prompt.&lt;/p&gt;
&lt;p&gt;These projects solve different problems, but they are all answering a larger question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When an agent starts running long tasks, calling tools, and accumulating experience, where should its working context live? How should it be read, edited, debugged, and reused?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;My current view is simple: &lt;strong&gt;context infrastructure will become one of the most important layers in agent applications.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Meet The Three Projects&lt;span class="hx-absolute -hx-mt-20" id="meet-the-three-projects"&gt;&lt;/span&gt;
&lt;a href="#meet-the-three-projects" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This article is not trying to blend three projects into one vague trend. They sit at different parts of the agent infrastructure stack: OpenViking is closer to a context database, Mirage is closer to a virtual filesystem for tools and data sources, and SkillOpt is closer to a skill optimizer.&lt;/p&gt;
&lt;p&gt;In one table:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;One-line Positioning&lt;/th&gt;
&lt;th&gt;Main Problem Layer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/volcengine/OpenViking" target="_blank" rel="noopener"&gt;OpenViking&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A context database for AI agents&lt;/td&gt;
&lt;td&gt;How to manage memory, resources, and skills together&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/strukto-ai/mirage" target="_blank" rel="noopener"&gt;Mirage&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A unified virtual filesystem for AI agents&lt;/td&gt;
&lt;td&gt;How agents access different tools and data sources through one interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/microsoft/SkillOpt" target="_blank" rel="noopener"&gt;SkillOpt&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A natural-language optimizer for agent skills&lt;/td&gt;
&lt;td&gt;How skills move from handwritten experience to evaluated, iterative assets&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These projects are not just &amp;ldquo;another agent framework.&amp;rdquo; They are closer to missing infrastructure for agents that need to work over longer horizons.&lt;/p&gt;
&lt;h3&gt;OpenViking: A Context Database For Agents&lt;span class="hx-absolute -hx-mt-20" id="openviking-a-context-database-for-agents"&gt;&lt;/span&gt;
&lt;a href="#openviking-a-context-database-for-agents" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenViking positions itself as &lt;strong&gt;The Context Database for AI Agents&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The problem it targets is fragmentation. An agent&amp;rsquo;s useful context may include project documentation, user preferences, task logs, skill descriptions, external resources, and historical experience. If these materials are scattered across prompts, chat history, vector databases, and temporary files, the agent has a hard time reusing them consistently.&lt;/p&gt;
&lt;p&gt;OpenViking puts memory, resources, and skills into one context database and organizes them with a filesystem paradigm. It is not just about similarity search. Its README emphasizes hierarchy, recursive directory retrieval, layered context loading, and visualized retrieval traces.&lt;/p&gt;
&lt;p&gt;You can think of it as a context workspace for agents:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;memory stores preferences, experience, and historical state;&lt;/li&gt;
&lt;li&gt;resources mount documents, code, references, and external knowledge;&lt;/li&gt;
&lt;li&gt;skills describe reusable ways to perform tasks;&lt;/li&gt;
&lt;li&gt;layered loading controls which context enters the current task;&lt;/li&gt;
&lt;li&gt;retrieval traces help developers understand why the agent read certain information.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is useful for agent applications that care about long-term memory, project-level context, and multi-skill collaboration. Coding assistants, enterprise knowledge assistants, and personal workflow agents can all run into this problem.&lt;/p&gt;
&lt;p&gt;The boundary is also clear. OpenViking helps organize and retrieve context, but it does not replace permissions, security, task planning, or business approvals. If a context database touches sensitive information, access control and audit logging still need to be designed separately.&lt;/p&gt;
&lt;h3&gt;Mirage: Mounting The Outside World As A File Tree&lt;span class="hx-absolute -hx-mt-20" id="mirage-mounting-the-outside-world-as-a-file-tree"&gt;&lt;/span&gt;
&lt;a href="#mirage-mounting-the-outside-world-as-a-file-tree" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Mirage positions itself as &lt;strong&gt;A Unified Virtual Filesystem For AI Agents&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It focuses on a different practical issue: agents need to access more tools. A single agent may need to read GitHub, inspect S3, search Slack, open Gmail, query Redis, and process local files. Each system has its own API, permission model, pagination behavior, error codes, and data shape. The more tools an agent uses, the more likely it is to fail at tool selection or parameter construction.&lt;/p&gt;
&lt;p&gt;Mirage&amp;rsquo;s approach is to mount external data sources into one virtual filesystem. The repository examples show resources like &lt;code&gt;/s3&lt;/code&gt;, &lt;code&gt;/gdrive&lt;/code&gt;, &lt;code&gt;/slack&lt;/code&gt;, &lt;code&gt;/gmail&lt;/code&gt;, and &lt;code&gt;/redis&lt;/code&gt; under one tree, so agents can explore, read, and combine data through file-like operations.&lt;/p&gt;
&lt;p&gt;That design has two practical benefits.&lt;/p&gt;
&lt;p&gt;First, it turns tool use into environment exploration. &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, directories, files, and paths are more stable abstractions than a large set of heterogeneous API schemas.&lt;/p&gt;
&lt;p&gt;Second, it gives complex tasks an intermediate workspace. An agent can read data from different sources, organize it into files, produce intermediate outputs, and pass those outputs to the next step.&lt;/p&gt;
&lt;p&gt;Mirage is a good fit for agent scenarios where there are many data sources, but most operations are reading, searching, organizing, and combining information. Research assistants, data cleanup agents, operations assistants, and internal knowledge tools all fit this pattern.&lt;/p&gt;
&lt;p&gt;But Mirage should not be treated as a universal replacement for APIs. Operations with side effects, such as transfers, deletions, approvals, or sending messages, still need stricter permissions, confirmations, and audit trails. A filesystem abstraction can reduce reading and organization complexity, but it should not blur the risk boundary of business actions.&lt;/p&gt;
&lt;h3&gt;SkillOpt: Making Skills Trainable And Testable&lt;span class="hx-absolute -hx-mt-20" id="skillopt-making-skills-trainable-and-testable"&gt;&lt;/span&gt;
&lt;a href="#skillopt-making-skills-trainable-and-testable" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;SkillOpt comes from Microsoft Research and describes itself as &lt;strong&gt;Executive Strategy for Self-Evolving Agent Skills&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It targets the problem of reusable agent experience. Many agent systems now have skills, prompts, playbooks, or SOPs. Most of them are still written by humans and tuned through manual trial and error. Whether a skill got better or worse is often judged by a few ad hoc tests.&lt;/p&gt;
&lt;p&gt;SkillOpt takes a different approach: it does not update model weights, but instead optimizes external natural-language skills. It uses task trajectories, feedback, and validation gates to repeatedly edit skills, accepting changes only when validation improves. The output is a deployable artifact such as &lt;code&gt;best_skill.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is interesting because it upgrades a skill from &amp;ldquo;prompt experience&amp;rdquo; into a trainable asset.&lt;/p&gt;
&lt;p&gt;For development teams, this suggests that skills may be maintained more like code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;prepare fixed evaluation sets for common task types;&lt;/li&gt;
&lt;li&gt;record the impact of each skill change;&lt;/li&gt;
&lt;li&gt;feed failure cases back into the optimization loop;&lt;/li&gt;
&lt;li&gt;require human review for high-risk skills;&lt;/li&gt;
&lt;li&gt;release stable skills into real agent workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SkillOpt is closer to research and methodology than a drop-in product for every agent platform. But the direction matters: as agents depend more on skills, skills themselves need versioning, evaluation, optimization, and release processes.&lt;/p&gt;
&lt;h2&gt;Why This Matters Now&lt;span class="hx-absolute -hx-mt-20" id="why-this-matters-now"&gt;&lt;/span&gt;
&lt;a href="#why-this-matters-now" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Early AI applications were mostly chat.&lt;/p&gt;
&lt;p&gt;A user provided input, the model returned output. Context management mostly meant putting conversation history into the prompt, truncating it when it got too long, summarizing it, or adding a simple RAG layer.&lt;/p&gt;
&lt;p&gt;Agents are different.&lt;/p&gt;
&lt;p&gt;A real working agent constantly produces new state:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which files it read;&lt;/li&gt;
&lt;li&gt;which tools it called;&lt;/li&gt;
&lt;li&gt;which commands failed;&lt;/li&gt;
&lt;li&gt;which user preferences were confirmed;&lt;/li&gt;
&lt;li&gt;which lessons should be reused next time;&lt;/li&gt;
&lt;li&gt;which external resources should be loaded only when needed;&lt;/li&gt;
&lt;li&gt;which skills worked for this project and which did not.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If this information is scattered across chat history, vector stores, temporary files, and tool logs, the agent becomes difficult to control.&lt;/p&gt;
&lt;p&gt;The issue is not only that it forgets. The deeper issue is that even when it remembers, it may not know how to use what it remembered.&lt;/p&gt;
&lt;p&gt;Traditional RAG helps with part of the retrieval problem, but it often flattens information into chunks and similarity scores. For long-running agents, that is not enough. Agents need hierarchy, provenance, freshness, permissions, and task relationships. When something goes wrong, developers also need to understand why the agent retrieved the context it used.&lt;/p&gt;
&lt;p&gt;That is why projects like OpenViking, Mirage, and SkillOpt are worth watching. They are not simply expanding the context window. They are rethinking how agents organize external state.&lt;/p&gt;
&lt;h2&gt;Direction One: Context Becomes More Like A Filesystem&lt;span class="hx-absolute -hx-mt-20" id="direction-one-context-becomes-more-like-a-filesystem"&gt;&lt;/span&gt;
&lt;a href="#direction-one-context-becomes-more-like-a-filesystem" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenViking&amp;rsquo;s core idea is straightforward: organize the memory, resources, and skills that agents need through a filesystem-like structure.&lt;/p&gt;
&lt;p&gt;It emphasizes directories, files, layered loading, recursive retrieval, visualized retrieval traces, and automatic session management. The key point is not to vectorize everything. The key point is to give developers a structured and debuggable way to manage context.&lt;/p&gt;
&lt;p&gt;The engineering judgment behind this is important:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An agent&amp;rsquo;s context should not be a black-box knowledge store. It should be an organized, observable, and debuggable workspace.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If an agent makes a wrong decision because of bad context, developers should not only see &amp;ldquo;the model answered incorrectly.&amp;rdquo; They should be able to inspect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which directory it read;&lt;/li&gt;
&lt;li&gt;which memory it used;&lt;/li&gt;
&lt;li&gt;which resources it ignored;&lt;/li&gt;
&lt;li&gt;why it selected a certain skill;&lt;/li&gt;
&lt;li&gt;in which task loop the wrong assumption appeared.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This moves context management from retrieval augmentation toward context engineering.&lt;/p&gt;
&lt;h2&gt;Direction Two: External Tools Become A Virtual File Tree&lt;span class="hx-absolute -hx-mt-20" id="direction-two-external-tools-become-a-virtual-file-tree"&gt;&lt;/span&gt;
&lt;a href="#direction-two-external-tools-become-a-virtual-file-tree" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Mirage is more about the tool access layer.&lt;/p&gt;
&lt;p&gt;It mounts multiple services and data sources into one virtual filesystem. Instead of learning a separate API interface for every backend, an agent can use familiar files, directories, paths, pipes, and commands to explore its environment.&lt;/p&gt;
&lt;p&gt;The value is reducing the cognitive overhead of tool use.&lt;/p&gt;
&lt;p&gt;Many agent tool integrations look powerful, but they are costly in practice. Every MCP server, SaaS API, and database has its own parameters, permissions, pagination behavior, error codes, and data shape. The more tools an agent has, the more likely it is to fail while choosing tools or constructing arguments.&lt;/p&gt;
&lt;p&gt;If backend capabilities are exposed through one filesystem abstraction, the agent can at least rely on a stable mental model:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ls&lt;/code&gt; to see available resources;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cat&lt;/code&gt; to read content;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt; to search;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cp&lt;/code&gt; or &lt;code&gt;mv&lt;/code&gt; to organize intermediate results;&lt;/li&gt;
&lt;li&gt;snapshots or versions to manage a task workspace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This does not mean filesystems can solve every problem. Complex business actions still require clear APIs, permissions, and transaction boundaries. But for the high-frequency agent actions of reading, searching, organizing, and combining, a virtual filesystem is a natural abstraction.&lt;/p&gt;
&lt;h2&gt;Direction Three: Skills Become Optimizable Assets&lt;span class="hx-absolute -hx-mt-20" id="direction-three-skills-become-optimizable-assets"&gt;&lt;/span&gt;
&lt;a href="#direction-three-skills-become-optimizable-assets" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;SkillOpt focuses on another layer: how agents reuse experience.&lt;/p&gt;
&lt;p&gt;Many agent platforms now have skills, instructions, playbooks, or prompt libraries. The problem is that most of them are hand-written and manually tuned. Whether a skill works is often judged by trying it a few times.&lt;/p&gt;
&lt;p&gt;SkillOpt treats natural-language skills as trainable state outside the frozen model. It does not change model weights. It iterates skill documents through task trajectories, feedback, and validation gates, producing a deployable artifact such as &lt;code&gt;best_skill.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;That is interesting because it turns skills from prompt snippets into engineering assets.&lt;/p&gt;
&lt;p&gt;A mature team may not only maintain code, tests, and documentation. It may also maintain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;skills for specific task types;&lt;/li&gt;
&lt;li&gt;evaluation sets for each skill;&lt;/li&gt;
&lt;li&gt;before-and-after success rates for skill changes;&lt;/li&gt;
&lt;li&gt;rules for which tasks can be optimized automatically;&lt;/li&gt;
&lt;li&gt;review gates before high-risk skills enter production.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This resembles testing, CI, and staged rollout in software engineering. The difference is that the optimization target is a natural-language strategy rather than code.&lt;/p&gt;
&lt;h2&gt;Why This Is Bigger Than Any Single Project&lt;span class="hx-absolute -hx-mt-20" id="why-this-is-bigger-than-any-single-project"&gt;&lt;/span&gt;
&lt;a href="#why-this-is-bigger-than-any-single-project" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Looking at these projects together, the agent application stack is starting to separate into layers:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Previous Approach&lt;/th&gt;
&lt;th&gt;What Is Emerging&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model layer&lt;/td&gt;
&lt;td&gt;Pick GPT, Claude, Gemini, or DeepSeek&lt;/td&gt;
&lt;td&gt;Model routing, cost control, edge models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool layer&lt;/td&gt;
&lt;td&gt;Write API wrappers or MCP servers&lt;/td&gt;
&lt;td&gt;Tool gateways, permissions, sandboxes, virtual filesystems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context layer&lt;/td&gt;
&lt;td&gt;Chat history, RAG, handwritten memory&lt;/td&gt;
&lt;td&gt;Context databases, layered loading, retrieval traces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experience layer&lt;/td&gt;
&lt;td&gt;Prompts, system instructions, human SOPs&lt;/td&gt;
&lt;td&gt;Skills, evaluation, automatic optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operations layer&lt;/td&gt;
&lt;td&gt;Watch tokens and logs&lt;/td&gt;
&lt;td&gt;Cost, permissions, audit, replay, failure analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This suggests that agent competition will become increasingly engineering-heavy.&lt;/p&gt;
&lt;p&gt;In the future, the quality of an agent product will not only depend on which model it uses. It will also depend on whether it has a stable context system: whether it remembers the right things, forgets noisy information, loads context on demand, explains what context it used, and turns successful workflows into reusable skills.&lt;/p&gt;
&lt;h2&gt;Practical Takeaways For Developers&lt;span class="hx-absolute -hx-mt-20" id="practical-takeaways-for-developers"&gt;&lt;/span&gt;
&lt;a href="#practical-takeaways-for-developers" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you are building an agent application, you do not necessarily need to adopt these projects immediately. But you should start treating context as a first-class design problem.&lt;/p&gt;
&lt;p&gt;I would check the following questions first:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Is context structured?&lt;/strong&gt;&lt;br&gt;
Do not dump everything into the prompt. At least separate user preferences, project documentation, task logs, tool outputs, long-term memory, and temporary drafts.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Does context have provenance?&lt;/strong&gt;&lt;br&gt;
Every memory, resource, and skill should trace back to its source. Otherwise, when an agent acts on bad information, debugging becomes painful.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Does context have a lifecycle?&lt;/strong&gt;&lt;br&gt;
Some information is only useful for the current task. Some should be retained long term. Some must expire. Long-term memory is not better just because it is larger.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Is context observable?&lt;/strong&gt;&lt;br&gt;
At minimum, record what the agent read, what it skipped, which skill it used, and where it failed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Are skills evaluated?&lt;/strong&gt;&lt;br&gt;
If a skill affects real task outcomes, do not change it purely by feel. Prepare fixed tasks and judge changes by success rate, latency, cost, and error patterns.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Boundaries&lt;span class="hx-absolute -hx-mt-20" id="boundaries"&gt;&lt;/span&gt;
&lt;a href="#boundaries" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This kind of infrastructure should not be over-romanticized.&lt;/p&gt;
&lt;p&gt;First, a context system does not replace a permission system. What an agent can see, call, and write still needs independent control.&lt;/p&gt;
&lt;p&gt;Second, a virtual filesystem should not turn every business operation into a file operation. Actions such as transactions, approvals, deletions, and external messages need explicit confirmation and auditability.&lt;/p&gt;
&lt;p&gt;Third, automatic skill optimization is not magic. If the evaluation set is weak, the optimized skill may overfit a few tasks and become more fragile in real use.&lt;/p&gt;
&lt;p&gt;Fourth, these open-source projects are moving quickly. OpenViking, Mirage, and SkillOpt are worth watching, but before production use, teams still need to evaluate licenses, data boundaries, dependency complexity, and maintenance pace.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The next stage of agents will not be driven by stronger models alone.&lt;/p&gt;
&lt;p&gt;Models still matter, but they only solve part of the reasoning problem. What makes agents work over longer horizons is another layer: how context is organized, how tools are exposed, how experience is captured, how failures are replayed, and how permissions are narrowed.&lt;/p&gt;
&lt;p&gt;The shared signal from OpenViking, Mirage, and SkillOpt is this: &lt;strong&gt;agents need their own infrastructure layer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the last year was about making models use tools, the next question is more operational:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When tools multiply, tasks get longer, and context becomes more complex, why should an agent still work reliably?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The answer is probably not a longer prompt. It is a manageable, observable, and iterative context system.&lt;/p&gt;
&lt;h2&gt;References&lt;span class="hx-absolute -hx-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/volcengine/OpenViking" target="_blank" rel="noopener"&gt;OpenViking: The Context Database for AI Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/strukto-ai/mirage" target="_blank" rel="noopener"&gt;Mirage: A Unified Virtual Filesystem For AI Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/SkillOpt" target="_blank" rel="noopener"&gt;SkillOpt: Executive Strategy for Self-Evolving Agent Skills&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2605.23904" target="_blank" rel="noopener"&gt;SkillOpt paper on arXiv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>The Free Era of AI Tools Is Ending: From Copilot Token Billing to Agent Budget Governance</title><link>https://silenceper.com/en/article/2026-05-31-ai-tool-usage-based-billing-agent-budget/</link><pubDate>Sun, 31 May 2026 01:20:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-31-ai-tool-usage-based-billing-agent-budget/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260531/ai-tool-budget-governance-cover.png" alt="AI tool budget governance cover" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Several recent signals point in the same direction: AI tooling costs are becoming harder to hide.&lt;/p&gt;
&lt;p&gt;GitHub Copilot is moving to usage-based billing on June 1, 2026. Instead of relying only on a more abstract premium request model, GitHub is introducing GitHub AI Credits and calculating usage based on model token consumption.&lt;/p&gt;
&lt;p&gt;At the same time, OpenRouter has launched Guardrails, a workspace-level governance layer for budgets, model and provider restrictions, zero data retention, prompt injection defense, and data loss prevention. On the open source side, projects like AgentBudget are appearing with a very direct goal: put an &lt;code&gt;ulimit&lt;/code&gt;-style hard budget around AI agent sessions so one agent run cannot burn through an entire AI budget.&lt;/p&gt;
&lt;p&gt;Taken together, the signal is clear:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI tools are moving from “buy a subscription and use it freely” to “every long-running task, model choice, and agent loop needs to be measured and governed.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is not just a price increase story. It is the cost model catching up with the new shape of AI tools.&lt;/p&gt;
&lt;h2&gt;Why This Is Happening Now&lt;span class="hx-absolute -hx-mt-20" id="why-this-is-happening-now"&gt;&lt;/span&gt;
&lt;a href="#why-this-is-happening-now" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Early AI coding tools were closer to enhanced editor plugins.&lt;/p&gt;
&lt;p&gt;You asked for a code completion, an explanation, or a small test. Behind the scenes, the model still had a token cost, but the product could wrap that complexity inside a subscription plan or request quota.&lt;/p&gt;
&lt;p&gt;That is no longer the full picture.&lt;/p&gt;
&lt;p&gt;Modern AI coding tools now do things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;read large parts of a repository;&lt;/li&gt;
&lt;li&gt;plan changes across multiple files;&lt;/li&gt;
&lt;li&gt;call terminals, browsers, MCP servers, and external APIs;&lt;/li&gt;
&lt;li&gt;run tests and retry fixes;&lt;/li&gt;
&lt;li&gt;create pull requests and review code;&lt;/li&gt;
&lt;li&gt;keep long-running sessions alive while iterating on a task.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In GitHub&amp;rsquo;s announcement, Copilot is described as having evolved from an editor assistant into an agentic platform that can run long, multi-step coding sessions and iterate across repositories. That kind of agentic usage has a very different compute and inference profile.&lt;/p&gt;
&lt;p&gt;That is the core issue: &lt;strong&gt;a short chat and a long autonomous coding session may have looked similar under the old billing model, but their real costs are not similar at all.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From a platform perspective, usage-based billing was likely inevitable.&lt;/p&gt;
&lt;h2&gt;What Copilot&amp;rsquo;s Change Really Means&lt;span class="hx-absolute -hx-mt-20" id="what-copilots-change-really-means"&gt;&lt;/span&gt;
&lt;a href="#what-copilots-change-really-means" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There are several important details in GitHub&amp;rsquo;s change.&lt;/p&gt;
&lt;p&gt;First, base Copilot subscription prices are not directly changing, but each plan now includes a certain amount of GitHub AI Credits. Usage beyond that is calculated from token consumption, including input, output, and cached tokens.&lt;/p&gt;
&lt;p&gt;Second, the old premium request unit is being replaced. Users used to think in terms of “how many requests do I have left?” They now need to think in terms of “how many tokens or credits did this task consume?”&lt;/p&gt;
&lt;p&gt;Third, code completions and Next Edit Suggestions remain included in Copilot plans and do not consume AI Credits. Heavier capabilities such as chat, agents, and code review are the ones moving toward finer-grained metering.&lt;/p&gt;
&lt;p&gt;Fourth, fallback behavior is going away. In the past, when certain quotas were exhausted, some interactions could fall back to a lower-cost model. Under the new model, whether work continues depends more directly on remaining credits and administrator budget settings.&lt;/p&gt;
&lt;p&gt;Fifth, Copilot code review consumes not only AI Credits but also GitHub Actions minutes. This matters because once AI features begin executing real workflows, they consume more than just model tokens. They consume runtime resources too.&lt;/p&gt;
&lt;p&gt;So developers and teams can no longer ask only:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How much does this AI tool cost per month?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They also need to ask:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What does our usage pattern look like? Which tasks consume the most tokens? Which models are expensive? Which agent runs can spiral? When the budget is exceeded, should the system stop, downgrade, or keep billing?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Why Agents Need Budget Governance&lt;span class="hx-absolute -hx-mt-20" id="why-agents-need-budget-governance"&gt;&lt;/span&gt;
&lt;a href="#why-agents-need-budget-governance" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The cost of a normal chat tool is usually easier to reason about. A user asks something, the model replies, and the main risk is that the context grows too long.&lt;/p&gt;
&lt;p&gt;Agents are different. They have several natural failure modes that can burn through budget.&lt;/p&gt;
&lt;h3&gt;1. Agents Loop&lt;span class="hx-absolute -hx-mt-20" id="1-agents-loop"&gt;&lt;/span&gt;
&lt;a href="#1-agents-loop" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;A coding agent may go through a loop like this:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;read code -&amp;gt; write patch -&amp;gt; run tests -&amp;gt; fail -&amp;gt; read more code -&amp;gt; patch again -&amp;gt; run tests again&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Without a stopping condition, it can spend many rounds on the same error. Each round costs model calls, tool calls, and context transfer.&lt;/p&gt;
&lt;h3&gt;2. Agents Expand Context&lt;span class="hx-absolute -hx-mt-20" id="2-agents-expand-context"&gt;&lt;/span&gt;
&lt;a href="#2-agents-expand-context" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To understand a task, an agent may read files, issues, pull requests, web pages, logs, and documentation. The larger the context, the more input tokens it consumes. The longer the response, the more output tokens it consumes.&lt;/p&gt;
&lt;h3&gt;3. Agents Call Tools&lt;span class="hx-absolute -hx-mt-20" id="3-agents-call-tools"&gt;&lt;/span&gt;
&lt;a href="#3-agents-call-tools" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Search, browser automation, databases, vector retrieval, code execution, sandboxes, and CI all have costs. A real agent budget should include more than LLM tokens.&lt;/p&gt;
&lt;h3&gt;4. Agents Can Work Hard in the Wrong Direction&lt;span class="hx-absolute -hx-mt-20" id="4-agents-can-work-hard-in-the-wrong-direction"&gt;&lt;/span&gt;
&lt;a href="#4-agents-can-work-hard-in-the-wrong-direction" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;If the user&amp;rsquo;s goal is unclear or the context is noisy, an agent can choose the wrong direction. When the direction is wrong, more effort just means more cost.&lt;/p&gt;
&lt;p&gt;That is why agent-era cost governance is not just about saving money. It is part of engineering safety.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260531/agent-budget-governance-flow.png" alt="AI Agent task cost governance flow" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;From Quotas to Guardrails&lt;span class="hx-absolute -hx-mt-20" id="from-quotas-to-guardrails"&gt;&lt;/span&gt;
&lt;a href="#from-quotas-to-guardrails" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenRouter&amp;rsquo;s Guardrails is a useful example of where this is heading.&lt;/p&gt;
&lt;p&gt;It is not just a billing page. It puts governance into the request path: daily, weekly, and monthly budgets can be enforced; requests can fail once limits are reached; model and provider access can be restricted; zero-data-retention providers can be required; prompt injection and data loss protection can be added.&lt;/p&gt;
&lt;p&gt;The value is that it turns “look at the bill later” into “set boundaries before execution.”&lt;/p&gt;
&lt;p&gt;For individual developers, that may prevent a script from running wild. For teams, the questions are more operational:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Should every developer be allowed to use the most expensive model?&lt;/li&gt;
&lt;li&gt;Should automated jobs be allowed to retry indefinitely?&lt;/li&gt;
&lt;li&gt;Can each API key have its own budget?&lt;/li&gt;
&lt;li&gt;Should test and production environments use different model pools?&lt;/li&gt;
&lt;li&gt;When customer data is involved, should the system force zero-data-retention providers?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once AI calls enter real business workflows, these questions become more important than simply asking which model is smartest.&lt;/p&gt;
&lt;h2&gt;Why AgentBudget Is Worth Watching&lt;span class="hx-absolute -hx-mt-20" id="why-agentbudget-is-worth-watching"&gt;&lt;/span&gt;
&lt;a href="#why-agentbudget-is-worth-watching" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;AgentBudget has a simple premise: put a hard budget around AI agent sessions.&lt;/p&gt;
&lt;p&gt;It can wrap LLM calls, tool calls, and external API requests; track cost in real time; and trigger a circuit breaker when a limit is reached. It also addresses a practical issue: do not let an agent get cut off right before the final answer, so it can reserve part of the budget for the final response.&lt;/p&gt;
&lt;p&gt;This shows that cost governance is moving from the platform layer into the application layer.&lt;/p&gt;
&lt;p&gt;If you are building your own agent, you cannot rely only on the model provider&amp;rsquo;s invoice. A provider bill usually tells you how much you spent after the fact. Your application needs to know during execution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How much has this task already consumed?&lt;/li&gt;
&lt;li&gt;Is the remaining budget enough for the next step?&lt;/li&gt;
&lt;li&gt;Is the agent stuck in a repeated-call loop?&lt;/li&gt;
&lt;li&gt;Should each subtask have its own budget?&lt;/li&gt;
&lt;li&gt;When the budget is almost exhausted, should the agent stop, downgrade, or summarize current progress?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is similar to &lt;code&gt;timeout&lt;/code&gt;, &lt;code&gt;rate limit&lt;/code&gt;, and &lt;code&gt;memory limit&lt;/code&gt; in traditional systems. We used to limit process resources. Now we need to limit agent resources.&lt;/p&gt;
&lt;h2&gt;Token Bills Need to Be Auditable Too&lt;span class="hx-absolute -hx-mt-20" id="token-bills-need-to-be-auditable-too"&gt;&lt;/span&gt;
&lt;a href="#token-bills-need-to-be-auditable-too" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Once tokens become the core billing unit, another issue appears: can the token count itself be trusted?&lt;/p&gt;
&lt;p&gt;A recent arXiv paper discusses the risk of token inflation. Its core point is that commercial model providers often hide model implementation details, tokenizers, and execution internals, which makes it hard for users to independently verify reported token counts.&lt;/p&gt;
&lt;p&gt;This does not mean every provider will misreport usage. But it does mean that &lt;strong&gt;when token-based billing becomes mainstream, cost observability and auditability become infrastructure concerns.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A team should not store only a single final cost number. A more useful record looks like this:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What to record&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Task&lt;/td&gt;
&lt;td&gt;User goal, task ID, entry point&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Model, provider, pricing tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage&lt;/td&gt;
&lt;td&gt;Input, output, cached tokens, streaming mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;Search, browser, CI, external APIs, and other costs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Controls&lt;/td&gt;
&lt;td&gt;Budget, rate limit, downgrade, blocking reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Result&lt;/td&gt;
&lt;td&gt;Completion status, retries, human handoff&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This connects directly to agent observability. The more autonomous an AI system becomes, the more important it is to connect cost, permissions, context, and outcome.&lt;/p&gt;
&lt;h2&gt;Advice for Individual Developers&lt;span class="hx-absolute -hx-mt-20" id="advice-for-individual-developers"&gt;&lt;/span&gt;
&lt;a href="#advice-for-individual-developers" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you use AI coding tools every day, start with a few habits.&lt;/p&gt;
&lt;p&gt;First, do not use the strongest model by default. Simple completions, error explanations, and small scripts can often use cheaper models. Save stronger models for architecture, complex debugging, and cross-file changes.&lt;/p&gt;
&lt;p&gt;Second, ask for a plan before letting AI execute a large task. Planning exposes context scope, risks, and verification strategy before the costly loop begins.&lt;/p&gt;
&lt;p&gt;Third, set stopping conditions for long tasks. Limit the number of test runs, directories to inspect, or retry rounds. When an agent fails repeatedly, have it summarize instead of guessing forever.&lt;/p&gt;
&lt;p&gt;Fourth, look at the shape of your bill, not just the total. The useful question is which tasks, models, tools, and workflows consume the most.&lt;/p&gt;
&lt;h2&gt;Advice for Small Teams&lt;span class="hx-absolute -hx-mt-20" id="advice-for-small-teams"&gt;&lt;/span&gt;
&lt;a href="#advice-for-small-teams" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Small teams should treat AI cost as engineering governance, not only as a finance issue.&lt;/p&gt;
&lt;p&gt;Start with these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Separate budgets by scenario&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;daily Q&amp;amp;A&lt;/li&gt;
&lt;li&gt;code generation&lt;/li&gt;
&lt;li&gt;automated code review&lt;/li&gt;
&lt;li&gt;batch refactoring&lt;/li&gt;
&lt;li&gt;AI checks inside CI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Separate permissions by role&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;regular developers default to cheaper models;&lt;/li&gt;
&lt;li&gt;senior developers can manually switch to stronger models;&lt;/li&gt;
&lt;li&gt;automated tasks need hard budgets;&lt;/li&gt;
&lt;li&gt;production-related tasks need approval.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Set hard boundaries for agents&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;maximum spend;&lt;/li&gt;
&lt;li&gt;maximum iteration rounds;&lt;/li&gt;
&lt;li&gt;maximum context scope;&lt;/li&gt;
&lt;li&gt;maximum tool calls;&lt;/li&gt;
&lt;li&gt;downgrade strategy after failure.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Include cost in retrospectives&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How much human time did AI save?&lt;/li&gt;
&lt;li&gt;Did the cost come from models or tools?&lt;/li&gt;
&lt;li&gt;Which steps could be replaced by rules, caching, or scripts?&lt;/li&gt;
&lt;li&gt;Should the workflow become a skill to reduce repeated cost next time?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;This Is Not Entirely Bad&lt;span class="hx-absolute -hx-mt-20" id="this-is-not-entirely-bad"&gt;&lt;/span&gt;
&lt;a href="#this-is-not-entirely-bad" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;When people see token-based billing, the first reaction is often that AI tools are getting more expensive.&lt;/p&gt;
&lt;p&gt;That is real. But it is also a sign that AI tools are maturing.&lt;/p&gt;
&lt;p&gt;Subscription pricing hides complexity and works well for early adoption. Usage-based billing exposes real resource consumption and forces both platforms and users to face the cost of execution.&lt;/p&gt;
&lt;p&gt;Once agents start doing real work on your behalf, cost governance is no longer optional.&lt;/p&gt;
&lt;p&gt;A more mature AI engineering system needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;model selection;&lt;/li&gt;
&lt;li&gt;context management;&lt;/li&gt;
&lt;li&gt;permission control;&lt;/li&gt;
&lt;li&gt;tool auditing;&lt;/li&gt;
&lt;li&gt;budget limits;&lt;/li&gt;
&lt;li&gt;task retrospectives;&lt;/li&gt;
&lt;li&gt;downgrade and stopping strategies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The next stage of AI tooling is not only about being smarter. It is about being more controllable.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The teams that manage cost, permissions, and execution boundaries well will be the ones best positioned to put AI agents into real workflows.&lt;/p&gt;
&lt;h2&gt;References&lt;span class="hx-absolute -hx-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/" target="_blank" rel="noopener"&gt;GitHub Copilot is moving to usage-based billing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/copilot/reference/copilot-billing" target="_blank" rel="noopener"&gt;GitHub Copilot billing documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.blog/changelog/2026-05-12-april-reports-are-now-available-to-prepare-for-usage-based-billing" target="_blank" rel="noopener"&gt;April reports are now available to prepare for usage-based billing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcrunch.com/2026/05/30/what-a-joke-github-copilots-new-token-based-billing-spurs-consternation-among-devs/" target="_blank" rel="noopener"&gt;What a joke: GitHub Copilot&amp;rsquo;s new token-based billing spurs consternation among devs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openrouter.ai/announcements/guardrails" target="_blank" rel="noopener"&gt;Guardrails: Protect your Agents, Data, and Costs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AgentBudget/agentbudget" target="_blank" rel="noopener"&gt;AgentBudget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2605.30040" target="_blank" rel="noopener"&gt;Token Inflation: How Dishonest Providers Can Overcharge for Large Language Model Usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FreeDomain: A Free Domain Entry Point for Personal and Open Source Projects</title><link>https://silenceper.com/en/article/2026-05-29-freedomain-free-domain-for-projects/</link><pubDate>Fri, 29 May 2026 20:00:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-29-freedomain-free-domain-for-projects/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260529/freedomain-logo.jpg" alt="DigitalPlat FreeDomain Logo" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;DigitalPlat FreeDomain&lt;/strong&gt; is a platform for free domain registration and DNS integration. Its goal is to help individuals, developers, open source projects, and organizations get an online identity with lower cost.&lt;/p&gt;
&lt;h2&gt;Basic Information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Information&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub repository&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/DigitalPlatDev/FreeDomain" target="_blank" rel="noopener"&gt;https://github.com/DigitalPlatDev/FreeDomain&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://domain.digitalplat.org" target="_blank" rel="noopener"&gt;https://domain.digitalplat.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Registration dashboard&lt;/td&gt;
&lt;td&gt;&lt;a href="https://dash.domain.digitalplat.org/" target="_blank" rel="noopener"&gt;https://dash.domain.digitalplat.org/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main language&lt;/td&gt;
&lt;td&gt;HTML, with some JavaScript / Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;AGPL-3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub popularity&lt;/td&gt;
&lt;td&gt;About 171k stars and 3.3k forks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Available extensions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.DPDNS.ORG&lt;/code&gt;, &lt;code&gt;.US.KG&lt;/code&gt;, &lt;code&gt;.QZZ.IO&lt;/code&gt;, &lt;code&gt;.XX.KG&lt;/code&gt;, &lt;code&gt;.QD.JE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem It Solves&lt;span class="hx-absolute -hx-mt-20" id="what-problem-it-solves"&gt;&lt;/span&gt;
&lt;a href="#what-problem-it-solves" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A domain name is one of the most basic pieces of getting a website online. But for students, individual developers, small teams, open source projects, and nonprofits, buying and renewing a domain is still a cost to consider.&lt;/p&gt;
&lt;p&gt;FreeDomain tries to lower that barrier. Users can claim a free domain and connect it to a DNS provider they already know, then use it for a personal homepage, project documentation, demo site, open source service, or organization website.&lt;/p&gt;
&lt;p&gt;It is not trying to replace traditional commercial domain registrars. Its value is giving budget-constrained or early-stage projects an easier way to get started.&lt;/p&gt;
&lt;h2&gt;Core Features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Free Domain Registration&lt;span class="hx-absolute -hx-mt-20" id="free-domain-registration"&gt;&lt;/span&gt;
&lt;a href="#free-domain-registration" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Users can apply for free domains through the DigitalPlat FreeDomain dashboard. The extensions listed in the README currently include &lt;code&gt;.DPDNS.ORG&lt;/code&gt;, &lt;code&gt;.US.KG&lt;/code&gt;, &lt;code&gt;.QZZ.IO&lt;/code&gt;, &lt;code&gt;.XX.KG&lt;/code&gt;, and &lt;code&gt;.QD.JE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For many personal projects, this is already enough for a public demo, test service, or shareable project page.&lt;/p&gt;
&lt;h3&gt;Freedom to Choose a DNS Provider&lt;span class="hx-absolute -hx-mt-20" id="freedom-to-choose-a-dns-provider"&gt;&lt;/span&gt;
&lt;a href="#freedom-to-choose-a-dns-provider" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;FreeDomain does not require users to stay with one fixed DNS platform. The README mentions Cloudflare, FreeDNS by Afraid.org, Hostry, and self-hosted DNS infrastructure as possible options.&lt;/p&gt;
&lt;p&gt;That means after you get a domain, DNS records, CDN, SSL, access rules, and related setup can still follow the services and workflow you already prefer.&lt;/p&gt;
&lt;h3&gt;Beginner-friendly Documentation&lt;span class="hx-absolute -hx-mt-20" id="beginner-friendly-documentation"&gt;&lt;/span&gt;
&lt;a href="#beginner-friendly-documentation" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The repository includes tutorial pages covering account creation, DNS hosting setup, and domain activation. The docs are written for first-time domain users, individual developers, open source projects, and nonprofits.&lt;/p&gt;
&lt;p&gt;This is useful for people without prior DNS experience. You do not need to understand the whole domain system before following the basic setup steps.&lt;/p&gt;
&lt;h3&gt;Abuse Handling and Security Notices&lt;span class="hx-absolute -hx-mt-20" id="abuse-handling-and-security-notices"&gt;&lt;/span&gt;
&lt;a href="#abuse-handling-and-security-notices" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Free domain platforms are easy targets for abuse, so the project provides an abuse report email for handling domain abuse reports.&lt;/p&gt;
&lt;p&gt;The README also includes an important security notice: its previous Telegram account and group were compromised and are no longer official communication channels. The project currently points users to Discord. When using this kind of free service, it is safer to rely on GitHub, the official website, and the official Discord server instead of unofficial links or announcements.&lt;/p&gt;
&lt;h2&gt;Who It Is For&lt;span class="hx-absolute -hx-mt-20" id="who-it-is-for"&gt;&lt;/span&gt;
&lt;a href="#who-it-is-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Individual developers who want a domain for a homepage, demo, or documentation site&lt;/li&gt;
&lt;li&gt;Students and creators who want an independent domain but have limited budget&lt;/li&gt;
&lt;li&gt;Open source projects that need a quick public entry point&lt;/li&gt;
&lt;li&gt;Users who want to pair a free domain with Cloudflare or other DNS/CDN services&lt;/li&gt;
&lt;li&gt;Small organizations, nonprofit projects, and early product prototypes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the registration dashboard:
&lt;a href="https://dash.domain.digitalplat.org/" target="_blank" rel="noopener"&gt;https://dash.domain.digitalplat.org/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Register or sign in to a DigitalPlat account.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose an available free domain extension, such as &lt;code&gt;.us.kg&lt;/code&gt; or &lt;code&gt;.dpdns.org&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Submit the domain request.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure DNS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use Cloudflare;&lt;/li&gt;
&lt;li&gt;use FreeDNS or Hostry;&lt;/li&gt;
&lt;li&gt;or connect your own DNS service.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Follow the official tutorial to complete activation and DNS setup:
&lt;a href="https://github.com/DigitalPlatDev/FreeDomain/blob/main/documents/tutorial/index.md" target="_blank" rel="noopener"&gt;https://github.com/DigitalPlatDev/FreeDomain/blob/main/documents/tutorial/index.md&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One thing to note: the FAQ says the current default limit is 1 domain per user account. This policy is meant to reduce abuse and keep usage fair.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;FreeDomain’s value is straightforward: &lt;strong&gt;it helps more people get a usable domain first, then build their website or project on top of it.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you are building a personal project, open source project, student portfolio, nonprofit page, or early product demo, it can be a low-cost domain entry point. You can still combine it with mature DNS services such as Cloudflare, so the overall management and migration cost remains low.&lt;/p&gt;
&lt;p&gt;That said, free domains usually come with usage rules, quota limits, and abuse review. For long-term production use, read the FAQ and platform policies carefully. For learning, showcasing, validation, and lightweight projects, it is worth knowing about.&lt;/p&gt;</description></item><item><title>Pi: A Coding Agent Harness You Can Reshape Around Your Workflow</title><link>https://silenceper.com/en/article/2026-05-27-pi-coding-agent-harness/</link><pubDate>Wed, 27 May 2026 23:45:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-27-pi-coding-agent-harness/</guid><description>
&lt;p&gt;AI coding tools are increasingly becoming full products: built-in plan mode, permission prompts, sub-agents, MCP, task lists, background jobs, and graphical interfaces.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;earendil-works/pi&lt;/code&gt; takes a different path: &lt;strong&gt;keep the core small, and make the rest open to user extension.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Project: &lt;a href="https://github.com/earendil-works/pi" target="_blank" rel="noopener"&gt;https://github.com/earendil-works/pi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Documentation: &lt;a href="https://pi.dev/" target="_blank" rel="noopener"&gt;https://pi.dev/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;One-line positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Pi is a customizable terminal AI coding agent harness: it provides a coding agent, tool-calling runtime, unified model API, TUI components, and package system so you can adapt the agent to your workflow instead of adapting yourself to the tool.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If many coding agents feel like ready-made products, Pi feels more like a set of building blocks for your own agent setup.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Pi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repository&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/earendil-works/pi" target="_blank" rel="noopener"&gt;https://github.com/earendil-works/pi&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://pi.dev/" target="_blank" rel="noopener"&gt;https://pi.dev/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main stack&lt;/td&gt;
&lt;td&gt;Mostly TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core packages&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pi-coding-agent&lt;/code&gt;, &lt;code&gt;pi-agent-core&lt;/code&gt;, &lt;code&gt;pi-ai&lt;/code&gt;, &lt;code&gt;pi-tui&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime modes&lt;/td&gt;
&lt;td&gt;Interactive TUI, print/JSON, RPC, SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main use cases&lt;/td&gt;
&lt;td&gt;Terminal coding agent, custom agent workflows, model/tool/UI extension&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: stars, forks, versions, and language percentages change over time. Check the GitHub repository for live numbers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Many agent tools are getting more powerful, but that also creates a problem: the default workflow keeps getting heavier.&lt;/p&gt;
&lt;p&gt;Some users want built-in plan mode, permission confirmation, MCP, sub-agents, and a graphical interface. Others want a lightweight, scriptable agent that fits naturally into their terminal workflow.&lt;/p&gt;
&lt;p&gt;Pi&amp;rsquo;s bet is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do not put every feature into the core.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Keep the agent harness small.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Expose extension points so users can compose their own workflow.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That is the most interesting part of the project. Pi is not just another replacement for Claude Code or Codex. It is asking a different question: &lt;strong&gt;what should the agent foundation look like if individuals and teams want to keep reshaping it over time?&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Core features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. A terminal-first coding agent&lt;span class="hx-absolute -hx-mt-20" id="1-a-terminal-first-coding-agent"&gt;&lt;/span&gt;
&lt;a href="#1-a-terminal-first-coding-agent" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pi&amp;rsquo;s main entry point is a terminal TUI. It supports the usual AI coding agent workflow: reading project context, calling tools, editing files, running commands, and iterating within a session.&lt;/p&gt;
&lt;p&gt;The official positioning is clear: Pi is a minimal terminal coding harness. The goal is not to turn every feature into a fixed button, but to let the tool fit into your terminal habits.&lt;/p&gt;
&lt;h3&gt;2. Multiple models and providers&lt;span class="hx-absolute -hx-mt-20" id="2-multiple-models-and-providers"&gt;&lt;/span&gt;
&lt;a href="#2-multiple-models-and-providers" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pi uses &lt;code&gt;@earendil-works/pi-ai&lt;/code&gt; as a unified multi-provider LLM API.&lt;/p&gt;
&lt;p&gt;The website lists providers such as Anthropic, OpenAI, Google, Azure, Bedrock, Mistral, Groq, Cerebras, xAI, Hugging Face, OpenRouter, and Ollama. What you can actually use depends on your configuration, account, and API keys.&lt;/p&gt;
&lt;p&gt;This is useful for teams: you can separate the agent workflow from the model vendor instead of replacing the whole tool whenever you switch models.&lt;/p&gt;
&lt;h3&gt;3. An extensible agent runtime&lt;span class="hx-absolute -hx-mt-20" id="3-an-extensible-agent-runtime"&gt;&lt;/span&gt;
&lt;a href="#3-an-extensible-agent-runtime" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;@earendil-works/pi-agent-core&lt;/code&gt; provides agent runtime capabilities such as tool calling and state management.&lt;/p&gt;
&lt;p&gt;That means Pi is not only a CLI. It can also be reused as a lower-level agent component. You can embed it in a Node.js application, or call it from another system through RPC or JSON event streams.&lt;/p&gt;
&lt;h3&gt;4. Skills, prompt templates, extensions, and packages&lt;span class="hx-absolute -hx-mt-20" id="4-skills-prompt-templates-extensions-and-packages"&gt;&lt;/span&gt;
&lt;a href="#4-skills-prompt-templates-extensions-and-packages" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pi&amp;rsquo;s extension model is close to productized context engineering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt;: on-demand capability instructions and tool constraints;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prompt templates&lt;/strong&gt;: reusable prompts;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensions&lt;/strong&gt;: TypeScript modules that can extend tools, commands, keybindings, events, and the TUI;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pi packages&lt;/strong&gt;: bundled extensions, skills, prompts, and themes that can be shared.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The value is that you do not need to control the agent with one long prompt every time. Stable rules, tools, and workflows can become reusable assets.&lt;/p&gt;
&lt;h3&gt;5. Session trees and shareable history&lt;span class="hx-absolute -hx-mt-20" id="5-session-trees-and-shareable-history"&gt;&lt;/span&gt;
&lt;a href="#5-session-trees-and-shareable-history" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Pi stores sessions as trees. You can return to an earlier point, branch from there, export the session as HTML, or share it.&lt;/p&gt;
&lt;p&gt;That matters when debugging agent behavior. Real workflows often involve attempts, failures, corrections, and rollbacks. A tree-shaped history is better than a purely linear chat for preserving those decision paths.&lt;/p&gt;
&lt;h2&gt;An important tradeoff: not everything is built in&lt;span class="hx-absolute -hx-mt-20" id="an-important-tradeoff-not-everything-is-built-in"&gt;&lt;/span&gt;
&lt;a href="#an-important-tradeoff-not-everything-is-built-in" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pi&amp;rsquo;s website has a dedicated &amp;ldquo;What we didn&amp;rsquo;t build&amp;rdquo; section: no built-in MCP, no built-in sub-agents, no built-in permission popups, no built-in plan mode, no built-in todos, and no built-in background bash.&lt;/p&gt;
&lt;p&gt;This is not simply a missing feature list. It is a product philosophy:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The core provides primitives. More complex features can be built through extensions, skills, scripts, tmux, or packages.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That tradeoff filters the audience.&lt;/p&gt;
&lt;p&gt;If you want a complete, conservative, ready-made agent product, Pi may feel too open-ended. If you want control over the system prompt, context, commands, UI, and runtime behavior, Pi becomes more interesting.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Good fit&lt;span class="hx-absolute -hx-mt-20" id="good-fit"&gt;&lt;/span&gt;
&lt;a href="#good-fit" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Developers who spend a lot of time in the terminal;&lt;/li&gt;
&lt;li&gt;People who want to study how AI coding agents are built;&lt;/li&gt;
&lt;li&gt;Teams that want to connect an agent to their own tools, scripts, or products;&lt;/li&gt;
&lt;li&gt;Teams that want to accumulate reusable skills, prompt templates, and extensions;&lt;/li&gt;
&lt;li&gt;Users who need multi-model and multi-provider switching without binding themselves to one platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Poor fit&lt;span class="hx-absolute -hx-mt-20" id="poor-fit"&gt;&lt;/span&gt;
&lt;a href="#poor-fit" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Users who want a zero-config graphical product;&lt;/li&gt;
&lt;li&gt;Users who do not want to understand terminals, config files, or extension mechanisms;&lt;/li&gt;
&lt;li&gt;Teams that need enterprise-grade permission review, centralized control, audit logs, and SLA out of the box;&lt;/li&gt;
&lt;li&gt;Users who only want the agent to write code immediately and do not care about workflow malleability.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The official documentation shows this npm install path:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g --ignore-scripts @earendil-works/pi-coding-agent&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;On macOS and Linux, you can also use the installer:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://pi.dev/install.sh &lt;span class="p"&gt;|&lt;/span&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then run it inside a project directory:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Authentication can be done with &lt;code&gt;/login&lt;/code&gt;, or by setting provider API keys such as &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;. Follow the official docs for the current provider setup details.&lt;/p&gt;
&lt;h2&gt;How I would try it&lt;span class="hx-absolute -hx-mt-20" id="how-i-would-try-it"&gt;&lt;/span&gt;
&lt;a href="#how-i-would-try-it" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you are only evaluating Pi, do not start by studying every extension mechanism.&lt;/p&gt;
&lt;p&gt;A better path:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pick a non-critical repository;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pi&lt;/code&gt; and ask it to read the project and make a small change;&lt;/li&gt;
&lt;li&gt;Try &lt;code&gt;pi -p &amp;quot;...&amp;quot;&lt;/code&gt; in print mode and see whether it fits scripting use cases;&lt;/li&gt;
&lt;li&gt;Check whether session trees, skills, and prompt templates can capture your repeatable workflows;&lt;/li&gt;
&lt;li&gt;Only then decide whether to study extensions and packages.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The key question is not whether its first output is impressive. The question is whether you can put your own rules into it and reuse them over time.&lt;/p&gt;
&lt;h2&gt;Pros and limitations&lt;span class="hx-absolute -hx-mt-20" id="pros-and-limitations"&gt;&lt;/span&gt;
&lt;a href="#pros-and-limitations" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Pros&lt;span class="hx-absolute -hx-mt-20" id="pros"&gt;&lt;/span&gt;
&lt;a href="#pros" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Small core, good fit for terminal-heavy developers;&lt;/li&gt;
&lt;li&gt;Clear extension points for context engineering and custom workflows;&lt;/li&gt;
&lt;li&gt;Broad multi-provider support, reducing model lock-in;&lt;/li&gt;
&lt;li&gt;Session trees, export, and sharing are useful for reviewing agent behavior;&lt;/li&gt;
&lt;li&gt;MIT license, friendly to secondary development and commercial experiments.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Possible limitations&lt;span class="hx-absolute -hx-mt-20" id="possible-limitations"&gt;&lt;/span&gt;
&lt;a href="#possible-limitations" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;More freedom also means more learning cost;&lt;/li&gt;
&lt;li&gt;Many advanced capabilities need to be assembled through extensions or external tools;&lt;/li&gt;
&lt;li&gt;It is not as friendly to non-terminal users;&lt;/li&gt;
&lt;li&gt;Team-level permissions, security, and auditing need additional work;&lt;/li&gt;
&lt;li&gt;The maturity of the ecosystem depends on future packages, extensions, and community contributions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Monetization directions&lt;span class="hx-absolute -hx-mt-20" id="monetization-directions"&gt;&lt;/span&gt;
&lt;a href="#monetization-directions" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Custom team agent harnesses&lt;/strong&gt;: build standardized coding-agent workflows for engineering teams on top of Pi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vertical skills and packages&lt;/strong&gt;: create installable packages for frontend, data analysis, DevOps, security review, and other workflows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private enterprise agent foundation&lt;/strong&gt;: connect model routing, audit logs, permissions, and internal tools into the Pi runtime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent workflow consulting&lt;/strong&gt;: help teams turn prompts, AGENTS.md, skills, templates, and CI verification into durable workflow assets.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Pi&amp;rsquo;s value is not just that it can write code. Its value is that it breaks a coding agent into layers that can be reshaped: CLI, runtime, model API, TUI, skills, extensions, and packages.&lt;/p&gt;
&lt;p&gt;If you want a mature all-in-one product, tools like Codex, Claude Code, or Cursor may be more direct.&lt;/p&gt;
&lt;p&gt;But if you care about this question: &lt;strong&gt;can my agent grow around my workflow?&lt;/strong&gt; Pi is worth studying.&lt;/p&gt;
&lt;p&gt;It points to an interesting direction: an agent is not only a tool. It can also be an evolving developer workbench foundation.&lt;/p&gt;</description></item><item><title>What GitHub Trending Says About AI Agents: Skills Are Becoming Engineering Assets</title><link>https://silenceper.com/en/article/2026-05-27-github-trending-agent-skills-engineering/</link><pubDate>Wed, 27 May 2026 23:40:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-27-github-trending-agent-skills-engineering/</guid><description>
&lt;p&gt;On May 27, 2026, I opened GitHub Trending and the interesting part was not one isolated breakout project.&lt;/p&gt;
&lt;p&gt;The stronger signal was that several projects around &lt;strong&gt;AI agent skills, plugins, workflows, knowledge graphs, and domain playbooks&lt;/strong&gt; were trending at the same time.&lt;/p&gt;
&lt;p&gt;Individually, they solve different problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;some help agents understand a codebase;&lt;/li&gt;
&lt;li&gt;some give coding agents a software development methodology;&lt;/li&gt;
&lt;li&gt;some package writing quality, design taste, and security analysis into skills;&lt;/li&gt;
&lt;li&gt;some turn knowledge-worker roles into plugins;&lt;/li&gt;
&lt;li&gt;some bundle memory, hooks, MCP configuration, rules, and security scanning into a broader agent harness.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Taken together, the direction is clear: &lt;strong&gt;AI agent competition is moving from “can the model answer?” to “can the work method be installed, reused, verified, and shared by a team?”&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Projects Worth Watching&lt;span class="hx-absolute -hx-mt-20" id="projects-worth-watching"&gt;&lt;/span&gt;
&lt;a href="#projects-worth-watching" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This is not a full Trending recap. It is the slice of today’s GitHub Trending list that feels most relevant to agent workflows.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;The signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Lum1104/Understand-Anything" target="_blank" rel="noopener"&gt;Lum1104/Understand-Anything&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Turns codebases, knowledge bases, and docs into interactive knowledge graphs you can explore, search, and ask questions about&lt;/td&gt;
&lt;td&gt;Agents need a system map before they can safely change systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/obra/superpowers" target="_blank" rel="noopener"&gt;obra/superpowers&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Provides a skill-based software development methodology for coding agents&lt;/td&gt;
&lt;td&gt;Development process is becoming an installable skill chain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/affaan-m/ECC" target="_blank" rel="noopener"&gt;affaan-m/ECC&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Bundles skills, memory optimization, hooks, security scanning, and research-first development across harnesses&lt;/td&gt;
&lt;td&gt;The agent harness is starting to look like an operating layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/anthropics/knowledge-work-plugins" target="_blank" rel="noopener"&gt;anthropics/knowledge-work-plugins&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Provides plugins for sales, support, product, marketing, legal, finance, data, and other knowledge-work roles&lt;/td&gt;
&lt;td&gt;Plugins are moving beyond programmers into role-specific workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/hardikpandya/stop-slop" target="_blank" rel="noopener"&gt;hardikpandya/stop-slop&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A skill for removing obvious AI writing patterns from prose&lt;/td&gt;
&lt;td&gt;Quality standards can be packaged as reusable editors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/Leonxlnx/taste-skill" target="_blank" rel="noopener"&gt;Leonxlnx/taste-skill&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A skill set for frontend taste, motion, density, and anti-generic output&lt;/td&gt;
&lt;td&gt;Design judgment is being turned into a workflow surface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mukul975/Anthropic-Cybersecurity-Skills" target="_blank" rel="noopener"&gt;mukul975/Anthropic-Cybersecurity-Skills&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A large library of structured cybersecurity skills mapped to security frameworks&lt;/td&gt;
&lt;td&gt;Expert domain practice is becoming agent-executable playbooks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I think of these as &lt;strong&gt;agent capability packs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;They are not single prompts. They are not chat templates. They are work methods that can be versioned, installed, updated, combined, and audited.&lt;/p&gt;
&lt;h2&gt;Why This Matters More Than a Better Prompt&lt;span class="hx-absolute -hx-mt-20" id="why-this-matters-more-than-a-better-prompt"&gt;&lt;/span&gt;
&lt;a href="#why-this-matters-more-than-a-better-prompt" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Early AI agent usage tends to focus on prompting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;write a longer system prompt;&lt;/li&gt;
&lt;li&gt;add an &lt;code&gt;AGENTS.md&lt;/code&gt; file;&lt;/li&gt;
&lt;li&gt;tell the agent to behave like a senior engineer;&lt;/li&gt;
&lt;li&gt;require a specific output format.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those things help, but prompts hit three limits quickly.&lt;/p&gt;
&lt;p&gt;First, they are &lt;strong&gt;hard to maintain&lt;/strong&gt;. A long instruction block keeps growing until nobody knows which rules are still active and which ones are old baggage.&lt;/p&gt;
&lt;p&gt;Second, they are &lt;strong&gt;hard to compose&lt;/strong&gt;. Coding, UI design, security investigation, copy editing, and data work should not all live inside one giant prompt.&lt;/p&gt;
&lt;p&gt;Third, they are &lt;strong&gt;hard to verify&lt;/strong&gt;. If one output gets better, was it the model, the context, or the rule?&lt;/p&gt;
&lt;p&gt;Skills and plugins matter because they split “how to do this kind of work” into smaller capability units.&lt;/p&gt;
&lt;p&gt;A good skill should answer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what task it applies to;&lt;/li&gt;
&lt;li&gt;what task it should not handle;&lt;/li&gt;
&lt;li&gt;what context it needs;&lt;/li&gt;
&lt;li&gt;what it produces;&lt;/li&gt;
&lt;li&gt;how it verifies that it stayed on track;&lt;/li&gt;
&lt;li&gt;whether it can move across Claude Code, Codex, Cursor, Gemini CLI, and other harnesses.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the difference between a prompt and an engineering asset.&lt;/p&gt;
&lt;h2&gt;Four Directions Behind This Wave&lt;span class="hx-absolute -hx-mt-20" id="four-directions-behind-this-wave"&gt;&lt;/span&gt;
&lt;a href="#four-directions-behind-this-wave" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Code Understanding Becomes Infrastructure&lt;span class="hx-absolute -hx-mt-20" id="1-code-understanding-becomes-infrastructure"&gt;&lt;/span&gt;
&lt;a href="#1-code-understanding-becomes-infrastructure" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Projects like &lt;code&gt;Understand-Anything&lt;/code&gt; show that large codebases cannot rely only on an agent running &lt;code&gt;rg&lt;/code&gt;, opening a few files, and guessing the architecture.&lt;/p&gt;
&lt;p&gt;The more useful layer is a structured map:&lt;/p&gt;
&lt;pre class="mermaid hx-mt-6"&gt;
flowchart LR
A[Codebase] --&amp;gt; B[Static structure parsing]
A --&amp;gt; C[LLM semantic summaries]
B --&amp;gt; D[Knowledge graph]
C --&amp;gt; D
D --&amp;gt; E[Search / Q&amp;amp;A / impact analysis / onboarding]
&lt;/pre&gt;&lt;p&gt;This is different from traditional documentation. Docs often drift. If a knowledge graph can update with commits, it becomes long-lived context for agents.&lt;/p&gt;
&lt;p&gt;For many teams, the first step will not be “let the agent change code.” It will be “let the agent build a queryable system map.”&lt;/p&gt;
&lt;h3&gt;2. Work Methods Become Installable&lt;span class="hx-absolute -hx-mt-20" id="2-work-methods-become-installable"&gt;&lt;/span&gt;
&lt;a href="#2-work-methods-become-installable" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Projects like &lt;code&gt;superpowers&lt;/code&gt; and &lt;code&gt;ECC&lt;/code&gt; are not just adding commands. They are giving agents working discipline.&lt;/p&gt;
&lt;p&gt;Clarify the goal. Write a design. Break down the plan. Verify the result. Review the diff. Use worktrees to isolate risk.&lt;/p&gt;
&lt;p&gt;Those used to be team habits. Now they are becoming skills and hooks.&lt;/p&gt;
&lt;p&gt;I do not think every task needs a full methodology. Small jobs should not be slowed down by process. But when agents touch real repositories, real permissions, and real deployment paths, method matters more than one-off intelligence.&lt;/p&gt;
&lt;h3&gt;3. Domain Expertise Becomes Playbooks&lt;span class="hx-absolute -hx-mt-20" id="3-domain-expertise-becomes-playbooks"&gt;&lt;/span&gt;
&lt;a href="#3-domain-expertise-becomes-playbooks" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;Anthropic-Cybersecurity-Skills&lt;/code&gt; turns security work into many structured skills and maps them to MITRE ATT&amp;amp;CK, NIST CSF, MITRE ATLAS, D3FEND, and NIST AI RMF.&lt;/p&gt;
&lt;p&gt;The interesting point is not only that security has skills.&lt;/p&gt;
&lt;p&gt;The bigger signal is that &lt;strong&gt;expert judgment paths are being transformed into agent-callable playbooks&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Security will not be the only field. Legal, finance, sales, support, product, growth, and analytics can all move toward this shape:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;task type -&amp;gt; matching skill -&amp;gt; required context -&amp;gt; steps -&amp;gt; risks -&amp;gt; checks -&amp;gt; deliverable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That moves AI agents from generic assistants toward role-specific operators with SOPs.&lt;/p&gt;
&lt;h3&gt;4. Quality Standards Become Skills&lt;span class="hx-absolute -hx-mt-20" id="4-quality-standards-become-skills"&gt;&lt;/span&gt;
&lt;a href="#4-quality-standards-become-skills" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;stop-slop&lt;/code&gt; and &lt;code&gt;taste-skill&lt;/code&gt; are small but important examples.&lt;/p&gt;
&lt;p&gt;They do not teach the agent a new API. They package fuzzy quality expectations into triggerable skills: avoid AI-sounding prose, do not ship generic UI, tune rhythm, density, motion, hierarchy, and design language.&lt;/p&gt;
&lt;p&gt;Most AI output does not fail because it is completely wrong. It often fails because it is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;correct but generic;&lt;/li&gt;
&lt;li&gt;functional but awkward;&lt;/li&gt;
&lt;li&gt;structured but lifeless;&lt;/li&gt;
&lt;li&gt;visually complete but product-blind;&lt;/li&gt;
&lt;li&gt;readable but obviously machine-written.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once quality standards are packaged, teams no longer need to re-explain their bar every time. That is also knowledge reuse.&lt;/p&gt;
&lt;h2&gt;What Developers Should Do&lt;span class="hx-absolute -hx-mt-20" id="what-developers-should-do"&gt;&lt;/span&gt;
&lt;a href="#what-developers-should-do" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you already use Codex, Claude Code, Cursor, or another coding agent, do not only track which model is stronger.&lt;/p&gt;
&lt;p&gt;Start collecting three kinds of assets.&lt;/p&gt;
&lt;p&gt;The first is &lt;strong&gt;project-level rules&lt;/strong&gt;. Put them in &lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;README&lt;/code&gt;, or docs. Tell the agent how this repository builds, tests, publishes, and which directories are risky.&lt;/p&gt;
&lt;p&gt;The second is &lt;strong&gt;task-level skills&lt;/strong&gt;. Examples: writing a bilingual Hugo article, debugging slow startup in a Go service, generating a GitHub issue cover image, or running a frontend visual audit. If a task repeats, it probably deserves a skill.&lt;/p&gt;
&lt;p&gt;The third is &lt;strong&gt;verification scripts&lt;/strong&gt;. Without verification, a skill is just attractive advice. Common tasks should have matching checks such as &lt;code&gt;hugo --renderToMemory --minify&lt;/code&gt;, &lt;code&gt;go test&lt;/code&gt;, &lt;code&gt;pnpm test&lt;/code&gt;, SEO checks, screenshots, or diff checks.&lt;/p&gt;
&lt;p&gt;My filter is simple:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;If yes, consider a skill&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Does this task repeat?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do you explain the same context every time?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Do failures usually come from the same traps?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is there a clear acceptance check?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can the skill limit what it reads or edits?&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If three or more are true, stop relying only on ad hoc prompting.&lt;/p&gt;
&lt;h2&gt;What Comes Next&lt;span class="hx-absolute -hx-mt-20" id="what-comes-next"&gt;&lt;/span&gt;
&lt;a href="#what-comes-next" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I expect three things to become more visible.&lt;/p&gt;
&lt;p&gt;First, &lt;strong&gt;skill registries will matter&lt;/strong&gt;. People need to discover, install, update, rate, and combine skills instead of copying Markdown files across machines.&lt;/p&gt;
&lt;p&gt;Second, &lt;strong&gt;private team skills will become productivity assets&lt;/strong&gt;. Public skills solve general problems. The most valuable skills will encode a team’s own workflows, code standards, deployment rules, and incident history.&lt;/p&gt;
&lt;p&gt;Third, &lt;strong&gt;skills, memory, and observability will merge&lt;/strong&gt;. Agents need to know which method to use, remember previous lessons, and leave an auditable chain of execution.&lt;/p&gt;
&lt;p&gt;So today’s GitHub Trending projects are more than a curiosity.&lt;/p&gt;
&lt;p&gt;They point to a larger shift: &lt;strong&gt;AI agents are moving from smart chat windows to engineering systems built from installable methods, reusable capability packs, and verifiable execution paths.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is one of the developer-tool trends I would keep watching in 2026.&lt;/p&gt;
&lt;h2&gt;References&lt;span class="hx-absolute -hx-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;GitHub Trending Today: &lt;a href="https://github.com/trending?since=daily" target="_blank" rel="noopener"&gt;https://github.com/trending?since=daily&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Understand-Anything: &lt;a href="https://github.com/Lum1104/Understand-Anything" target="_blank" rel="noopener"&gt;https://github.com/Lum1104/Understand-Anything&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Superpowers: &lt;a href="https://github.com/obra/superpowers" target="_blank" rel="noopener"&gt;https://github.com/obra/superpowers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ECC: &lt;a href="https://github.com/affaan-m/ECC" target="_blank" rel="noopener"&gt;https://github.com/affaan-m/ECC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Knowledge Work Plugins: &lt;a href="https://github.com/anthropics/knowledge-work-plugins" target="_blank" rel="noopener"&gt;https://github.com/anthropics/knowledge-work-plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Stop Slop: &lt;a href="https://github.com/hardikpandya/stop-slop" target="_blank" rel="noopener"&gt;https://github.com/hardikpandya/stop-slop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Taste Skill: &lt;a href="https://github.com/Leonxlnx/taste-skill" target="_blank" rel="noopener"&gt;https://github.com/Leonxlnx/taste-skill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Anthropic Cybersecurity Skills: &lt;a href="https://github.com/mukul975/Anthropic-Cybersecurity-Skills" target="_blank" rel="noopener"&gt;https://github.com/mukul975/Anthropic-Cybersecurity-Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>AI Agents Need Observability: Why Security Logs Must Capture Intent to Action</title><link>https://silenceper.com/en/article/2026-05-23-ai-agent-observability-intent-to-action-logs/</link><pubDate>Sat, 23 May 2026 21:05:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-23-ai-agent-observability-intent-to-action-logs/</guid><description>
&lt;p&gt;When teams adopt AI agents, the first security instinct is usually to add permissions, approvals, and sandboxes.&lt;/p&gt;
&lt;p&gt;Those are necessary, but they are not enough. Agents also need &lt;strong&gt;observability&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Traditional security logs usually answer three questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;who called the interface?&lt;/li&gt;
&lt;li&gt;when did it happen?&lt;/li&gt;
&lt;li&gt;did it succeed or fail?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI agents are different. They do not simply click a button or execute a fixed API call. They interpret a goal, make a plan, read context, choose tools, generate arguments, wait for approval, and then perform an action.&lt;/p&gt;
&lt;p&gt;So the next generation of security logs should not only record “what happened.” They also need to record &lt;strong&gt;why the agent believed the action was appropriate&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;The short version&lt;span class="hx-absolute -hx-mt-20" id="the-short-version"&gt;&lt;/span&gt;
&lt;a href="#the-short-version" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Agent security logs should connect “user intent → agent plan → tool call → policy decision → actual action → execution result” into one traceable chain.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the only log you see is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DELETE /api/users/123 200 OK&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;you still do not know whether:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the user explicitly asked for deletion;&lt;/li&gt;
&lt;li&gt;the agent confused “deactivate account” with “delete account”;&lt;/li&gt;
&lt;li&gt;malicious page content persuaded the agent to act;&lt;/li&gt;
&lt;li&gt;an automation flow called the tool without enough context;&lt;/li&gt;
&lt;li&gt;the approval logic allowed the wrong action.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these can look identical in a traditional API audit log.&lt;/p&gt;
&lt;h2&gt;Why Traditional Logs Are Not Enough&lt;span class="hx-absolute -hx-mt-20" id="why-traditional-logs-are-not-enough"&gt;&lt;/span&gt;
&lt;a href="#why-traditional-logs-are-not-enough" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In a normal application, the user clicks a button and the backend executes an endpoint. Logging the interface, identity, IP address, and status code is often enough to reconstruct the responsibility chain.&lt;/p&gt;
&lt;p&gt;With an agent, there are more layers in the middle:&lt;/p&gt;
&lt;pre class="mermaid hx-mt-6"&gt;
flowchart LR
A[User goal] --&amp;gt; B[Agent interpretation]
B --&amp;gt; C[Task plan]
C --&amp;gt; D[Tool selection]
D --&amp;gt; E[Argument generation]
E --&amp;gt; F[Permission / policy check]
F --&amp;gt; G[Human approval]
G --&amp;gt; H[Execution]
H --&amp;gt; I[Result feedback]
&lt;/pre&gt;&lt;p&gt;The dangerous part is often not the final API call.&lt;/p&gt;
&lt;p&gt;An agent may call a valid API with valid credentials and sufficient permission, while the real problem happened earlier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the user meant “archive,” but the agent interpreted it as “delete”;&lt;/li&gt;
&lt;li&gt;retrieved web content contained hidden or misleading instructions;&lt;/li&gt;
&lt;li&gt;the agent selected the wrong tool;&lt;/li&gt;
&lt;li&gt;tool arguments came from untrusted context;&lt;/li&gt;
&lt;li&gt;the policy engine checked permission but not intent;&lt;/li&gt;
&lt;li&gt;the approval UI showed the action but not the reason.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only inspect the API audit log, everything can look normal.&lt;/p&gt;
&lt;h2&gt;What Agent Logs Should Capture&lt;span class="hx-absolute -hx-mt-20" id="what-agent-logs-should-capture"&gt;&lt;/span&gt;
&lt;a href="#what-agent-logs-should-capture" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I would split agent security logs into six layers.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What to record&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intent&lt;/td&gt;
&lt;td&gt;Original user goal, summarized task intent, task source&lt;/td&gt;
&lt;td&gt;Shows whether the action drifted from the user’s goal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning&lt;/td&gt;
&lt;td&gt;Agent plan, key decision points, reason for choosing a tool&lt;/td&gt;
&lt;td&gt;Reconstructs why the workflow moved in this direction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context&lt;/td&gt;
&lt;td&gt;Files, web pages, retrieval snippets, memory sources&lt;/td&gt;
&lt;td&gt;Helps detect influence from untrusted context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool&lt;/td&gt;
&lt;td&gt;Tool name, action type, argument summary, resource scope&lt;/td&gt;
&lt;td&gt;Shows what the agent intended to do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Control&lt;/td&gt;
&lt;td&gt;Policy decision, permission result, human approval, block reason&lt;/td&gt;
&lt;td&gt;Proves whether safety controls worked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Result&lt;/td&gt;
&lt;td&gt;Execution result, external system response, rollback information&lt;/td&gt;
&lt;td&gt;Completes the audit trail&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This does not mean saving every prompt, web page, or raw argument.&lt;/p&gt;
&lt;p&gt;Security logs should preserve &lt;strong&gt;audit evidence&lt;/strong&gt;, not create a new copy of all sensitive context.&lt;/p&gt;
&lt;h2&gt;A Practical Log Shape&lt;span class="hx-absolute -hx-mt-20" id="a-practical-log-shape"&gt;&lt;/span&gt;
&lt;a href="#a-practical-log-shape" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For a first version, I would start with an event like this:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;event.name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;agent.tool.execution&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;trace_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;01HT...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agent.session_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sess_123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agent.intent_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;intent_456&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agent.task_id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;task_789&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;user.id&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;u_001&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;user.goal_summary&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Deactivate a test account without deleting account data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agent.plan_step&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Call the account status update tool&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;agent.decision&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Selected update_user_status because the goal is deactivation&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tool.name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user_admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tool.action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;update_status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tool.args_hash&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sha256:...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;target.resource&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user:123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;risk.level&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;medium&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;policy.decision&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;allow&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;approval.required&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;approval.actor&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;human&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;context.refs&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;issue:29&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;file:docs/account-lifecycle.md&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;result.status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;success&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The important parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;trace_id&lt;/code&gt; connects multiple events inside one agent task;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;intent_id&lt;/code&gt; separates the user goal from individual tool calls;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tool.args_hash&lt;/code&gt; avoids storing sensitive raw arguments;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;policy.decision&lt;/code&gt; records whether the policy layer participated;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;approval.*&lt;/code&gt; records whether a human approved the action;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;context.refs&lt;/code&gt; keeps references instead of copying full context into logs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When something goes wrong, you can ask:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What was the original intent?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;At which step did the agent choose this tool?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Where did the arguments come from?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Why did policy allow it?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Was there human approval?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Did the execution result match the plan?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That is a very different level of evidence from “who called which API.”&lt;/p&gt;
&lt;h2&gt;Pre-Action Logs Matter Most&lt;span class="hx-absolute -hx-mt-20" id="pre-action-logs-matter-most"&gt;&lt;/span&gt;
&lt;a href="#pre-action-logs-matter-most" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Many systems only log after an action finishes.&lt;/p&gt;
&lt;p&gt;For agents, that is not enough.&lt;/p&gt;
&lt;p&gt;At minimum, agents need two event types.&lt;/p&gt;
&lt;h3&gt;1. Pre-action events&lt;span class="hx-absolute -hx-mt-20" id="1-pre-action-events"&gt;&lt;/span&gt;
&lt;a href="#1-pre-action-events" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Record what the agent is about to do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;current intent;&lt;/li&gt;
&lt;li&gt;plan step;&lt;/li&gt;
&lt;li&gt;reason for choosing the tool;&lt;/li&gt;
&lt;li&gt;argument summary;&lt;/li&gt;
&lt;li&gt;risk level;&lt;/li&gt;
&lt;li&gt;permission decision;&lt;/li&gt;
&lt;li&gt;whether human approval is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the risk is visible here, the action can still be blocked before execution.&lt;/p&gt;
&lt;h3&gt;2. Post-action events&lt;span class="hx-absolute -hx-mt-20" id="2-post-action-events"&gt;&lt;/span&gt;
&lt;a href="#2-post-action-events" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Record what actually happened:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which external system was called;&lt;/li&gt;
&lt;li&gt;what result came back;&lt;/li&gt;
&lt;li&gt;whether the call failed or retried;&lt;/li&gt;
&lt;li&gt;whether a compensating action was triggered;&lt;/li&gt;
&lt;li&gt;whether data state changed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pre-action logs explain “why this action was attempted.” Post-action logs explain “what happened in the end.”&lt;/p&gt;
&lt;p&gt;Without the first part, many agent incidents only show the result, not the intent drift.&lt;/p&gt;
&lt;h2&gt;Do Not Turn Logs Into a New Leak Surface&lt;span class="hx-absolute -hx-mt-20" id="do-not-turn-logs-into-a-new-leak-surface"&gt;&lt;/span&gt;
&lt;a href="#do-not-turn-logs-into-a-new-leak-surface" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The more detailed agent logs become, the easier it is to create another security problem: storing sensitive data in logs.&lt;/p&gt;
&lt;p&gt;I would explicitly avoid logging:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API keys, tokens, cookies, SSH private keys;&lt;/li&gt;
&lt;li&gt;full prompts and full tool arguments;&lt;/li&gt;
&lt;li&gt;private fields from user input;&lt;/li&gt;
&lt;li&gt;sensitive business data from web pages;&lt;/li&gt;
&lt;li&gt;raw orders, accounts, students, customers, or financial records;&lt;/li&gt;
&lt;li&gt;long memory excerpts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Better patterns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keep raw text only in short-lived secure storage with expiration;&lt;/li&gt;
&lt;li&gt;keep long-term logs to summaries, hashes, resource IDs, and references;&lt;/li&gt;
&lt;li&gt;label high-risk fields separately and restrict queries;&lt;/li&gt;
&lt;li&gt;audit access to the logging system itself;&lt;/li&gt;
&lt;li&gt;exclude raw sensitive logs from training, analytics, and dashboards by default.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Observability is not “save everything.” It is “preserve enough evidence to reconstruct the important path safely.”&lt;/p&gt;
&lt;h2&gt;How to Implement It&lt;span class="hx-absolute -hx-mt-20" id="how-to-implement-it"&gt;&lt;/span&gt;
&lt;a href="#how-to-implement-it" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The first version does not need to be complex. I would implement it in this order.&lt;/p&gt;
&lt;h3&gt;1. Connect the trace first&lt;span class="hx-absolute -hx-mt-20" id="1-connect-the-trace-first"&gt;&lt;/span&gt;
&lt;a href="#1-connect-the-trace-first" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;A user request, an agent run, and a tool call must be linkable.&lt;/p&gt;
&lt;p&gt;At minimum:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;trace_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent.session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent.intent_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tool.call_id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenTelemetry already has a log data model with &lt;code&gt;TraceId&lt;/code&gt;, &lt;code&gt;SpanId&lt;/code&gt;, attributes, and event names. It is a good fit for structured agent events. Do not reduce agent behavior to an unstructured log string.&lt;/p&gt;
&lt;h3&gt;2. Log at the tool gateway&lt;span class="hx-absolute -hx-mt-20" id="2-log-at-the-tool-gateway"&gt;&lt;/span&gt;
&lt;a href="#2-log-at-the-tool-gateway" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Do not let every tool invent its own logging format.&lt;/p&gt;
&lt;p&gt;A better boundary is a tool gateway:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Agent → Tool Gateway → Policy Check → Human Approval → Tool Execution&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;At that boundary, you can consistently record:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;intent, plan, and argument summary before the call;&lt;/li&gt;
&lt;li&gt;policy decision;&lt;/li&gt;
&lt;li&gt;approval status;&lt;/li&gt;
&lt;li&gt;execution result;&lt;/li&gt;
&lt;li&gt;failure and retry behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Putting safety control and logging at the same boundary makes incidents easier to investigate.&lt;/p&gt;
&lt;h3&gt;3. Promote high-risk actions&lt;span class="hx-absolute -hx-mt-20" id="3-promote-high-risk-actions"&gt;&lt;/span&gt;
&lt;a href="#3-promote-high-risk-actions" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Not every action needs the same log detail.&lt;/p&gt;
&lt;p&gt;These actions deserve higher log severity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deleting data;&lt;/li&gt;
&lt;li&gt;exporting large amounts of data;&lt;/li&gt;
&lt;li&gt;changing permissions;&lt;/li&gt;
&lt;li&gt;changing billing or payment state;&lt;/li&gt;
&lt;li&gt;touching production systems;&lt;/li&gt;
&lt;li&gt;accessing sensitive systems;&lt;/li&gt;
&lt;li&gt;committing code or triggering deployments automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For high-risk actions, log intent, policy, approver, pre-action argument summary, and post-action result.&lt;/p&gt;
&lt;h3&gt;4. Start With Useful Alerts&lt;span class="hx-absolute -hx-mt-20" id="4-start-with-useful-alerts"&gt;&lt;/span&gt;
&lt;a href="#4-start-with-useful-alerts" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Do not start with a wall of dashboards.&lt;/p&gt;
&lt;p&gt;Start with alerts that expose real agent risk:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;high-risk tool call without human approval;&lt;/li&gt;
&lt;li&gt;read-only plan followed by a write action;&lt;/li&gt;
&lt;li&gt;unusual number of tool retries under one intent;&lt;/li&gt;
&lt;li&gt;tool arguments derived from untrusted context;&lt;/li&gt;
&lt;li&gt;action allowed while the policy engine is unavailable;&lt;/li&gt;
&lt;li&gt;one agent accessing too many resources in a short window;&lt;/li&gt;
&lt;li&gt;execution result that does not match the plan step.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are difficult to detect with traditional API logs alone.&lt;/p&gt;
&lt;h2&gt;A Simple Test&lt;span class="hx-absolute -hx-mt-20" id="a-simple-test"&gt;&lt;/span&gt;
&lt;a href="#a-simple-test" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;When designing agent security logs, ask:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If an agent accidentally deletes data tomorrow, can I answer within 30 minutes: what did the user want, how did the agent interpret it, why was this tool selected, who approved it, and what was the impact?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If not, the logs are not good enough yet.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Agent risk does not only come from “does it have permission?”&lt;/p&gt;
&lt;p&gt;It also comes from “it had valid permission and still did the wrong thing.”&lt;/p&gt;
&lt;p&gt;That means security logs need to evolve.&lt;/p&gt;
&lt;p&gt;The next generation of agent security logs should capture:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;user intent;&lt;/li&gt;
&lt;li&gt;agent plan;&lt;/li&gt;
&lt;li&gt;context sources;&lt;/li&gt;
&lt;li&gt;tool selection;&lt;/li&gt;
&lt;li&gt;policy decision;&lt;/li&gt;
&lt;li&gt;human approval;&lt;/li&gt;
&lt;li&gt;actual action;&lt;/li&gt;
&lt;li&gt;execution result.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is not about assigning blame after the fact. It is about making agent systems explainable, auditable, blockable, and recoverable.&lt;/p&gt;
&lt;p&gt;A production-ready AI agent should not only complete work. It should also leave enough evidence to explain why every important step happened.&lt;/p&gt;
&lt;h2&gt;References&lt;span class="hx-absolute -hx-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OWASP: &lt;a href="https://genai.owasp.org/resource/agentic-ai-threats-and-mitigations/" target="_blank" rel="noopener"&gt;https://genai.owasp.org/resource/agentic-ai-threats-and-mitigations/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenTelemetry Events: &lt;a href="https://opentelemetry.io/docs/specs/semconv/general/events/" target="_blank" rel="noopener"&gt;https://opentelemetry.io/docs/specs/semconv/general/events/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenTelemetry Logs Data Model: &lt;a href="https://opentelemetry.io/docs/specs/otel/logs/data-model/" target="_blank" rel="noopener"&gt;https://opentelemetry.io/docs/specs/otel/logs/data-model/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NIST AI RMF: &lt;a href="https://www.nist.gov/itl/ai-risk-management-framework" target="_blank" rel="noopener"&gt;https://www.nist.gov/itl/ai-risk-management-framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Codex Is No Longer Just a Coding Tool. It Is Becoming a Long-Running Task Workbench</title><link>https://silenceper.com/en/article/2026-05-23-codex-long-task-workbench/</link><pubDate>Sat, 23 May 2026 15:40:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-23-codex-long-task-workbench/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260509/codex-app-screenshot.webp" alt="Codex App workspace" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;My current view of Codex is simple: it is no longer just a tool that helps me write code.&lt;/p&gt;
&lt;p&gt;More precisely, &lt;strong&gt;Codex is shifting from a code generator into a long-running task workbench.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The important change is not one extra button. It is the way threads, tools, permissions, verification, automations, memory, and project rules can work together, so a task can keep moving while you step in to steer, approve, or review the result.&lt;/p&gt;
&lt;h2&gt;The short version&lt;span class="hx-absolute -hx-mt-20" id="the-short-version"&gt;&lt;/span&gt;
&lt;a href="#the-short-version" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;The old Codex felt like “help me edit this code.” The newer workflow feels more like “help me move this goal toward a verified result.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That matters because useful agent work is not only about a strong first draft. It is about whether the work can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;stay continuous: keep context and decisions inside the same thread;&lt;/li&gt;
&lt;li&gt;stay steerable: let you correct direction or approve the next step;&lt;/li&gt;
&lt;li&gt;stay verifiable: run tests, inspect diffs, capture screenshots, and check pages;&lt;/li&gt;
&lt;li&gt;stay reusable: move repeated rules into &lt;code&gt;AGENTS.md&lt;/code&gt;, skills, or automations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How I would use it&lt;span class="hx-absolute -hx-mt-20" id="how-i-would-use-it"&gt;&lt;/span&gt;
&lt;a href="#how-i-would-use-it" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Give every important task its own long-running thread&lt;span class="hx-absolute -hx-mt-20" id="1-give-every-important-task-its-own-long-running-thread"&gt;&lt;/span&gt;
&lt;a href="#1-give-every-important-task-its-own-long-running-thread" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Do not treat Codex as a disposable Q&amp;amp;A window.&lt;/p&gt;
&lt;p&gt;A bug, an article, a refactor, or a release flow should each have its own thread. That thread can preserve what Codex has already read, what it has tried, which commands it ran, and what feedback you gave.&lt;/p&gt;
&lt;p&gt;My prompt usually looks like this:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Goal: move this issue from diagnosis to a verified fix.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Context: this is a production report, and the relevant module may be xxx.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Constraints: do not touch unrelated files, do not refactor public interfaces, do not modify public build output.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Definition of done: root cause explained, code changed, tests or local verification passing.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Working style: read code and logs first, explain the finding, then make the change.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The key is to define what “done” means. Codex can handle long tasks better when the target is concrete.&lt;/p&gt;
&lt;h3&gt;2. Make it verify with tools, not just produce an answer&lt;span class="hx-absolute -hx-mt-20" id="2-make-it-verify-with-tools-not-just-produce-an-answer"&gt;&lt;/span&gt;
&lt;a href="#2-make-it-verify-with-tools-not-just-produce-an-answer" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The risky part of long-running agent work is that the agent may believe it is done before you have evidence.&lt;/p&gt;
&lt;p&gt;So I prefer asking Codex to leave checkable proof at each step:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;code work: &lt;code&gt;git diff&lt;/code&gt;, test command, failure log, fixed output;&lt;/li&gt;
&lt;li&gt;frontend work: local screenshot, browser console, key interaction check;&lt;/li&gt;
&lt;li&gt;content work: source links, citation boundary, final Markdown file;&lt;/li&gt;
&lt;li&gt;release work: dry run, build output, deployment log, rollback path.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260509/codex-in-app-browser.webp" alt="Codex in-app browser for local page verification" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;This is why Codex starts to feel like a workbench: it can connect terminal output, files, browser checks, and diffs inside one task flow.&lt;/p&gt;
&lt;h3&gt;3. Move repeated requirements into project rules&lt;span class="hx-absolute -hx-mt-20" id="3-move-repeated-requirements-into-project-rules"&gt;&lt;/span&gt;
&lt;a href="#3-move-repeated-requirements-into-project-rules" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;If you repeatedly say:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do not modify public
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use Chinese by default
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Run hugo --renderToMemory --minify first
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Put article images under static/img/YYYYMMDD&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;then those rules should not live only in your prompt history.&lt;/p&gt;
&lt;p&gt;A better place is &lt;code&gt;AGENTS.md&lt;/code&gt;, or a reusable skill. When Codex enters the repository, it can immediately understand the local boundaries, language preference, verification command, and files it should avoid.&lt;/p&gt;
&lt;p&gt;This looks small, but it matters for long-running tasks. Long tasks are not kept on track by a single perfect prompt. They stay on track through stable rules.&lt;/p&gt;
&lt;h3&gt;4. Turn repeated work into automations&lt;span class="hx-absolute -hx-mt-20" id="4-turn-repeated-work-into-automations"&gt;&lt;/span&gt;
&lt;a href="#4-turn-repeated-work-into-automations" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenAI is also pushing Codex Automations: let Codex come back on a schedule, do repeatable work, and hand the result to you for review.&lt;/p&gt;
&lt;p&gt;I would start with low-risk, repetitive, easy-to-check work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;summarize new article drafts every week;&lt;/li&gt;
&lt;li&gt;scan TODOs or failing tests every day;&lt;/li&gt;
&lt;li&gt;summarize GitHub issues and PR status;&lt;/li&gt;
&lt;li&gt;check site build and SEO output on a fixed schedule;&lt;/li&gt;
&lt;li&gt;generate a weekly progress note for a long-running project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A practical automation prompt could be:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Every Friday afternoon, return to this thread and review this week&amp;#39;s new articles and drafts.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Output three sections:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. published articles;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. titles or images worth improving;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. the 3 most promising topics for next week.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Only summarize and suggest. Do not edit files automatically.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Let it organize and report first. Only later should you consider giving it execution authority.&lt;/p&gt;
&lt;h3&gt;5. Use mobile handoff to keep work from stalling&lt;span class="hx-absolute -hx-mt-20" id="5-use-mobile-handoff-to-keep-work-from-stalling"&gt;&lt;/span&gt;
&lt;a href="#5-use-mobile-handoff-to-keep-work-from-stalling" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenAI has also connected Codex to the ChatGPT mobile app. For long-running tasks, the useful part is that you do not need to stay at the computer the whole time.&lt;/p&gt;
&lt;p&gt;Codex may stop and ask:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;should I choose plan A or plan B?&lt;/li&gt;
&lt;li&gt;may I run this command?&lt;/li&gt;
&lt;li&gt;should this diff be expanded?&lt;/li&gt;
&lt;li&gt;do you want me to update the test too?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you can answer those small decisions from your phone, a long task does not get stuck on a minor approval.&lt;/p&gt;
&lt;p&gt;But I would not treat mobile access as “let AI change production remotely.” A better use is: let Codex continue investigation, organization, verification, and drafting, while keeping high-impact actions under human review.&lt;/p&gt;
&lt;h2&gt;A reusable long-task prompt&lt;span class="hx-absolute -hx-mt-20" id="a-reusable-long-task-prompt"&gt;&lt;/span&gt;
&lt;a href="#a-reusable-long-task-prompt" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For a complete Codex task, I would start from this template:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Goal:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Complete [specific task] until it reaches [verifiable end state].
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Context:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Business context:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Relevant paths:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Known problem:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Constraints:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not modify:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not do:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Must follow:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Working style:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Read the relevant files and logs first.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Explain the root cause or execution plan.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Wait for confirmation before changing high-risk areas.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Run verification commands after editing.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Final response must include changed files, commands, and results.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Definition of done:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] Code or document updated.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] Verification command passed.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] Key risks explained.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- [ ] No unrelated files touched.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For especially long tasks, add this:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If the context grows too long, summarize current state, decisions already made,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;and remaining work before continuing.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Where I would not fully let go&lt;span class="hx-absolute -hx-mt-20" id="where-i-would-not-fully-let-go"&gt;&lt;/span&gt;
&lt;a href="#where-i-would-not-fully-let-go" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Codex is getting stronger, but that does not mean everything should be fully automatic.&lt;/p&gt;
&lt;p&gt;I would keep human confirmation for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deleting production data;&lt;/li&gt;
&lt;li&gt;changing account, security, payment, or secret configuration;&lt;/li&gt;
&lt;li&gt;large refactors of public interfaces;&lt;/li&gt;
&lt;li&gt;deployments with no rollback path;&lt;/li&gt;
&lt;li&gt;browser actions involving private data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The value of a long-running task workbench is moving from “manually operate every step” to “make decisions at the important points.” It should not remove judgment from the process.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The most interesting change in Codex is not that it can write a few more lines of code. It is that it can increasingly work around a goal over time.&lt;/p&gt;
&lt;p&gt;For me, the practical workflow is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;one important task, one thread;&lt;/li&gt;
&lt;li&gt;define done before starting;&lt;/li&gt;
&lt;li&gt;make Codex verify with tools;&lt;/li&gt;
&lt;li&gt;move repeated rules into &lt;code&gt;AGENTS.md&lt;/code&gt; or skills;&lt;/li&gt;
&lt;li&gt;automate only low-risk repeated work first.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you still use Codex as “autocomplete plus chat,” try changing the prompt shape. Do not only ask how to write something. Give it a goal, constraints, and a definition of done, then use it as a workbench you can inspect and take over at any point.&lt;/p&gt;
&lt;h2&gt;References&lt;span class="hx-absolute -hx-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OpenAI: &lt;a href="https://openai.com/index/introducing-the-codex-app/" target="_blank" rel="noopener"&gt;https://openai.com/index/introducing-the-codex-app/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI: &lt;a href="https://openai.com/index/work-with-codex-from-anywhere/" target="_blank" rel="noopener"&gt;https://openai.com/index/work-with-codex-from-anywhere/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI Academy: &lt;a href="https://openai.com/academy/codex-automations/" target="_blank" rel="noopener"&gt;https://openai.com/academy/codex-automations/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI Developers: &lt;a href="https://developers.openai.com/codex/use-cases/follow-goals" target="_blank" rel="noopener"&gt;https://developers.openai.com/codex/use-cases/follow-goals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>HTML Anything: Let Local AI Agents Generate Publish-Ready HTML</title><link>https://silenceper.com/en/article/2026-05-23-html-anything-agentic-html-editor/</link><pubDate>Sat, 23 May 2026 13:01:30 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-23-html-anything-agentic-html-editor/</guid><description>
&lt;h1&gt;HTML Anything: Let Local AI Agents Generate Publish-Ready HTML&lt;/h1&gt;&lt;p&gt;&lt;img src="https://silenceper.com/img/20260523/banner.png" alt="HTML Anything official hero image" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;HTML Anything is a local-first agentic HTML editor: it takes Markdown, tables, drafts, and data, then asks the AI coding agent already logged in on your machine to generate publish-ready single-file HTML or PNG.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Project: &lt;a href="https://github.com/nexu-io/html-anything" target="_blank" rel="noopener"&gt;https://github.com/nexu-io/html-anything&lt;/a&gt;&lt;br&gt;
Live demo: &lt;a href="https://open-design.ai/html-anything/" target="_blank" rel="noopener"&gt;https://open-design.ai/html-anything/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repository&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nexu-io/html-anything&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;An HTML editor for the agent era&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main stack&lt;/td&gt;
&lt;td&gt;Next.js, React, Tailwind, SSE, local CLI agent execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current traction&lt;/td&gt;
&lt;td&gt;About 4.6k stars / 476 forks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supported agent CLIs&lt;/td&gt;
&lt;td&gt;Claude Code, Cursor Agent, Codex, Gemini CLI, GitHub Copilot CLI, OpenCode, Qwen Coder, Aider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical outputs&lt;/td&gt;
&lt;td&gt;HTML, PNG, WeChat / Zhihu-ready rich content, social images, data reports, decks, posters, video frames&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Markdown is great for drafting, but it is not always the final format readers should see.&lt;/p&gt;
&lt;p&gt;When content is meant for WeChat, Zhihu, X, Xiaohongshu, data reports, long images, decks, or posters, Markdown is usually only the first step. You still need layout, typography, spacing, screenshots, and platform-specific paste compatibility.&lt;/p&gt;
&lt;p&gt;HTML Anything makes a simple bet: &lt;strong&gt;if the final reader-facing format is HTML or an image, the AI agent should generate that final artifact directly instead of asking the user to keep tweaking styles by hand.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It changes the workflow from:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Write Markdown → manually format → adjust CSS → screenshot / paste into platforms → fix formatting again&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;to:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Enter content → choose a template → local agent generates HTML → preview → copy or export&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Core features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Automatically detects local AI agents&lt;span class="hx-absolute -hx-mt-20" id="1-automatically-detects-local-ai-agents"&gt;&lt;/span&gt;
&lt;a href="#1-automatically-detects-local-ai-agents" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HTML Anything does not ask you to configure another API key. It scans your local &lt;code&gt;PATH&lt;/code&gt; and detects coding-agent CLIs that are already installed and logged in.&lt;/p&gt;
&lt;p&gt;Supported tools include Claude Code, Cursor Agent, OpenAI Codex, Gemini CLI, GitHub Copilot CLI, OpenCode, Qwen Coder, and Aider.&lt;/p&gt;
&lt;p&gt;As long as you have already logged in through the terminal, HTML Anything can reuse the existing session and treat the local agent as the engine for generating HTML.&lt;/p&gt;
&lt;h3&gt;2. Uses Skill templates to control output quality&lt;span class="hx-absolute -hx-mt-20" id="2-uses-skill-templates-to-control-output-quality"&gt;&lt;/span&gt;
&lt;a href="#2-uses-skill-templates-to-control-output-quality" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project ships with 75 Skill templates covering documents, decks, posters, social cards, web prototypes, data reports, and Hyperframes video frames.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260523/deck-guizang-editorial.png" alt="HTML Anything Skill example: deck-guizang-editorial" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;These Skills are not just visual themes. They are templates with explicit design constraints: font stacks, an 8px baseline grid, color contrast, radius, shadows, and the requirement to use real user-provided data. The goal is to reduce rough, generic AI-looking output.&lt;/p&gt;
&lt;h3&gt;3. Supports multiple content surfaces&lt;span class="hx-absolute -hx-mt-20" id="3-supports-multiple-content-surfaces"&gt;&lt;/span&gt;
&lt;a href="#3-supports-multiple-content-surfaces" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Beyond regular articles, HTML Anything is closer to a “content artifact generator.” The same input can become different deliverables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Magazine-style articles&lt;/li&gt;
&lt;li&gt;Keynote-style decks&lt;/li&gt;
&lt;li&gt;Resumes&lt;/li&gt;
&lt;li&gt;Posters&lt;/li&gt;
&lt;li&gt;Xiaohongshu cards&lt;/li&gt;
&lt;li&gt;X / Tweet cards&lt;/li&gt;
&lt;li&gt;Web prototypes&lt;/li&gt;
&lt;li&gt;Data reports&lt;/li&gt;
&lt;li&gt;Hyperframes / Remotion video frames&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260523/doc-kami-parchment.png" alt="HTML Anything document-style example: doc-kami-parchment" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;The value is that a piece of content is no longer limited to plain Markdown. It can be shaped into different visual artifacts depending on where it will be published.&lt;/p&gt;
&lt;h3&gt;4. Streams generation into a sandboxed preview&lt;span class="hx-absolute -hx-mt-20" id="4-streams-generation-into-a-sandboxed-preview"&gt;&lt;/span&gt;
&lt;a href="#4-streams-generation-into-a-sandboxed-preview" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The generation flow uses SSE. HTML produced by the agent is appended into a frontend iframe in real time, so the user can watch the page appear as it is generated.&lt;/p&gt;
&lt;p&gt;The overall structure looks like this:&lt;/p&gt;
&lt;pre class="mermaid hx-mt-6"&gt;
flowchart TD
A[User input: Markdown / CSV / Excel / JSON / draft] --&amp;gt; B[Choose local agent]
B --&amp;gt; C[Choose Skill template]
C --&amp;gt; D[POST /api/convert]
D --&amp;gt; E[Local CLI agent generates HTML]
E --&amp;gt; F[SSE streaming response]
F --&amp;gt; G[Sandbox iframe live preview]
G --&amp;gt; H[Copy to platform or export HTML / PNG]
&lt;/pre&gt;&lt;p&gt;The preview runs inside a sandboxed iframe, which isolates generated content while still letting the user confirm the final result directly in the browser.&lt;/p&gt;
&lt;h3&gt;5. Exports directly to publishing platforms&lt;span class="hx-absolute -hx-mt-20" id="5-exports-directly-to-publishing-platforms"&gt;&lt;/span&gt;
&lt;a href="#5-exports-directly-to-publishing-platforms" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;After generation, the result can be copied or exported for different destinations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WeChat Official Account: inline CSS for fewer style losses when pasting&lt;/li&gt;
&lt;li&gt;Zhihu: rich text and formula-friendly handling&lt;/li&gt;
&lt;li&gt;X / Weibo / Xiaohongshu: high-DPI PNG export from the preview area&lt;/li&gt;
&lt;li&gt;Local files: download single-file &lt;code&gt;.html&lt;/code&gt; or &lt;code&gt;.png&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260523/video-hyperframes.png" alt="HTML Anything video-frame example: video-hyperframes" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;This makes it more than a page generator. It is closer to a publishing-oriented workbench.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HTML Anything is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People who often publish Markdown articles to WeChat, Zhihu, or social platforms&lt;/li&gt;
&lt;li&gt;Content creators who want to quickly produce long images, posters, decks, or data reports&lt;/li&gt;
&lt;li&gt;Developers already using local AI coding agents such as Claude Code, Cursor, or Codex&lt;/li&gt;
&lt;li&gt;Teams that want to move from “write first, format later” to “generate the deliverable directly”&lt;/li&gt;
&lt;li&gt;Developers interested in agentic editors, AI design workflows, and Skill-template systems&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/nexu-io/html-anything
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; html-anything
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm -F @html-anything/next dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then open:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://localhost:3000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Basic workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Choose a locally detected AI agent from the top bar&lt;/li&gt;
&lt;li&gt;Choose a Skill template&lt;/li&gt;
&lt;li&gt;Paste Markdown, tables, JSON, SQL, or a draft&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;⌘ + Enter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Preview the generated result in the iframe&lt;/li&gt;
&lt;li&gt;Copy it to a platform, or export &lt;code&gt;.html&lt;/code&gt; / &lt;code&gt;.png&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HTML Anything is not just another HTML editor. Its real value is connecting local AI agents, design templates, and platform exports into one content-delivery workflow.&lt;/p&gt;
&lt;p&gt;It targets a very concrete problem: &lt;strong&gt;you already have the content, but you do not want to spend more time formatting, screenshotting, and adapting it for each platform.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you already use tools like Claude Code, Cursor, or Codex, HTML Anything is a natural extension: let the agent generate not only code, but also the final artifact readers will actually see.&lt;/p&gt;</description></item><item><title>OpenAI's Image Verification Tool: Adding Source Context to AI-Generated Images</title><link>https://silenceper.com/en/blog/2026-05-21-openai-verify-image/</link><pubDate>Thu, 21 May 2026 17:30:38 +0800</pubDate><guid>https://silenceper.com/en/blog/2026-05-21-openai-verify-image/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260521/openai-verify-product-hero.png" alt="Screenshot of the OpenAI Verify upload interface" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;AI-generated images are becoming more realistic, easier to share, and easier to edit. That creates a practical problem: when an image appears on a social platform, in a news context, or in a group chat, it is often hard to tell whether it came from a camera, design software, or an AI tool.&lt;/p&gt;
&lt;p&gt;OpenAI&amp;rsquo;s “Verify OpenAI-generated images” tool is built for this problem. You upload an image, and the system checks whether it contains provenance signals associated with OpenAI-generated images. In other words, it helps determine whether the image may have been created by tools such as ChatGPT, the OpenAI API, or Codex.&lt;/p&gt;
&lt;p&gt;This is not a tool for detecting fake news, and it does not decide whether the content of an image is true. It is closer to a source checker: it looks for technical traces that indicate whether the image came from OpenAI&amp;rsquo;s image generation systems.&lt;/p&gt;
&lt;h2&gt;What does it do?&lt;span class="hx-absolute -hx-mt-20" id="what-does-it-do"&gt;&lt;/span&gt;
&lt;a href="#what-does-it-do" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The workflow is simple: upload a PNG, JPG, or WEBP image, and the tool analyzes it and returns a detection result.&lt;/p&gt;
&lt;p&gt;It mainly looks for two kinds of signals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C2PA content credentials&lt;/li&gt;
&lt;li&gt;SynthID digital watermarks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If these signals are present, the tool can indicate that the image was likely generated by an OpenAI tool.&lt;/p&gt;
&lt;p&gt;The key idea is provenance, not truth verification. For example, if an AI-generated image claims to show a flood in a certain city, a successful detection result can only tell you that the image came from an OpenAI tool. It cannot tell you whether the event actually happened, whether the location is correct, or whether the image is being used in a misleading context.&lt;/p&gt;
&lt;p&gt;So the tool answers this question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Was this image generated by an OpenAI tool?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It does not answer this one:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Is the claim made by this image true?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;What are C2PA and SynthID?&lt;span class="hx-absolute -hx-mt-20" id="what-are-c2pa-and-synthid"&gt;&lt;/span&gt;
&lt;a href="#what-are-c2pa-and-synthid" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenAI&amp;rsquo;s verification tool relies on two different technical approaches.&lt;/p&gt;
&lt;p&gt;The first is &lt;strong&gt;C2PA content credentials&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;C2PA can be understood as source information embedded into digital media metadata. For supported OpenAI-generated images, the credential can show that the image was created by tools such as ChatGPT or the API. As long as the credential remains intact, it is a strong provenance signal.&lt;/p&gt;
&lt;p&gt;But it has a limitation: it depends on metadata. After an image is shared, compressed, screenshotted, or edited, that metadata may be removed. Once it is stripped away, the tool may no longer detect it.&lt;/p&gt;
&lt;p&gt;The second is &lt;strong&gt;SynthID digital watermarking&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;SynthID is a more invisible watermarking technique. Instead of placing a visible mark in a corner of the image, it embeds signals directly into the image content. This makes the signal more resilient to operations such as cropping, filters, and lossy compression.&lt;/p&gt;
&lt;p&gt;In simple terms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C2PA is more like an ID card inside the image file&lt;/li&gt;
&lt;li&gt;SynthID is more like an invisible mark embedded in the image itself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together, they improve the reliability of AI image provenance checks.&lt;/p&gt;
&lt;h2&gt;What does a positive result mean?&lt;span class="hx-absolute -hx-mt-20" id="what-does-a-positive-result-mean"&gt;&lt;/span&gt;
&lt;a href="#what-does-a-positive-result-mean" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If the tool detects relevant signals, the image was very likely generated by an OpenAI tool.&lt;/p&gt;
&lt;p&gt;OpenAI also notes that these detections are highly reliable and have very few false positives. So when the tool clearly finds OpenAI-related provenance signals, it should be treated as a strong indication of origin.&lt;/p&gt;
&lt;p&gt;But there is still an important boundary: the result does not tell you what happened to the image after it was created.&lt;/p&gt;
&lt;p&gt;For example, it does not prove whether the image was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cropped&lt;/li&gt;
&lt;li&gt;recompressed&lt;/li&gt;
&lt;li&gt;annotated with text&lt;/li&gt;
&lt;li&gt;used in the wrong context&lt;/li&gt;
&lt;li&gt;combined with other images&lt;/li&gt;
&lt;li&gt;otherwise edited after generation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So a positive result supports the image&amp;rsquo;s likely origin, but it does not verify the surrounding context.&lt;/p&gt;
&lt;h2&gt;What if nothing is detected?&lt;span class="hx-absolute -hx-mt-20" id="what-if-nothing-is-detected"&gt;&lt;/span&gt;
&lt;a href="#what-if-nothing-is-detected" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://silenceper.com/img/20260521/openai-verify-feature-section.png" alt="Screenshot of the feature explanation section on the OpenAI Verify page" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;This is the part most likely to be misunderstood.&lt;/p&gt;
&lt;p&gt;If the tool does not detect any supported signals, it does not mean the image was definitely not generated by OpenAI.&lt;/p&gt;
&lt;p&gt;Possible reasons include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the image metadata was removed&lt;/li&gt;
&lt;li&gt;the digital watermark was damaged or degraded&lt;/li&gt;
&lt;li&gt;the image was screenshotted, compressed, or edited&lt;/li&gt;
&lt;li&gt;the image was generated by an older OpenAI image model&lt;/li&gt;
&lt;li&gt;the image was created before the relevant provenance features were introduced&lt;/li&gt;
&lt;li&gt;the image may have been generated by another company&amp;rsquo;s AI model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So “not detected” only means that the uploaded image does not contain the OpenAI provenance signals currently supported by this tool.&lt;/p&gt;
&lt;p&gt;It does not prove that the image is not AI-generated. It also does not prove that the image is real.&lt;/p&gt;
&lt;p&gt;That distinction matters.&lt;/p&gt;
&lt;h2&gt;Why does this tool matter?&lt;span class="hx-absolute -hx-mt-20" id="why-does-this-tool-matter"&gt;&lt;/span&gt;
&lt;a href="#why-does-this-tool-matter" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;AI images can spread quickly across the internet, especially around news events, public safety topics, social controversies, and marketing campaigns. A single image can easily be separated from its original context.&lt;/p&gt;
&lt;p&gt;Content provenance gives people one more signal to work with.&lt;/p&gt;
&lt;p&gt;When you see an image, knowing whether it was generated by an AI tool can help you decide more carefully whether to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trust it&lt;/li&gt;
&lt;li&gt;share it&lt;/li&gt;
&lt;li&gt;treat it as evidence&lt;/li&gt;
&lt;li&gt;look for additional context&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For media organizations, platforms, researchers, creators, and everyday users, tools like this can reduce the chance of misreading online media.&lt;/p&gt;
&lt;p&gt;It does not solve every problem, but it makes the question “where did this image come from?” more transparent.&lt;/p&gt;
&lt;h2&gt;What should you pay attention to when using it?&lt;span class="hx-absolute -hx-mt-20" id="what-should-you-pay-attention-to-when-using-it"&gt;&lt;/span&gt;
&lt;a href="#what-should-you-pay-attention-to-when-using-it" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenAI recommends uploading a single image for analysis. If you are using a screenshot, crop it closely around the image and avoid uploading a file that contains multiple images.&lt;/p&gt;
&lt;p&gt;That helps reduce noise and gives the system a better chance of detecting C2PA metadata or SynthID watermarks.&lt;/p&gt;
&lt;p&gt;OpenAI also states that uploaded images are processed to detect provenance signals associated with OpenAI-generated content. Unless required by law, uploaded images are not stored and are not used to train OpenAI&amp;rsquo;s models.&lt;/p&gt;
&lt;h2&gt;What does this really change?&lt;span class="hx-absolute -hx-mt-20" id="what-does-this-really-change"&gt;&lt;/span&gt;
&lt;a href="#what-does-this-really-change" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In the past, people often relied on visual inspection to judge whether an image might be AI-generated: lighting, fingers, text, texture, or small visual artifacts. But as image generation improves, visual inspection becomes less reliable.&lt;/p&gt;
&lt;p&gt;OpenAI&amp;rsquo;s verification tool points to a different direction: instead of only asking whether an image “looks real,” we can ask whether it carries trustworthy technical source information.&lt;/p&gt;
&lt;p&gt;That is more robust than pure visual guessing, and it fits better with the future of online media.&lt;/p&gt;
&lt;p&gt;Of course, it is not a universal answer. It only covers supported OpenAI-generated images, it cannot identify every image generated by every AI model, and it cannot judge whether the message conveyed by an image is true.&lt;/p&gt;
&lt;p&gt;But it offers a clear direction: AI content should not only be generated; it should also be traceable, explainable, and verifiable.&lt;/p&gt;
&lt;p&gt;As AI-generated content becomes more common, transparency itself becomes part of the infrastructure. OpenAI&amp;rsquo;s image verification tool is one piece of that infrastructure.&lt;/p&gt;</description></item><item><title>Marketing Skills for AI Agents: A Marketing Workflow Pack for AI Agents</title><link>https://silenceper.com/en/article/2026-05-20-marketing-skills-ai-agents/</link><pubDate>Wed, 20 May 2026 09:06:51 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-20-marketing-skills-ai-agents/</guid><description>
&lt;p&gt;Project: &lt;a href="https://github.com/coreyhaines31/marketingskills" target="_blank" rel="noopener"&gt;https://github.com/coreyhaines31/marketingskills&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;One-sentence positioning&lt;span class="hx-absolute -hx-mt-20" id="one-sentence-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-sentence-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;marketingskills&lt;/code&gt; is a marketing skill pack for AI coding agents. It gives Claude Code, OpenAI Codex, Cursor, Windsurf, and other agents more professional workflows and evaluation criteria when handling SEO, conversion optimization, copywriting, ads, analytics, and growth tasks.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Marketing Skills for AI Agents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;code&gt;coreyhaines31/marketingskills&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;Corey Haines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://marketing-skills.com" target="_blank" rel="noopener"&gt;https://marketing-skills.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main languages&lt;/td&gt;
&lt;td&gt;JavaScript / Shell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latest version&lt;/td&gt;
&lt;td&gt;v2.0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repository popularity&lt;/td&gt;
&lt;td&gt;About 29.5k Stars and 4.8k Forks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Target agents&lt;/td&gt;
&lt;td&gt;Claude Code, OpenAI Codex, Cursor, Windsurf, and other AI agents that support the Agent Skills spec&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Many AI coding agents are already good at writing code. But once the task moves into marketing, the quality often becomes inconsistent.&lt;/p&gt;
&lt;p&gt;For example, you might ask an agent to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;optimize the conversion rate of a landing page;&lt;/li&gt;
&lt;li&gt;write a cold email sequence;&lt;/li&gt;
&lt;li&gt;run an SEO audit;&lt;/li&gt;
&lt;li&gt;plan an A/B test;&lt;/li&gt;
&lt;li&gt;design a product launch plan;&lt;/li&gt;
&lt;li&gt;analyze churn and retention problems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The agent can usually produce suggestions, but those suggestions often stay at a generic level: they look reasonable, yet lack concrete workflows, checklists, and marketing judgment.&lt;/p&gt;
&lt;p&gt;That is the problem &lt;code&gt;marketingskills&lt;/code&gt; tries to solve. It turns common marketing tasks into reusable Agent Skills, so an AI agent does not have to improvise every time it meets a marketing scenario. Instead, it can follow a more professional workflow.&lt;/p&gt;
&lt;h2&gt;Core capabilities&lt;span class="hx-absolute -hx-mt-20" id="core-capabilities"&gt;&lt;/span&gt;
&lt;a href="#core-capabilities" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Covers a full marketing workflow&lt;span class="hx-absolute -hx-mt-20" id="1-covers-a-full-marketing-workflow"&gt;&lt;/span&gt;
&lt;a href="#1-covers-a-full-marketing-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This project is not a single prompt. It is a skill library built around marketing work. The skills listed in the README cover multiple stages from acquisition to conversion and retention.&lt;/p&gt;
&lt;p&gt;Common areas include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SEO and content: &lt;code&gt;seo-audit&lt;/code&gt;, &lt;code&gt;ai-seo&lt;/code&gt;, &lt;code&gt;schema&lt;/code&gt;, &lt;code&gt;content-strategy&lt;/code&gt;, &lt;code&gt;programmatic-seo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Conversion optimization: &lt;code&gt;cro&lt;/code&gt;, &lt;code&gt;signup&lt;/code&gt;, &lt;code&gt;onboarding&lt;/code&gt;, &lt;code&gt;popups&lt;/code&gt;, &lt;code&gt;paywalls&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copywriting and content production: &lt;code&gt;copywriting&lt;/code&gt;, &lt;code&gt;copy-editing&lt;/code&gt;, &lt;code&gt;cold-email&lt;/code&gt;, &lt;code&gt;emails&lt;/code&gt;, &lt;code&gt;social&lt;/code&gt;, &lt;code&gt;video&lt;/code&gt;, &lt;code&gt;image&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ads and paid acquisition: &lt;code&gt;ads&lt;/code&gt;, &lt;code&gt;ad-creative&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Growth and retention: &lt;code&gt;referrals&lt;/code&gt;, &lt;code&gt;free-tools&lt;/code&gt;, &lt;code&gt;churn-prevention&lt;/code&gt;, &lt;code&gt;community-marketing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sales and GTM: &lt;code&gt;revops&lt;/code&gt;, &lt;code&gt;sales-enablement&lt;/code&gt;, &lt;code&gt;launch&lt;/code&gt;, &lt;code&gt;pricing&lt;/code&gt;, &lt;code&gt;competitors&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Strategy and research: &lt;code&gt;customer-research&lt;/code&gt;, &lt;code&gt;marketing-ideas&lt;/code&gt;, &lt;code&gt;marketing-psychology&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That means it is not only helping you “write a piece of marketing copy.” It can support a much broader marketing task chain.&lt;/p&gt;
&lt;h3&gt;2. Uses product context as the foundation&lt;span class="hx-absolute -hx-mt-20" id="2-uses-product-context-as-the-foundation"&gt;&lt;/span&gt;
&lt;a href="#2-uses-product-context-as-the-foundation" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;One of the most important design choices in the project is the &lt;code&gt;product-marketing&lt;/code&gt; skill.&lt;/p&gt;
&lt;p&gt;According to the README, other skills read &lt;code&gt;product-marketing&lt;/code&gt; first to understand the product, users, positioning, and market context before entering a specific task. This is important.&lt;/p&gt;
&lt;p&gt;Marketing tasks are highly dependent on context. Different products have different users, use cases, pricing models, and competitors. Without a shared product context, AI can easily produce content that is “correct but useless.”&lt;/p&gt;
&lt;p&gt;&lt;code&gt;product-marketing&lt;/code&gt; works like a base profile for all later marketing tasks. It helps the agent understand what the product is, who it serves, what problem it solves, and why people should care before writing pages, emails, ads, or SEO content.&lt;/p&gt;
&lt;h3&gt;3. Skills can work together&lt;span class="hx-absolute -hx-mt-20" id="3-skills-can-work-together"&gt;&lt;/span&gt;
&lt;a href="#3-skills-can-work-together" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Another important characteristic of &lt;code&gt;marketingskills&lt;/code&gt; is that its skills are connected.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;copywriting&lt;/code&gt; can work with &lt;code&gt;cro&lt;/code&gt; and &lt;code&gt;ab-testing&lt;/code&gt; for landing page optimization and experiment design;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;revops&lt;/code&gt; can work with &lt;code&gt;sales-enablement&lt;/code&gt; and &lt;code&gt;cold-email&lt;/code&gt; for sales lead and outreach workflows;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seo-audit&lt;/code&gt; can work with &lt;code&gt;schema&lt;/code&gt; and &lt;code&gt;ai-seo&lt;/code&gt; for search and AI-search optimization;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;customer-research&lt;/code&gt; can provide inputs for &lt;code&gt;copywriting&lt;/code&gt;, &lt;code&gt;cro&lt;/code&gt;, and &lt;code&gt;competitors&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This design is closer to real marketing work. Tasks are not isolated. Research, positioning, copy, channels, data, and experiments all influence each other.&lt;/p&gt;
&lt;h3&gt;4. Supports mainstream AI coding agents&lt;span class="hx-absolute -hx-mt-20" id="4-supports-mainstream-ai-coding-agents"&gt;&lt;/span&gt;
&lt;a href="#4-supports-mainstream-ai-coding-agents" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project explicitly mentions support for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;OpenAI Codex&lt;/li&gt;
&lt;li&gt;Cursor&lt;/li&gt;
&lt;li&gt;Windsurf&lt;/li&gt;
&lt;li&gt;other agents that support the Agent Skills spec&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes it feel more like a portable marketing capability pack than a prompt collection tied to a single AI product.&lt;/p&gt;
&lt;p&gt;If a team already uses AI coding agents for engineering tasks, it can add this skill pack to the project and let the same agent assist with parts of growth, content, and conversion optimization work.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This project is especially suitable for these groups:&lt;/p&gt;
&lt;h3&gt;Technical founders&lt;span class="hx-absolute -hx-mt-20" id="technical-founders"&gt;&lt;/span&gt;
&lt;a href="#technical-founders" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;They have a product and engineering ability, but may lack systematic marketing experience. The skill pack can help with positioning, landing pages, cold-start content, SEO, cold emails, and growth experiments.&lt;/p&gt;
&lt;h3&gt;Indie hackers&lt;span class="hx-absolute -hx-mt-20" id="indie-hackers"&gt;&lt;/span&gt;
&lt;a href="#indie-hackers" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Many indie developers do not struggle with building products as much as they struggle with acquiring users consistently. &lt;code&gt;marketingskills&lt;/code&gt; can turn common marketing actions into repeatable workflows and lower the startup cost.&lt;/p&gt;
&lt;h3&gt;SaaS and AI tool teams&lt;span class="hx-absolute -hx-mt-20" id="saas-and-ai-tool-teams"&gt;&lt;/span&gt;
&lt;a href="#saas-and-ai-tool-teams" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;These products usually need continuous work on content, conversion, trial activation, retention, and sales enablement materials. Skills such as CRO, SEO, onboarding, pricing, and sales enablement are especially relevant.&lt;/p&gt;
&lt;h3&gt;Technical marketing teams using AI agents&lt;span class="hx-absolute -hx-mt-20" id="technical-marketing-teams-using-ai-agents"&gt;&lt;/span&gt;
&lt;a href="#technical-marketing-teams-using-ai-agents" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;If a team already uses Claude Code, Codex, or Cursor for engineering work, it can also hand repetitive marketing workflows to agents: generating ad ideas, improving page copy, preparing competitor comparison pages, or designing experiment plans.&lt;/p&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The recommended way is to install all skills with &lt;code&gt;npx skills&lt;/code&gt;:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add coreyhaines31/marketingskills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you only want to try a few common skills first, install selected skills:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add coreyhaines31/marketingskills --skill product-marketing cro copywriting seo-audit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also list the available skills first:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add coreyhaines31/marketingskills --list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After installation, you can ask an agent to handle tasks such as:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Rewrite the hero copy of our homepage based on the current product positioning.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Audit this landing page for conversion issues and prioritize the fixes.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Design an A/B test plan for the signup flow of this SaaS product.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Write a B2B cold email sequence and follow-up sequence based on our product information.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Plan an AI SEO content optimization workflow for this product.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The value of &lt;code&gt;marketingskills&lt;/code&gt; is not that it collects another batch of prompts. Its value is that it breaks marketing work into reusable, composable skill modules that AI agents can call automatically.&lt;/p&gt;
&lt;p&gt;For developers and technical teams, it adds a marketing workflow layer to AI coding agents. It cannot replace real market judgment, but it can significantly lower the starting cost of marketing execution: from writing copy and doing SEO to planning conversion experiments and product launches, the agent has clearer processes to follow.&lt;/p&gt;
&lt;p&gt;If you already use Claude Code, Codex, Cursor, or a similar agent for development work, and you also want AI to help with some growth and marketing tasks, &lt;code&gt;marketingskills&lt;/code&gt; is worth adding to your toolbox.&lt;/p&gt;</description></item><item><title>Persistent Memory Is Not About Remembering Everything: What Should Agents Actually Keep?</title><link>https://silenceper.com/en/article/2026-05-10-agent-persistent-memory/</link><pubDate>Sun, 10 May 2026 11:20:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-10-agent-persistent-memory/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260510/agent-memory-decision-map-en.png" alt="Agent memory decision map" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Many AI agent products now talk about memory: long-term memory, project memory, user preferences, chat history, knowledge bases, vector retrieval, and automatic summaries.&lt;/p&gt;
&lt;p&gt;That makes it easy to believe one simple idea: &lt;strong&gt;the more an agent remembers, the smarter it becomes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For engineering agents, I think the opposite is closer to the truth.&lt;/p&gt;
&lt;p&gt;Persistent memory should not be a dumping ground for chat history. It should not mean putting every conversation, file, and assumption into a vector database. It should act more like a filter: only stable, reusable context that can improve future behavior deserves to survive.&lt;/p&gt;
&lt;p&gt;Otherwise, memory becomes noise. The agent may treat stale facts as current, turn one-off instructions into permanent rules, preserve unverified assumptions, or carry sensitive context into future tasks.&lt;/p&gt;
&lt;h2&gt;The Short Version&lt;span class="hx-absolute -hx-mt-20" id="the-short-version"&gt;&lt;/span&gt;
&lt;a href="#the-short-version" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;An agent should remember information that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;will likely be useful again;&lt;/li&gt;
&lt;li&gt;will not expire quickly;&lt;/li&gt;
&lt;li&gt;reduces repeated explanation;&lt;/li&gt;
&lt;li&gt;changes the agent&amp;rsquo;s default behavior;&lt;/li&gt;
&lt;li&gt;has a source, a scope, and a way to be verified.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It should not turn these into long-term memory:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;secrets, passwords, tokens, cookies, recovery codes;&lt;/li&gt;
&lt;li&gt;temporary branch or workspace state;&lt;/li&gt;
&lt;li&gt;prices, schedules, versions, policies, and other volatile facts;&lt;/li&gt;
&lt;li&gt;guesses without evidence;&lt;/li&gt;
&lt;li&gt;raw private transcripts;&lt;/li&gt;
&lt;li&gt;one-off emotions, preferences, or temporary instructions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short: &lt;strong&gt;memory is an index, not an archive. It is working policy, not raw logs.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Why Remembering More Can Make Agents Worse&lt;span class="hx-absolute -hx-mt-20" id="why-remembering-more-can-make-agents-worse"&gt;&lt;/span&gt;
&lt;a href="#why-remembering-more-can-make-agents-worse" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For a chat assistant, remembering your name, tone, or writing preference is usually harmless. Engineering agents are different. They read code, edit files, run commands, call MCP servers, control browsers, access internal tools, and sometimes participate in release workflows.&lt;/p&gt;
&lt;p&gt;When memory quality is poor, the blast radius becomes much larger.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the agent remembers that a project uses &lt;code&gt;pnpm&lt;/code&gt;, but the project later migrates to &lt;code&gt;bun&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;it remembers that the &lt;code&gt;release&lt;/code&gt; branch can deploy directly, but the rule later changes to require parity with &lt;code&gt;origin/release&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;it remembers that an API returns &lt;code&gt;groupName&lt;/code&gt;, while the real source of truth changed to &lt;code&gt;displayName&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;it remembers that the user skipped tests once, then applies that shortcut to a risky backend change;&lt;/li&gt;
&lt;li&gt;it stores a temporary SQL query from a debugging session and treats it as a general diagnostic path.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not model intelligence problems. They are memory lifecycle problems.&lt;/p&gt;
&lt;p&gt;OpenAI&amp;rsquo;s memory documentation separates saved memories from reference chat history and emphasizes user controls such as managing, deleting, and disabling memory. Claude Code also separates memory by scope through files such as &lt;code&gt;CLAUDE.md&lt;/code&gt;. The underlying lesson is important: useful memory needs boundaries.&lt;/p&gt;
&lt;p&gt;Engineering agents should follow the same principle.&lt;/p&gt;
&lt;h2&gt;Three Kinds of Context&lt;span class="hx-absolute -hx-mt-20" id="three-kinds-of-context"&gt;&lt;/span&gt;
&lt;a href="#three-kinds-of-context" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;I like to separate agent context into three layers.&lt;/p&gt;
&lt;h3&gt;1. Current Task Context&lt;span class="hx-absolute -hx-mt-20" id="1-current-task-context"&gt;&lt;/span&gt;
&lt;a href="#1-current-task-context" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This is short-lived.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the user&amp;rsquo;s latest request;&lt;/li&gt;
&lt;li&gt;the current git diff;&lt;/li&gt;
&lt;li&gt;terminal output from this turn;&lt;/li&gt;
&lt;li&gt;the current browser page state;&lt;/li&gt;
&lt;li&gt;logs found during this debugging session;&lt;/li&gt;
&lt;li&gt;the active plan and checklist.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This context is important while the task is active, but most of it should not become long-term memory. After the task is done, it should either be captured in code, documentation, issues, commits, or simply disappear.&lt;/p&gt;
&lt;p&gt;If every task scene becomes memory, future tasks will be polluted by old state.&lt;/p&gt;
&lt;h3&gt;2. Project Source of Truth&lt;span class="hx-absolute -hx-mt-20" id="2-project-source-of-truth"&gt;&lt;/span&gt;
&lt;a href="#2-project-source-of-truth" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This is the context agents should trust first.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; / &lt;code&gt;CLAUDE.md&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;README.md&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Makefile&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;CI configuration;&lt;/li&gt;
&lt;li&gt;schema and migrations;&lt;/li&gt;
&lt;li&gt;package catalogs;&lt;/li&gt;
&lt;li&gt;API type definitions;&lt;/li&gt;
&lt;li&gt;tests;&lt;/li&gt;
&lt;li&gt;project design documents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These files may not be called memory, but for an agent they are the most important verifiable memory.&lt;/p&gt;
&lt;p&gt;If a memory conflicts with the repository, the repository should win. Memory may point the agent toward the right file, but it should not replace the file.&lt;/p&gt;
&lt;h3&gt;3. Long-Term Working Memory&lt;span class="hx-absolute -hx-mt-20" id="3-long-term-working-memory"&gt;&lt;/span&gt;
&lt;a href="#3-long-term-working-memory" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This is what persistent memory should store.&lt;/p&gt;
&lt;p&gt;It captures cross-task knowledge that is stable enough to reuse but may not yet belong in project files.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the user prefers Chinese by default;&lt;/li&gt;
&lt;li&gt;this repository publishes paired &lt;code&gt;.en.md&lt;/code&gt; articles for new Chinese articles;&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;public&lt;/code&gt; directory is often dirty, so article validation should avoid writing into it;&lt;/li&gt;
&lt;li&gt;for certain UI changes, the user explicitly does not want unrelated screens touched;&lt;/li&gt;
&lt;li&gt;a deployment script must preserve &lt;code&gt;linux/amd64&lt;/code&gt; because the local machine is macOS on arm64;&lt;/li&gt;
&lt;li&gt;for debugging tasks, inspect logs first instead of guessing fixes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The value of this layer is to reduce repeated setup and keep future work inside known boundaries.&lt;/p&gt;
&lt;h2&gt;What Should Agents Remember?&lt;span class="hx-absolute -hx-mt-20" id="what-should-agents-remember"&gt;&lt;/span&gt;
&lt;a href="#what-should-agents-remember" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This is the table I use.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keep&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stable preferences&lt;/td&gt;
&lt;td&gt;Default language, concise answers, conclusion first&lt;/td&gt;
&lt;td&gt;Changes collaboration style&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project conventions&lt;/td&gt;
&lt;td&gt;Articles live in &lt;code&gt;content/article/&lt;/code&gt;; English uses the same slug plus &lt;code&gt;.en.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Reduces repeated discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard constraints&lt;/td&gt;
&lt;td&gt;Do not change backend contracts; do not touch unrelated UI; avoid writing to &lt;code&gt;public&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Prevents real regressions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeated failure patterns&lt;/td&gt;
&lt;td&gt;A known install issue came from cache permissions; a slow deploy required checking workflow logs&lt;/td&gt;
&lt;td&gt;Speeds up debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirmed business rules&lt;/td&gt;
&lt;td&gt;Collaborators can add or subtract points but cannot edit student data&lt;/td&gt;
&lt;td&gt;Prevents product rule drift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Approved direction&lt;/td&gt;
&lt;td&gt;A specific UI direction was accepted and future work should iterate from it&lt;/td&gt;
&lt;td&gt;Preserves continuity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reusable workflows&lt;/td&gt;
&lt;td&gt;Validate articles with &lt;code&gt;hugo --renderToMemory --minify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Improves delivery consistency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These are not historical details. They are future defaults.&lt;/p&gt;
&lt;p&gt;A good memory should answer this question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Will this make the agent behave more correctly next time?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If not, do not store it.&lt;/p&gt;
&lt;h2&gt;What Should Be Verified Again?&lt;span class="hx-absolute -hx-mt-20" id="what-should-be-verified-again"&gt;&lt;/span&gt;
&lt;a href="#what-should-be-verified-again" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Some information is useful as a clue but unsafe as a fact.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;latest API behavior;&lt;/li&gt;
&lt;li&gt;current prices and plans;&lt;/li&gt;
&lt;li&gt;GitHub Actions status;&lt;/li&gt;
&lt;li&gt;whether a remote branch has changed;&lt;/li&gt;
&lt;li&gt;whether a model is still available;&lt;/li&gt;
&lt;li&gt;laws, policies, and platform rules;&lt;/li&gt;
&lt;li&gt;release dates and schedules;&lt;/li&gt;
&lt;li&gt;production service status.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These facts can expire even if they were correct last time.&lt;/p&gt;
&lt;p&gt;So memory should say:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Last time, the release slowdown was traced to the image build step.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;For similar deploy issues, first inspect the current workflow and recent Actions logs.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It should not say:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Deploys are slow because of image builds.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The first version is a reusable diagnostic clue. The second is a stale conclusion waiting to happen.&lt;/p&gt;
&lt;h2&gt;What Should Never Be Stored?&lt;span class="hx-absolute -hx-mt-20" id="what-should-never-be-stored"&gt;&lt;/span&gt;
&lt;a href="#what-should-never-be-stored" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The biggest danger is not that memory is incomplete. It is that memory contains material it should not contain.&lt;/p&gt;
&lt;h3&gt;1. Secrets and Credentials&lt;span class="hx-absolute -hx-mt-20" id="1-secrets-and-credentials"&gt;&lt;/span&gt;
&lt;a href="#1-secrets-and-credentials" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API keys;&lt;/li&gt;
&lt;li&gt;tokens;&lt;/li&gt;
&lt;li&gt;cookies;&lt;/li&gt;
&lt;li&gt;SSH private keys;&lt;/li&gt;
&lt;li&gt;database passwords;&lt;/li&gt;
&lt;li&gt;payment system secrets;&lt;/li&gt;
&lt;li&gt;recovery codes;&lt;/li&gt;
&lt;li&gt;one-time verification codes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These should not enter memory, articles, logs, screenshots, or issues.&lt;/p&gt;
&lt;h3&gt;2. Raw Private Content&lt;span class="hx-absolute -hx-mt-20" id="2-raw-private-content"&gt;&lt;/span&gt;
&lt;a href="#2-raw-private-content" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Do not store large chunks of email, customer data, order records, student information, medical information, financial records, or private conversation transcripts.&lt;/p&gt;
&lt;p&gt;If context is needed, compress it into a non-sensitive rule:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;For education SaaS work, the user cares strongly about teacher collaboration permissions and parent-facing visibility boundaries.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Do not preserve the raw personal data behind that rule.&lt;/p&gt;
&lt;h3&gt;3. Unverified Guesses&lt;span class="hx-absolute -hx-mt-20" id="3-unverified-guesses"&gt;&lt;/span&gt;
&lt;a href="#3-unverified-guesses" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Agents form hypotheses during debugging. Hypotheses belong in the current task, not long-term memory.&lt;/p&gt;
&lt;p&gt;Only conclusions backed by code, logs, tests, or production verification deserve to survive.&lt;/p&gt;
&lt;h3&gt;4. One-Off State&lt;span class="hx-absolute -hx-mt-20" id="4-one-off-state"&gt;&lt;/span&gt;
&lt;a href="#4-one-off-state" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the current temporary branch;&lt;/li&gt;
&lt;li&gt;a port that happened to be busy today;&lt;/li&gt;
&lt;li&gt;a file generated during this task;&lt;/li&gt;
&lt;li&gt;the fact that this specific task skipped tests;&lt;/li&gt;
&lt;li&gt;the fact that a page was open in a specific Chrome tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These should remain local to the active session.&lt;/p&gt;
&lt;h2&gt;A Simple Test Before Saving Memory&lt;span class="hx-absolute -hx-mt-20" id="a-simple-test-before-saving-memory"&gt;&lt;/span&gt;
&lt;a href="#a-simple-test-before-saving-memory" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ask five questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Will this be useful next time?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Will it probably remain true a month from now?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Will it change the agent&amp;rsquo;s default behavior?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Can it be traced or re-verified?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If it is wrong, will it create risk?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Only save the memory if the first four answers are mostly yes and the fifth risk is acceptable.&lt;/p&gt;
&lt;p&gt;If something is useful but likely to drift, write it as a place to check next time, not as a permanent fact.&lt;/p&gt;
&lt;p&gt;If something is high risk, do not solve it with memory. Put it in permissions, CI guards, tests, docs, or human approval workflows.&lt;/p&gt;
&lt;h2&gt;How Should Memory Be Written?&lt;span class="hx-absolute -hx-mt-20" id="how-should-memory-be-written"&gt;&lt;/span&gt;
&lt;a href="#how-should-memory-be-written" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Good memory is short, stable, and operational.&lt;/p&gt;
&lt;p&gt;Bad:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The user asked us to update an article, public was dirty, then we ran Hugo and it seemed okay.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Better:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;For silenceper.com article work, source articles live in content/article/; English articles use the same slug plus .en.md; validate with hugo --renderToMemory --minify to avoid writing into public.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The better version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;removes process noise;&lt;/li&gt;
&lt;li&gt;keeps future behavior;&lt;/li&gt;
&lt;li&gt;names the repository scope;&lt;/li&gt;
&lt;li&gt;includes concrete paths and commands;&lt;/li&gt;
&lt;li&gt;avoids treating temporary state as truth.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where Should Different Information Live?&lt;span class="hx-absolute -hx-mt-20" id="where-should-different-information-live"&gt;&lt;/span&gt;
&lt;a href="#where-should-different-information-live" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Not every durable fact belongs in the same memory system.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Information type&lt;/th&gt;
&lt;th&gt;Better home&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project rules&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AGENTS.md&lt;/code&gt; / &lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build and deploy commands&lt;/td&gt;
&lt;td&gt;&lt;code&gt;README.md&lt;/code&gt; / &lt;code&gt;Makefile&lt;/code&gt; / CI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business rules&lt;/td&gt;
&lt;td&gt;Code, tests, product docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personal preferences&lt;/td&gt;
&lt;td&gt;User-level memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repository conventions&lt;/td&gt;
&lt;td&gt;Project-level memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reusable procedures&lt;/td&gt;
&lt;td&gt;Skill / runbook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active task state&lt;/td&gt;
&lt;td&gt;Current session / issue / PR description&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volatile facts&lt;/td&gt;
&lt;td&gt;Re-check the source every time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A mature agent workflow should not rely on memory alone.&lt;/p&gt;
&lt;p&gt;The better structure is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;memory points the agent in the right direction
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;repo files define the rules
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tests prevent regressions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;logs reconstruct the scene
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;human approvals guard risky actions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That way, even if memory is incomplete, the agent can recover by reading the source of truth.&lt;/p&gt;
&lt;h2&gt;The Real Value of Persistent Memory&lt;span class="hx-absolute -hx-mt-20" id="the-real-value-of-persistent-memory"&gt;&lt;/span&gt;
&lt;a href="#the-real-value-of-persistent-memory" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Persistent memory is not valuable because it makes an agent remember everything.&lt;/p&gt;
&lt;p&gt;It is valuable because it helps the agent avoid repeated mistakes.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it does not ask every time whether to use Chinese or English;&lt;/li&gt;
&lt;li&gt;it does not reverse a business rule that was already settled;&lt;/li&gt;
&lt;li&gt;it does not repeat the same deploy mistake;&lt;/li&gt;
&lt;li&gt;it does not bring back a UI direction the user rejected;&lt;/li&gt;
&lt;li&gt;it does not modify unrelated files in a dirty worktree;&lt;/li&gt;
&lt;li&gt;it does not answer plan or SKU questions from memory when the code should be checked.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not dramatic AGI abilities. They are exactly the things that make engineering collaboration smoother.&lt;/p&gt;
&lt;p&gt;The productivity gain comes from remembering fewer things more accurately, not from storing more fragments.&lt;/p&gt;
&lt;h2&gt;My Recommendation&lt;span class="hx-absolute -hx-mt-20" id="my-recommendation"&gt;&lt;/span&gt;
&lt;a href="#my-recommendation" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you use Codex, Claude Code, Cursor, or similar coding agents heavily, manage memory with these rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Treat memory as an index, not the source of truth.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Put stable rules in project files.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Re-check volatile facts from live sources or the repository.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep sensitive material out of memory.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write each memory as future behavior, not historical narration.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regularly prune stale, duplicate, and vague memories.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The goal is not to make the agent remember everything. The goal is to make it interrupt you less, drift less, and repeat fewer mistakes.&lt;/p&gt;
&lt;p&gt;When memory becomes a maintainable engineering asset instead of accumulated chat residue, an agent starts to feel like a reliable long-term collaborator.&lt;/p&gt;
&lt;h2&gt;References&lt;span class="hx-absolute -hx-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://help.openai.com/en/articles/8590148-memory-faq/" target="_blank" rel="noopener"&gt;OpenAI Memory FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/index/running-codex-safely/" target="_blank" rel="noopener"&gt;Running Codex safely at OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.claude.com/en/docs/claude-code/memory" target="_blank" rel="noopener"&gt;Claude Code memory documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2310.08560" target="_blank" rel="noopener"&gt;MemGPT: Towards LLMs as Operating Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2603.07670" target="_blank" rel="noopener"&gt;Memory for Autonomous LLM Agents: Mechanisms, Evaluation, and Emerging Frontiers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Codex Chrome Extension: When Should AI Use Your Browser Login State?</title><link>https://silenceper.com/en/article/2026-05-09-codex-chrome-browser-login-state/</link><pubDate>Sat, 09 May 2026 22:15:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-09-codex-chrome-browser-login-state/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260509/codex-app-screenshot.webp" alt="Codex app window with a project sidebar, active thread, and review pane" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;When people first hear about the Codex Chrome extension, it is easy to describe it as “letting AI open web pages.” That is too narrow.&lt;/p&gt;
&lt;p&gt;A more accurate way to think about it is this: &lt;strong&gt;when a task depends on your Chrome login state, browser context, or real web-page interactions, the extension lets Codex enter that workflow within the permissions you grant.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you need Codex to read a CRM, mailbox, admin dashboard, or internal system that only works after login;&lt;/li&gt;
&lt;li&gt;you want to reproduce a bug in the real business page;&lt;/li&gt;
&lt;li&gt;you want Codex to inspect page state, return to the repository, fix the code, and verify the page again;&lt;/li&gt;
&lt;li&gt;you need to upload a local file to a web form and check the result;&lt;/li&gt;
&lt;li&gt;you have an internal system with no stable API, only a web UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without browser access, AI can usually only tell you what to click next. The Chrome extension fills the gap around the real browser environment.&lt;/p&gt;
&lt;h2&gt;The short version&lt;span class="hx-absolute -hx-mt-20" id="the-short-version"&gt;&lt;/span&gt;
&lt;a href="#the-short-version" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;The Codex Chrome extension is not a generic web-page summarizer or a standalone chatbot. It is a browser capability inside the Codex App workflow.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My rule of thumb is simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;for local previews, public pages, and pages that do not require login, use Codex’s in-app browser first;&lt;/li&gt;
&lt;li&gt;when a system has a dedicated plugin or structured integration, use that first;&lt;/li&gt;
&lt;li&gt;use the Chrome extension only when the task truly depends on Chrome login state, browser profile, cookies, or real web interactions;&lt;/li&gt;
&lt;li&gt;for payments, transfers, production deletes, security settings, or sensitive exports, let Codex prepare and verify, but keep the final action in human hands.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Its value is not “opening a browser more conveniently.” Its value is letting Codex participate in the full verification loop: inspect the page, operate an admin flow, reproduce the issue, return to code, fix it, and verify again.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;Codex Chrome extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Official docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developers.openai.com/codex/app/chrome-extension" target="_blank" rel="noopener"&gt;https://developers.openai.com/codex/app/chrome-extension&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product&lt;/td&gt;
&lt;td&gt;Codex App&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Let Codex use Chrome for browser tasks that need signed-in state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical scenarios&lt;/td&gt;
&lt;td&gt;Gmail, Salesforce, LinkedIn, CRM, internal tools, logged-in web flows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with&lt;/td&gt;
&lt;td&gt;Codex App, Plugins, In-app Browser, Computer Use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission model&lt;/td&gt;
&lt;td&gt;Ask before new websites by default; supports allowlist and blocklist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security focus&lt;/td&gt;
&lt;td&gt;Treat page content as untrusted context; keep sensitive actions under human review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The real boundary it solves&lt;span class="hx-absolute -hx-mt-20" id="the-real-boundary-it-solves"&gt;&lt;/span&gt;
&lt;a href="#the-real-boundary-it-solves" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Many AI coding tools can read code, edit files, and run commands. But once the task enters a real web environment, new boundaries appear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the page requires login;&lt;/li&gt;
&lt;li&gt;data exists only inside a browser session;&lt;/li&gt;
&lt;li&gt;an internal system has no stable API;&lt;/li&gt;
&lt;li&gt;reproducing the issue requires clicking through the real page;&lt;/li&gt;
&lt;li&gt;local development pages and production dashboards must be checked together;&lt;/li&gt;
&lt;li&gt;the workflow involves copying, uploading, downloading, screenshots, or checking visual state.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With the Chrome extension, a task can look like this:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@Chrome open the order detail page in the admin dashboard and check this user&amp;#39;s subscription status.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If the page looks wrong, return to the repository, inspect the related API and frontend rendering logic,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;fix the issue, then verify the page again in the browser.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The important part is not browser automation by itself. The important part is that Codex can connect “evidence from the page” with “changes in the codebase” inside one working thread.&lt;/p&gt;
&lt;h2&gt;How it differs from the in-app browser&lt;span class="hx-absolute -hx-mt-20" id="how-it-differs-from-the-in-app-browser"&gt;&lt;/span&gt;
&lt;a href="#how-it-differs-from-the-in-app-browser" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;img src="https://silenceper.com/img/20260509/codex-in-app-browser.webp" alt="Codex app showing a browser comment on a local web app preview" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;OpenAI’s docs draw a clear line: local development servers, file-backed previews, public pages, and pages that do not require login should use the in-app browser first. That keeps preview and verification inside Codex without touching your Chrome profile.&lt;/p&gt;
&lt;p&gt;The Chrome extension is better for cases where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the page needs your Chrome login state;&lt;/li&gt;
&lt;li&gt;the task must access data under your real account;&lt;/li&gt;
&lt;li&gt;the workflow depends on browser profile, cookies, or extensions;&lt;/li&gt;
&lt;li&gt;the in-app browser cannot complete login, permission checks, or business-state verification;&lt;/li&gt;
&lt;li&gt;the target system has no usable API and only exposes a web UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My recommendation: &lt;strong&gt;do not use real login state when you do not need it. When you must use it, narrow the permission to the current task.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Core capabilities&lt;span class="hx-absolute -hx-mt-20" id="core-capabilities"&gt;&lt;/span&gt;
&lt;a href="#core-capabilities" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Connect Chrome and use real signed-in state&lt;span class="hx-absolute -hx-mt-20" id="1-connect-chrome-and-use-real-signed-in-state"&gt;&lt;/span&gt;
&lt;a href="#1-connect-chrome-and-use-real-signed-in-state" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://silenceper.com/img/20260509/codex-chrome-connected.png" alt="Codex Chrome extension showing connected status" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;After setup, the Codex extension in the Chrome toolbar shows a connected state. In a new Codex thread, you can invoke Chrome directly:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;@Chrome open Salesforce and update the account from these call notes.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The key point is that Codex is using your Chrome environment, not a temporary browser with no login state. That makes it useful for Gmail, Salesforce, LinkedIn, CRM systems, and internal dashboards that only work after sign-in.&lt;/p&gt;
&lt;h3&gt;2. New websites require approval by default&lt;span class="hx-absolute -hx-mt-20" id="2-new-websites-require-approval-by-default"&gt;&lt;/span&gt;
&lt;a href="#2-new-websites-require-approval-by-default" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The extension does not automatically give Codex access to every website. By default, Codex asks before interacting with each new website, usually at the host level such as &lt;code&gt;example.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can choose to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;allow the website for the current chat;&lt;/li&gt;
&lt;li&gt;always allow that host;&lt;/li&gt;
&lt;li&gt;decline the website.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This matters because a signed-in browser may contain email, admin systems, finance tools, internal tools, and personal accounts. “Can access” should not automatically mean “should access.”&lt;/p&gt;
&lt;h3&gt;3. Allowlist and blocklist support&lt;span class="hx-absolute -hx-mt-20" id="3-allowlist-and-blocklist-support"&gt;&lt;/span&gt;
&lt;a href="#3-allowlist-and-blocklist-support" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The docs mention domain allowlists and blocklists in Computer Use settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;allowlist: Codex can use those domains again without asking every time;&lt;/li&gt;
&lt;li&gt;blocklist: Codex should not use those domains;&lt;/li&gt;
&lt;li&gt;removing a domain from the allowlist makes Codex ask again;&lt;/li&gt;
&lt;li&gt;removing a domain from the blocklist lets Codex ask again instead of treating it as blocked.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For frequent, low-risk, well-scoped sites, an allowlist can be convenient. For mail, finance, account security, or production dashboards, I would prefer temporary approval or continued human confirmation.&lt;/p&gt;
&lt;h3&gt;4. File uploads require file URL access&lt;span class="hx-absolute -hx-mt-20" id="4-file-uploads-require-file-url-access"&gt;&lt;/span&gt;
&lt;a href="#4-file-uploads-require-file-url-access" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;img src="https://silenceper.com/img/20260509/codex-file-url-access.webp" alt="Chrome extension settings showing Allow access to file URLs enabled for Codex" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;If a Chrome task needs to upload local files, OpenAI’s docs say you need to enable &lt;strong&gt;Allow access to file URLs&lt;/strong&gt; in the Chrome extension details page:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Chrome toolbar → Extensions → Manage Extensions → Codex → Details → Allow access to file URLs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This should be enabled only when needed. Once local files are involved, the boundary expands from “web operation” to “local file + web upload.” Turn it on for explicit upload tasks, then reassess whether it should remain enabled.&lt;/p&gt;
&lt;h2&gt;What to watch out for&lt;span class="hx-absolute -hx-mt-20" id="what-to-watch-out-for"&gt;&lt;/span&gt;
&lt;a href="#what-to-watch-out-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Treat web pages as untrusted context&lt;span class="hx-absolute -hx-mt-20" id="treat-web-pages-as-untrusted-context"&gt;&lt;/span&gt;
&lt;a href="#treat-web-pages-as-untrusted-context" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The official docs explicitly say page content should be treated as untrusted context.&lt;/p&gt;
&lt;p&gt;That is important because web pages can include misleading text, hidden instructions, or malicious content. If Codex treats page content as user instructions, it may take actions outside the intended scope or leak data.&lt;/p&gt;
&lt;p&gt;Practical habits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;do not let Codex visit sensitive pages unrelated to the task;&lt;/li&gt;
&lt;li&gt;read the approval prompt carefully when a new site is requested;&lt;/li&gt;
&lt;li&gt;keep human review for mail, finance, account, and security settings;&lt;/li&gt;
&lt;li&gt;do not put passwords, secrets, recovery codes, or keys into browser tasks;&lt;/li&gt;
&lt;li&gt;split complex tasks into small steps that are easy to inspect.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Be careful with “Always allow browser content”&lt;span class="hx-absolute -hx-mt-20" id="be-careful-with-always-allow-browser-content"&gt;&lt;/span&gt;
&lt;a href="#be-careful-with-always-allow-browser-content" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenAI marks “Always allow browser content” as Elevated Risk. When enabled, Codex no longer asks before using websites.&lt;/p&gt;
&lt;p&gt;That may be convenient for frequent low-risk sites, but it raises the risk in real account environments. I would keep it off by default unless the site is clearly non-sensitive and the task boundary is stable.&lt;/p&gt;
&lt;h3&gt;Browser history is not ordinary context&lt;span class="hx-absolute -hx-mt-20" id="browser-history-is-not-ordinary-context"&gt;&lt;/span&gt;
&lt;a href="#browser-history-is-not-ordinary-context" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Browser history may contain internal URLs, search terms, admin paths, account activity, and business signals. The docs say Codex asks separately when it wants to use browser history, and history does not have an always-allow option.&lt;/p&gt;
&lt;p&gt;That is the right design. Browser history is not just “helpful context”; it can reveal how you work and what internal systems exist. Do not authorize it unless the task truly requires it.&lt;/p&gt;
&lt;h2&gt;Good fits&lt;span class="hx-absolute -hx-mt-20" id="good-fits"&gt;&lt;/span&gt;
&lt;a href="#good-fits" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The Chrome extension is useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;updating data in a CRM or admin dashboard according to clear instructions;&lt;/li&gt;
&lt;li&gt;reading logged-in business pages and combining that with code changes;&lt;/li&gt;
&lt;li&gt;reproducing bugs in real web pages;&lt;/li&gt;
&lt;li&gt;verifying flows that require account state;&lt;/li&gt;
&lt;li&gt;working with internal tools, low-code systems, or ticketing systems without stable APIs;&lt;/li&gt;
&lt;li&gt;using page results to continue debugging in the codebase;&lt;/li&gt;
&lt;li&gt;uploading files, checking page state, downloading results, and continuing the workflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is not a good fit for giving AI full control over payments, transfers, production deletes, security settings, or large personal-data exports. Even if the tool can do it, the final action should stay with a human.&lt;/p&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The basic setup from the official docs is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Open the Codex App
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Go to Plugins
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Add the Chrome plugin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Follow the setup flow to install or connect the Chrome extension
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Accept Chrome permission prompts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. Confirm the Codex extension shows Connected in Chrome
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7. Start a new Codex thread
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8. Use @Chrome in your prompt for browser tasks&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If the connection fails, check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether the Chrome extension shows Connected;&lt;/li&gt;
&lt;li&gt;whether the Chrome plugin is enabled in Codex;&lt;/li&gt;
&lt;li&gt;whether you are using the Chrome profile where the extension is installed;&lt;/li&gt;
&lt;li&gt;whether the target website is in the blocklist;&lt;/li&gt;
&lt;li&gt;whether Chrome or Codex needs to be restarted;&lt;/li&gt;
&lt;li&gt;whether file uploads require &lt;strong&gt;Allow access to file URLs&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;My recommendation&lt;span class="hx-absolute -hx-mt-20" id="my-recommendation"&gt;&lt;/span&gt;
&lt;a href="#my-recommendation" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you treat Codex as an engineering collaborator rather than just a chatbot, the Chrome extension is useful. It lets Codex move beyond the repository and participate in the real verification loop.&lt;/p&gt;
&lt;p&gt;But the closer a task gets to real accounts and production systems, the tighter the permission boundary should be.&lt;/p&gt;
&lt;p&gt;I would use it in this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;public or local pages: use the in-app browser first;&lt;/li&gt;
&lt;li&gt;structured systems: prefer dedicated plugins or APIs;&lt;/li&gt;
&lt;li&gt;signed-in browser state: use the Chrome extension only when needed;&lt;/li&gt;
&lt;li&gt;high-risk actions: let Codex prepare, inspect, and explain, but keep final confirmation human.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Used this way, the Chrome extension is not “handing your browser to AI.” It is turning a manual verification workflow into a controlled, reviewable collaboration loop that can return to the codebase.&lt;/p&gt;</description></item><item><title>Warp: An AI Agent Terminal with Built-in Code Review Workflow</title><link>https://silenceper.com/en/article/2026-05-09-warp-agentic-terminal/</link><pubDate>Sat, 09 May 2026 21:47:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-09-warp-agentic-terminal/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260509/warp-preview.png" alt="Warp Agentic Development Environment product preview" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-sentence positioning&lt;span class="hx-absolute -hx-mt-20" id="one-sentence-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-sentence-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Warp is an AI-native development environment born from the terminal. It brings the command line, coding agents, Git diff review, code review, and commit workflows into one workspace.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Warp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/warpdotdev/warp" target="_blank" rel="noopener"&gt;https://github.com/warpdotdev/warp&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://warp.dev" target="_blank" rel="noopener"&gt;https://warp.dev&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;An AI-native development environment evolved from the terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main language&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stars / Forks&lt;/td&gt;
&lt;td&gt;About 57k Stars / 4.3k Forks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Mainly AGPL-3.0; &lt;code&gt;warpui_core&lt;/code&gt; and &lt;code&gt;warpui&lt;/code&gt; are MIT licensed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Core capabilities&lt;/td&gt;
&lt;td&gt;AI Coding Agent, terminal workspace, Git Diff review, agentic open-source workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Getting started&lt;/td&gt;
&lt;td&gt;Download from the official website; developers can build locally with &lt;code&gt;./script/bootstrap&lt;/code&gt; and &lt;code&gt;./script/run&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The terminal is powerful, but the daily development workflow is often scattered across many tools: commands in a terminal, code changes in an editor, diffs in a Git client, review in a PR page, and AI coding assistance in yet another window.&lt;/p&gt;
&lt;p&gt;Warp’s approach is to &lt;strong&gt;pull these actions back into an AI-native workspace&lt;/strong&gt;. You can ask an agent to work on a task, generate code changes, run checks, inspect the Git diff, leave comments, and prepare commits in one place.&lt;/p&gt;
&lt;h2&gt;Core highlights&lt;span class="hx-absolute -hx-mt-20" id="core-highlights"&gt;&lt;/span&gt;
&lt;a href="#core-highlights" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. A built-in AI Coding Agent&lt;span class="hx-absolute -hx-mt-20" id="1-a-built-in-ai-coding-agent"&gt;&lt;/span&gt;
&lt;a href="#1-a-built-in-ai-coding-agent" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Warp is not just a terminal with a chat box. It includes a coding agent that can work through development tasks: implementing features, changing files, running checks, and producing diffs.&lt;/p&gt;
&lt;p&gt;The README also notes that Warp supports its built-in coding agent and can work with external CLI agents such as Claude Code, Codex, Gemini CLI, and others.&lt;/p&gt;
&lt;h3&gt;2. Terminal + Agent + Git Diff in one workspace&lt;span class="hx-absolute -hx-mt-20" id="2-terminal--agent--git-diff-in-one-workspace"&gt;&lt;/span&gt;
&lt;a href="#2-terminal--agent--git-diff-in-one-workspace" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The screenshot shows a typical development flow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the left side displays the agent’s task execution process;&lt;/li&gt;
&lt;li&gt;the right side shows a Git Diff review interface;&lt;/li&gt;
&lt;li&gt;uncommitted changes are visible;&lt;/li&gt;
&lt;li&gt;code can be reviewed line by line;&lt;/li&gt;
&lt;li&gt;comments can be added directly in the diff;&lt;/li&gt;
&lt;li&gt;the workflow can move toward committing changes without leaving the workspace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes Warp feel more like a development workbench than a traditional terminal window.&lt;/p&gt;
&lt;h3&gt;3. Agentic workflows for open-source collaboration&lt;span class="hx-absolute -hx-mt-20" id="3-agentic-workflows-for-open-source-collaboration"&gt;&lt;/span&gt;
&lt;a href="#3-agentic-workflows-for-open-source-collaboration" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Warp also provides &lt;code&gt;build.warp.dev&lt;/code&gt;, where you can watch Oz agents participate in open-source project workflows, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;issue triage;&lt;/li&gt;
&lt;li&gt;spec writing;&lt;/li&gt;
&lt;li&gt;implementation;&lt;/li&gt;
&lt;li&gt;PR review;&lt;/li&gt;
&lt;li&gt;active agent sessions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means Warp is not only a personal productivity tool. It is also exploring how agents can participate in open-source maintenance and collaboration.&lt;/p&gt;
&lt;h3&gt;4. Open-source client code&lt;span class="hx-absolute -hx-mt-20" id="4-open-source-client-code"&gt;&lt;/span&gt;
&lt;a href="#4-open-source-client-code" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Warp’s client code is open source, and the repository includes contribution documentation.&lt;/p&gt;
&lt;p&gt;The local build flow is roughly:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./script/bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./script/run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./script/presubmit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It is worth reading if you are interested in modern terminals, AI-agent development workflows, or Rust desktop application architecture.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Warp is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;developers who spend a lot of time in the terminal;&lt;/li&gt;
&lt;li&gt;people who want to integrate AI coding assistants into real development workflows;&lt;/li&gt;
&lt;li&gt;users who want commands, code changes, diff review, and commits in one interface;&lt;/li&gt;
&lt;li&gt;teams exploring how AI agents can help with open-source maintenance, issue handling, and PR workflows;&lt;/li&gt;
&lt;li&gt;developers studying Rust, desktop apps, terminals, or developer tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Regular users can download Warp from:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;https://www.warp.dev/download&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Developers can start from the GitHub repository:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;https://github.com/warpdotdev/warp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Local build reference:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./script/bootstrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./script/run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./script/presubmit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Warp’s most interesting point is that &lt;strong&gt;it does not simply add an AI chat panel to a terminal. It puts the AI agent directly into the development workflow.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From task execution and code modification to diff review and committing, Warp tries to combine the tools developers switch between every day into one AI-native workspace. If you already work heavily in the terminal and want to use AI coding tools more systematically, Warp is a project worth watching.&lt;/p&gt;</description></item><item><title>DeepSeek TUI: Turning DeepSeek V4 into a Local Terminal Coding Agent</title><link>https://silenceper.com/en/article/2026-05-08-deepseek-tui-terminal-agent/</link><pubDate>Fri, 08 May 2026 17:20:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-08-deepseek-tui-terminal-agent/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260508/deepseek-tui-screenshot.png" alt="DeepSeek TUI screenshot" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-sentence positioning&lt;span class="hx-absolute -hx-mt-20" id="one-sentence-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-sentence-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;DeepSeek TUI is a terminal-native coding agent built for DeepSeek V4: it brings model reasoning, file editing, shell execution, Git, MCP, sub-agents, LSP diagnostics, and cost tracking into a keyboard-driven TUI workflow.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If many AI coding tools feel like “code completion inside an editor”, DeepSeek TUI feels more like starting a local terminal workspace that can read a project, edit files, run commands, inspect diagnostics, and still keep permissions and cost visible.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;DeepSeek TUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Hmbown/DeepSeek-TUI" target="_blank" rel="noopener"&gt;https://github.com/Hmbown/DeepSeek-TUI&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Terminal coding agent for DeepSeek models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main language&lt;/td&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Target models&lt;/td&gt;
&lt;td&gt;DeepSeek V4, including &lt;code&gt;deepseek-v4-pro&lt;/code&gt; and &lt;code&gt;deepseek-v4-flash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Install options&lt;/td&gt;
&lt;td&gt;npm, Cargo, Homebrew, release binaries, Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platforms&lt;/td&gt;
&lt;td&gt;Linux x64/ARM64, macOS x64/ARM64, Windows x64&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There are many AI coding tools now, but a lot of them share a similar limitation: they are either too chat-oriented, too editor-completion-oriented, or they hide automation behind layers of UI.&lt;/p&gt;
&lt;p&gt;DeepSeek TUI targets a different workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you like working in the terminal;&lt;/li&gt;
&lt;li&gt;you want the agent to understand the current workspace;&lt;/li&gt;
&lt;li&gt;you want it to read files, edit files, run commands, and manage Git;&lt;/li&gt;
&lt;li&gt;you do not want it to freely mutate the project without boundaries;&lt;/li&gt;
&lt;li&gt;you also want to see context usage, token cost, and prefix-cache behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So it is not just a “DeepSeek chat client in the terminal”. It is a TUI agent designed around real coding workflows.&lt;/p&gt;
&lt;h2&gt;Core highlights&lt;span class="hx-absolute -hx-mt-20" id="core-highlights"&gt;&lt;/span&gt;
&lt;a href="#core-highlights" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Native fit for DeepSeek V4&lt;span class="hx-absolute -hx-mt-20" id="1-native-fit-for-deepseek-v4"&gt;&lt;/span&gt;
&lt;a href="#1-native-fit-for-deepseek-v4" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The first notable feature is that DeepSeek TUI is not merely a generic OpenAI-compatible wrapper. It is designed around DeepSeek V4’s capabilities.&lt;/p&gt;
&lt;p&gt;It supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;deepseek-v4-pro&lt;/code&gt; / &lt;code&gt;deepseek-v4-flash&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;1M-token context windows;&lt;/li&gt;
&lt;li&gt;streaming reasoning blocks;&lt;/li&gt;
&lt;li&gt;prefix-cache-aware cost reporting;&lt;/li&gt;
&lt;li&gt;Auto mode that chooses both model and thinking level for each turn.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes it suitable for long-context tasks: reading large repositories, debugging across files, summarizing architecture, and running batched code analysis, not just answering questions about one function.&lt;/p&gt;
&lt;h3&gt;2. Auto mode chooses both model and thinking level&lt;span class="hx-absolute -hx-mt-20" id="2-auto-mode-chooses-both-model-and-thinking-level"&gt;&lt;/span&gt;
&lt;a href="#2-auto-mode-chooses-both-model-and-thinking-level" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;One of the most distinctive ideas in the project is &lt;strong&gt;Auto mode&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Use:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek --model auto&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Or inside the TUI:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/model auto&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Before the real turn runs, Auto mode performs a lightweight routing step and selects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;deepseek-v4-flash&lt;/code&gt; or &lt;code&gt;deepseek-v4-pro&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;thinking level: &lt;code&gt;off&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, or &lt;code&gt;max&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simple turns can stay on Flash with thinking off. More complex debugging, architecture, security review, or release tasks can move to a stronger model or higher reasoning level.&lt;/p&gt;
&lt;p&gt;This is practical because real development work does not need the highest-cost setting on every turn. Letting the tool select a tier per task is more natural than asking the user to manually switch models all the time.&lt;/p&gt;
&lt;h3&gt;3. A full coding-agent workflow inside the terminal&lt;span class="hx-absolute -hx-mt-20" id="3-a-full-coding-agent-workflow-inside-the-terminal"&gt;&lt;/span&gt;
&lt;a href="#3-a-full-coding-agent-workflow-inside-the-terminal" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DeepSeek TUI includes a broad tool suite:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;file operations;&lt;/li&gt;
&lt;li&gt;shell execution;&lt;/li&gt;
&lt;li&gt;Git;&lt;/li&gt;
&lt;li&gt;web search and browsing;&lt;/li&gt;
&lt;li&gt;apply-patch;&lt;/li&gt;
&lt;li&gt;sub-agents;&lt;/li&gt;
&lt;li&gt;MCP servers;&lt;/li&gt;
&lt;li&gt;RLM batched analysis;&lt;/li&gt;
&lt;li&gt;HTTP/SSE runtime API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Its architecture roughly follows this path:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek dispatcher CLI
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ deepseek-tui companion binary
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ ratatui terminal interface
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ async Agent Engine
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ OpenAI-compatible streaming client
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ typed tool registry and streamed tool results&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In other words, it is not just rendering model output in a terminal. It has a real loop for tool calls, session state, task queues, and diagnostic feedback.&lt;/p&gt;
&lt;h3&gt;4. Plan, Agent, and YOLO make permissions explicit&lt;span class="hx-absolute -hx-mt-20" id="4-plan-agent-and-yolo-make-permissions-explicit"&gt;&lt;/span&gt;
&lt;a href="#4-plan-agent-and-yolo-make-permissions-explicit" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Many agent tools leave users unsure: will it edit files, run commands, or do risky operations?&lt;/p&gt;
&lt;p&gt;DeepSeek TUI exposes three modes:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Good for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plan&lt;/td&gt;
&lt;td&gt;read-only exploration and planning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent&lt;/td&gt;
&lt;td&gt;default interactive mode with approval gates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YOLO&lt;/td&gt;
&lt;td&gt;auto-approved mode for trusted or isolated workspaces&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This separation matters. For a new project or unfamiliar repository, start with Plan. After the direction is clear, move to Agent. YOLO should be reserved for trusted, reversible, or isolated environments.&lt;/p&gt;
&lt;h3&gt;5. side-git rollback without touching your project Git&lt;span class="hx-absolute -hx-mt-20" id="5-side-git-rollback-without-touching-your-project-git"&gt;&lt;/span&gt;
&lt;a href="#5-side-git-rollback-without-touching-your-project-git" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DeepSeek TUI also has a useful safety mechanism: workspace rollback.&lt;/p&gt;
&lt;p&gt;It uses side-git snapshots around turns and supports:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/restore&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;as well as turn-level rollback such as &lt;code&gt;revert_turn&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The key point is that this does not depend on or pollute your project’s own &lt;code&gt;.git&lt;/code&gt;. That is useful for AI coding because an agent may perform many consecutive edits. If one turn goes in the wrong direction, a turn-level rollback is often easier than manually reconstructing the state with Git.&lt;/p&gt;
&lt;h3&gt;6. LSP diagnostics feed back into the next reasoning turn&lt;span class="hx-absolute -hx-mt-20" id="6-lsp-diagnostics-feed-back-into-the-next-reasoning-turn"&gt;&lt;/span&gt;
&lt;a href="#6-lsp-diagnostics-feed-back-into-the-next-reasoning-turn" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Another strong feature is &lt;strong&gt;LSP diagnostics&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;After edits, the project can collect errors and warnings through language servers such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rust-analyzer;&lt;/li&gt;
&lt;li&gt;pyright;&lt;/li&gt;
&lt;li&gt;typescript-language-server;&lt;/li&gt;
&lt;li&gt;gopls;&lt;/li&gt;
&lt;li&gt;clangd.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These diagnostics are not only shown to the user. They are fed back into the model context before the next reasoning turn. That means the agent can quickly notice type errors, lint issues, and broken references after editing.&lt;/p&gt;
&lt;p&gt;This makes it closer to a real development environment than a pure text-editing agent.&lt;/p&gt;
&lt;h3&gt;7. Cost tracking and prefix-cache visibility&lt;span class="hx-absolute -hx-mt-20" id="7-cost-tracking-and-prefix-cache-visibility"&gt;&lt;/span&gt;
&lt;a href="#7-cost-tracking-and-prefix-cache-visibility" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DeepSeek TUI tracks more than model responses. It shows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;per-turn token usage;&lt;/li&gt;
&lt;li&gt;session-level token usage;&lt;/li&gt;
&lt;li&gt;estimated cost;&lt;/li&gt;
&lt;li&gt;cache hit / miss information;&lt;/li&gt;
&lt;li&gt;prefix-cache-related telemetry.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For long-context agents, this is important. Real project work costs tokens not only for the latest question, but also for history, file content, tool results, and repeated reasoning. Seeing that cost structure gives users more control.&lt;/p&gt;
&lt;h3&gt;8. Rust binary distribution, not a Node/Python runtime dependency&lt;span class="hx-absolute -hx-mt-20" id="8-rust-binary-distribution-not-a-nodepython-runtime-dependency"&gt;&lt;/span&gt;
&lt;a href="#8-rust-binary-distribution-not-a-nodepython-runtime-dependency" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;DeepSeek TUI is written in Rust and distributed as self-contained binaries.&lt;/p&gt;
&lt;p&gt;You can install it through npm:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g deepseek-tui&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But the npm package acts mainly as an installer that downloads the correct prebuilt Rust binaries. The project also supports:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cargo install deepseek-tui-cli --locked
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cargo install deepseek-tui --locked&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;plus Homebrew, direct release binaries, and Docker.&lt;/p&gt;
&lt;p&gt;For terminal tools, this is a good distribution model: many installation paths, but a simple runtime.&lt;/p&gt;
&lt;h3&gt;9. Practical attention to China and ARM64 environments&lt;span class="hx-absolute -hx-mt-20" id="9-practical-attention-to-china-and-arm64-environments"&gt;&lt;/span&gt;
&lt;a href="#9-practical-attention-to-china-and-arm64-environments" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The README includes mirror-friendly installation notes for mainland China and documents Linux ARM64 prebuilt support.&lt;/p&gt;
&lt;p&gt;For npm, for example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g deepseek-tui --registry&lt;span class="o"&gt;=&lt;/span&gt;https://registry.npmmirror.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Cargo can also be configured with a Tsinghua mirror.&lt;/p&gt;
&lt;p&gt;This may not look like a headline feature, but it directly affects whether users can actually install the tool. For mainland China networks, Raspberry Pi, Graviton, domestic ARM devices, and HarmonyOS PCs, installation quality often decides whether people keep trying.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;DeepSeek TUI is a good fit if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;already use the DeepSeek API and want a terminal coding agent;&lt;/li&gt;
&lt;li&gt;prefer TUI, keyboard-driven, command-line workflows;&lt;/li&gt;
&lt;li&gt;often work with large repositories and multi-file tasks;&lt;/li&gt;
&lt;li&gt;want an AI agent that can run commands and edit files, but still has approvals and rollback;&lt;/li&gt;
&lt;li&gt;want MCP, sub-agents, LSP diagnostics, and task queues in a local development workflow;&lt;/li&gt;
&lt;li&gt;care about token usage and cost visibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you already know tools like Codex CLI, Claude Code, or Gemini CLI, DeepSeek TUI’s value is that it turns DeepSeek V4’s context, reasoning, cache, and cost model into a terminal-native development experience.&lt;/p&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Install:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g deepseek-tui&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Check version:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Start:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Configure API key ahead of time:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek auth &lt;span class="nb"&gt;set&lt;/span&gt; --provider deepseek&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Check auth status:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek auth status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Verify setup:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek doctor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;For the first run, avoid jumping straight into YOLO mode. Start with automatic model routing:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deepseek --model auto&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then ask it to read the project and plan first:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Read this project structure first. Explain the main modules and startup flow. Do not modify files.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After the understanding looks correct, move into implementation or debugging.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;DeepSeek TUI is interesting not because it is “another terminal chat UI”, but because it packages DeepSeek V4 into a fairly complete local agent workflow.&lt;/p&gt;
&lt;p&gt;Its identity is clear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deeply aligned with DeepSeek V4;&lt;/li&gt;
&lt;li&gt;terminal-native TUI;&lt;/li&gt;
&lt;li&gt;Auto mode for model and thinking-level routing;&lt;/li&gt;
&lt;li&gt;Plan / Agent / YOLO permission modes;&lt;/li&gt;
&lt;li&gt;side-git rollback;&lt;/li&gt;
&lt;li&gt;LSP diagnostic feedback;&lt;/li&gt;
&lt;li&gt;MCP, sub-agents, RLM, and HTTP/SSE API;&lt;/li&gt;
&lt;li&gt;visible cost and prefix-cache telemetry.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want a coding agent that is more DeepSeek-native, terminal-first, and control-oriented, DeepSeek TUI is worth trying.&lt;/p&gt;</description></item><item><title>Codex Command Cheat Sheet: From Basic Usage to a Reliable Workflow</title><link>https://silenceper.com/en/article/2026-05-08-codex-cli-commands/</link><pubDate>Fri, 08 May 2026 14:20:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-08-codex-cli-commands/</guid><description>
&lt;blockquote&gt;
&lt;p&gt;This article is for people who have installed Codex CLI but still use it mainly as “ChatGPT inside a terminal”. Codex becomes much more useful when you stop treating it as one long chat and start using its commands to separate one-off questions, persistent sessions, automation, code review, context management, and permission control.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Many people start with Codex by opening a terminal, typing a request, and waiting for an answer. That works, but it quickly creates two problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You are not sure when Codex should edit code directly and when it should only analyze.&lt;/li&gt;
&lt;li&gt;You have to explain the project background, permission boundary, and task goal again and again.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A better way is to understand Codex commands in a few groups:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;startup and login&lt;/li&gt;
&lt;li&gt;interactive sessions&lt;/li&gt;
&lt;li&gt;non-interactive execution&lt;/li&gt;
&lt;li&gt;review and applying changes&lt;/li&gt;
&lt;li&gt;session resume and fork&lt;/li&gt;
&lt;li&gt;permissions, sandboxing, and configuration&lt;/li&gt;
&lt;li&gt;MCP, plugins, and extensions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below is a practical command guide ordered by how often you are likely to use them.&lt;/p&gt;
&lt;h2&gt;1. Install and log in: make sure Codex can run first&lt;span class="hx-absolute -hx-mt-20" id="1-install-and-log-in-make-sure-codex-can-run-first"&gt;&lt;/span&gt;
&lt;a href="#1-install-and-log-in-make-sure-codex-can-run-first" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;You can install Codex CLI with npm or Homebrew:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @openai/codex
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# or&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install --cask codex&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then run:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;On first use, Codex usually asks you to log in. You can sign in with your ChatGPT account or use an API key:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex login&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want to use an API key, pass it through stdin:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;printenv OPENAI_API_KEY &lt;span class="p"&gt;|&lt;/span&gt; codex login --with-api-key&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Check login status:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex login status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Log out:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex logout&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;These commands answer the basic question: can Codex run correctly? Once authentication is ready, the rest of the workflow becomes useful.&lt;/p&gt;
&lt;h2&gt;2. &lt;code&gt;codex&lt;/code&gt;: the main interactive entry point&lt;span class="hx-absolute -hx-mt-20" id="2-codex-the-main-interactive-entry-point"&gt;&lt;/span&gt;
&lt;a href="#2-codex-the-main-interactive-entry-point" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The simplest entry point is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It opens an interactive session. You can describe a task inside it, for example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Review this project startup flow and point out the three most fragile areas.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also pass the first prompt directly:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex &lt;span class="s2"&gt;&amp;#34;Read this repository and summarize its module structure&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use &lt;code&gt;-C&lt;/code&gt; to specify the working directory:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -C /path/to/project &lt;span class="s2"&gt;&amp;#34;Analyze this project&amp;#39;s test structure&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Common options include:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -m gpt-5.5 &lt;span class="s2"&gt;&amp;#34;Refactor this function&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex --search &lt;span class="s2"&gt;&amp;#34;Check the latest docs and see whether this SDK usage is outdated&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -s workspace-write &lt;span class="s2"&gt;&amp;#34;Implement this feature, but only modify files in the current workspace&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;My rule of thumb:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;codex&lt;/code&gt; when you want to work interactively.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;codex exec&lt;/code&gt; when you want a task to run once and finish.&lt;/li&gt;
&lt;li&gt;If the task scope is unclear, ask Codex to analyze and plan before giving it write access.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Slash commands inside an interactive session&lt;span class="hx-absolute -hx-mt-20" id="3-slash-commands-inside-an-interactive-session"&gt;&lt;/span&gt;
&lt;a href="#3-slash-commands-inside-an-interactive-session" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;After entering &lt;code&gt;codex&lt;/code&gt;, type &lt;code&gt;/&lt;/code&gt; to see available slash commands. These commands are more like a session control panel than normal chat messages.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/model&lt;/code&gt;: switch model&lt;span class="hx-absolute -hx-mt-20" id="model-switch-model"&gt;&lt;/span&gt;
&lt;a href="#model-switch-model" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/model&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use it to inspect or change the model for the current session.&lt;/p&gt;
&lt;p&gt;If a task requires stronger reasoning, switch to a stronger model. If you only need a small copy edit or light analysis, a faster model may be enough.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/fast&lt;/code&gt;: toggle fast mode&lt;span class="hx-absolute -hx-mt-20" id="fast-toggle-fast-mode"&gt;&lt;/span&gt;
&lt;a href="#fast-toggle-fast-mode" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/fast on
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/fast off
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/fast status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is useful for small edits, quick questions, and simple code navigation. For complex refactors, cross-module analysis, or production debugging, do not blindly optimize for speed.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/plan&lt;/code&gt;: ask for a plan before editing&lt;span class="hx-absolute -hx-mt-20" id="plan-ask-for-a-plan-before-editing"&gt;&lt;/span&gt;
&lt;a href="#plan-ask-for-a-plan-before-editing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/plan&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Or:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/plan Design a migration plan for this service while keeping the old API compatible&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is one of the most useful commands. Very often you do not want Codex to act immediately; you want it to explain the risk, steps, and impact first.&lt;/p&gt;
&lt;p&gt;Use &lt;code&gt;/plan&lt;/code&gt; for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;core module refactoring&lt;/li&gt;
&lt;li&gt;database schema changes&lt;/li&gt;
&lt;li&gt;API behavior changes&lt;/li&gt;
&lt;li&gt;large frontend changes&lt;/li&gt;
&lt;li&gt;deployment workflow changes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A good habit: ask for a plan first, confirm the direction, then let Codex implement.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/review&lt;/code&gt;: ask Codex to review code&lt;span class="hx-absolute -hx-mt-20" id="review-ask-codex-to-review-code"&gt;&lt;/span&gt;
&lt;a href="#review-ask-codex-to-review-code" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/review&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use it before committing. Codex will focus on possible bugs, edge cases, and regression risks.&lt;/p&gt;
&lt;p&gt;If you want Codex not only to write code but also to catch problems, use this command often.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/diff&lt;/code&gt;: inspect what changed&lt;span class="hx-absolute -hx-mt-20" id="diff-inspect-what-changed"&gt;&lt;/span&gt;
&lt;a href="#diff-inspect-what-changed" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/diff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;When Codex modifies many files, do not commit immediately. Use &lt;code&gt;/diff&lt;/code&gt; to see the changed scope and make sure it did not touch unrelated files.&lt;/p&gt;
&lt;p&gt;Pay extra attention when it changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;configuration files&lt;/li&gt;
&lt;li&gt;test snapshots&lt;/li&gt;
&lt;li&gt;lock files&lt;/li&gt;
&lt;li&gt;frontend, backend, and scripts at the same time&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;/status&lt;/code&gt;: inspect session state&lt;span class="hx-absolute -hx-mt-20" id="status-inspect-session-state"&gt;&lt;/span&gt;
&lt;a href="#status-inspect-session-state" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use this to check the current model, permissions, workspace, and configuration. It is helpful when you wonder why Codex cannot write files, why web search is unavailable, or why the current directory is wrong.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/permissions&lt;/code&gt;: adjust permissions&lt;span class="hx-absolute -hx-mt-20" id="permissions-adjust-permissions"&gt;&lt;/span&gt;
&lt;a href="#permissions-adjust-permissions" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/permissions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Codex&amp;rsquo;s capability depends not only on the model, but also on the permissions you give it.&lt;/p&gt;
&lt;p&gt;Permission controls answer questions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Can it write to the current workspace?&lt;/li&gt;
&lt;li&gt;Can it run commands?&lt;/li&gt;
&lt;li&gt;Does it need confirmation every time?&lt;/li&gt;
&lt;li&gt;Are there additional readable directories?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For important repositories, keep permissions conservative: read first, plan next, then allow writing.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/sandbox-add-read-dir&lt;/code&gt;: add a read-only context directory&lt;span class="hx-absolute -hx-mt-20" id="sandbox-add-read-dir-add-a-read-only-context-directory"&gt;&lt;/span&gt;
&lt;a href="#sandbox-add-read-dir-add-a-read-only-context-directory" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/sandbox-add-read-dir /path/to/another/repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Sometimes a task needs to reference another repository, but you do not want Codex to modify it. Add that path as read-only context.&lt;/p&gt;
&lt;p&gt;Typical use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a new project needs to reference an old implementation&lt;/li&gt;
&lt;li&gt;backend work needs frontend type definitions&lt;/li&gt;
&lt;li&gt;a new service needs to match an old service API&lt;/li&gt;
&lt;li&gt;documentation work needs another reference directory&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;/mcp&lt;/code&gt;: inspect MCP tools&lt;span class="hx-absolute -hx-mt-20" id="mcp-inspect-mcp-tools"&gt;&lt;/span&gt;
&lt;a href="#mcp-inspect-mcp-tools" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/mcp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you configured MCP servers for databases, browsers, internal tools, GitHub, Linear, or other systems, this command shows the tools currently available to Codex.&lt;/p&gt;
&lt;p&gt;MCP lets Codex reach beyond the codebase, which also means permission boundaries matter more. Decide in advance what it can read, write, and execute.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/init&lt;/code&gt;: generate project rules&lt;span class="hx-absolute -hx-mt-20" id="init-generate-project-rules"&gt;&lt;/span&gt;
&lt;a href="#init-generate-project-rules" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is commonly used to initialize project rules such as &lt;code&gt;AGENTS.md&lt;/code&gt;. That file can record conventions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;code style&lt;/li&gt;
&lt;li&gt;test commands&lt;/li&gt;
&lt;li&gt;branch rules&lt;/li&gt;
&lt;li&gt;directory explanations&lt;/li&gt;
&lt;li&gt;paths that should not be changed&lt;/li&gt;
&lt;li&gt;pre-release checks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you use Codex on a long-running project, &lt;code&gt;AGENTS.md&lt;/code&gt; is very important. It reduces the amount of project context you have to repeat in every session.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;/compact&lt;/code&gt;: compress context&lt;span class="hx-absolute -hx-mt-20" id="compact-compress-context"&gt;&lt;/span&gt;
&lt;a href="#compact-compress-context" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/compact&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Long sessions accumulate a lot of context. &lt;code&gt;/compact&lt;/code&gt; summarizes earlier conversation into a shorter form while preserving the main task state.&lt;/p&gt;
&lt;p&gt;Use it when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a task has been running for a long time&lt;/li&gt;
&lt;li&gt;you have looked up many references&lt;/li&gt;
&lt;li&gt;the first half is done and you are moving into implementation&lt;/li&gt;
&lt;li&gt;Codex starts forgetting earlier constraints&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;/clear&lt;/code&gt;, &lt;code&gt;/new&lt;/code&gt;, &lt;code&gt;/quit&lt;/code&gt;&lt;span class="hx-absolute -hx-mt-20" id="clear-new-quit"&gt;&lt;/span&gt;
&lt;a href="#clear-new-quit" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/clear
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/new
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/quit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;These commands clean up or end sessions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/clear&lt;/code&gt;: clear the current context&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/new&lt;/code&gt;: start a new session&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/quit&lt;/code&gt; or &lt;code&gt;/exit&lt;/code&gt;: leave Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not keep unrelated work in one long session. One session should usually have one clear goal.&lt;/p&gt;
&lt;h2&gt;4. &lt;code&gt;codex exec&lt;/code&gt;: use Codex as a scriptable tool&lt;span class="hx-absolute -hx-mt-20" id="4-codex-exec-use-codex-as-a-scriptable-tool"&gt;&lt;/span&gt;
&lt;a href="#4-codex-exec-use-codex-as-a-scriptable-tool" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;codex exec&lt;/code&gt; runs in non-interactive mode. It is useful for automation, batch processing, CI assistance, and log analysis.&lt;/p&gt;
&lt;p&gt;Basic usage:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Summarize this repository structure and list five risk areas&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pipe command output into it:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt; 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Summarize the failing tests and suggest the smallest likely fix&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Analyze logs:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tail -n &lt;span class="m"&gt;200&lt;/span&gt; app.log &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Identify the likely root cause and suggest the next debugging steps&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Generate release notes:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Generate release notes from the last 10 commits&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; tee release-notes.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Write the final message to a file:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Extract project metadata&amp;#34;&lt;/span&gt; -o project-summary.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want Codex inside scripts or automation, &lt;code&gt;exec&lt;/code&gt; is usually better than the interactive TUI.&lt;/p&gt;
&lt;h2&gt;5. &lt;code&gt;codex review&lt;/code&gt;: dedicated code review&lt;span class="hx-absolute -hx-mt-20" id="5-codex-review-dedicated-code-review"&gt;&lt;/span&gt;
&lt;a href="#5-codex-review-dedicated-code-review" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Besides &lt;code&gt;/review&lt;/code&gt; inside a session, Codex also has a standalone review command:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex review&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Review uncommitted changes:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex review --uncommitted&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Review against a base branch:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex review --base main&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Review a specific commit:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex review --commit &amp;lt;SHA&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Add custom review instructions:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex review --uncommitted &lt;span class="s2"&gt;&amp;#34;Focus on concurrency safety, permission checks, and database migration risk&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This is useful before committing, especially after Codex has written code. Let it look at the change again from a reviewer’s perspective.&lt;/p&gt;
&lt;h2&gt;6. &lt;code&gt;resume&lt;/code&gt; and &lt;code&gt;fork&lt;/code&gt;: reuse the context you already built&lt;span class="hx-absolute -hx-mt-20" id="6-resume-and-fork-reuse-the-context-you-already-built"&gt;&lt;/span&gt;
&lt;a href="#6-resume-and-fork-reuse-the-context-you-already-built" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The most valuable part of a Codex session is not a single answer. It is the context Codex has already learned.&lt;/p&gt;
&lt;p&gt;Resume the latest interactive session:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex resume --last&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Resume a specific session:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex resume &amp;lt;SESSION_ID&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Non-interactive mode can also resume:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; resume --last &lt;span class="s2"&gt;&amp;#34;Continue fixing the issues you found&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want to branch from an existing session without polluting the original context:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex fork --last&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use &lt;code&gt;resume&lt;/code&gt; to continue the same task. Use &lt;code&gt;fork&lt;/code&gt; to explore another direction.&lt;/p&gt;
&lt;h2&gt;7. &lt;code&gt;apply&lt;/code&gt;: apply a Codex-generated change&lt;span class="hx-absolute -hx-mt-20" id="7-apply-apply-a-codex-generated-change"&gt;&lt;/span&gt;
&lt;a href="#7-apply-apply-a-codex-generated-change" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you use Codex Cloud or a remote task flow, you may receive a task ID. Apply its diff locally with:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex apply &amp;lt;TASK_ID&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After applying, immediately check three things:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git diff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# or your project&amp;#39;s test command&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git status -sb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Do not treat &lt;code&gt;apply&lt;/code&gt; as an auto-merge button. It only brings the change into your workspace. You still decide whether to accept it.&lt;/p&gt;
&lt;h2&gt;8. Sandbox and approvals: control what Codex can do&lt;span class="hx-absolute -hx-mt-20" id="8-sandbox-and-approvals-control-what-codex-can-do"&gt;&lt;/span&gt;
&lt;a href="#8-sandbox-and-approvals-control-what-codex-can-do" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Codex permissions revolve around two ideas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sandbox: what Codex can access and modify&lt;/li&gt;
&lt;li&gt;approval: when Codex must ask you for confirmation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Common sandbox modes:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -s read-only
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -s workspace-write
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -s danger-full-access&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A practical interpretation:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Good for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;read-only&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;analysis only, no edits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;workspace-write&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;normal project edits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;danger-full-access&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;high risk; only in externally isolated environments&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Common approval policies:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -a on-request
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -a never
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -a untrusted&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Daily recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reading and asking questions: &lt;code&gt;read-only&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Normal feature work: &lt;code&gt;workspace-write&lt;/code&gt; + &lt;code&gt;on-request&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Automation: use &lt;code&gt;never&lt;/code&gt; carefully&lt;/li&gt;
&lt;li&gt;Do not casually use &lt;code&gt;danger-full-access&lt;/code&gt; on an important machine&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;9. Configuration: keep repeated preferences in files&lt;span class="hx-absolute -hx-mt-20" id="9-configuration-keep-repeated-preferences-in-files"&gt;&lt;/span&gt;
&lt;a href="#9-configuration-keep-repeated-preferences-in-files" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Codex configuration usually lives at:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;~/.codex/config.toml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A project can also have:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.codex/config.toml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use &lt;code&gt;-c&lt;/code&gt; to override config for one run:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -c &lt;span class="nv"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;gpt-5.5&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Analyze this module&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use profiles when you have multiple working modes:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex --profile work&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A simple example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;gpt-5.5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;approval_policy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;on-request&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sandbox_mode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;workspace-write&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;web_search&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Put long-term preferences in config files. Put task-specific choices in command-line flags.&lt;/p&gt;
&lt;h2&gt;10. MCP and plugins: connect Codex to external tools&lt;span class="hx-absolute -hx-mt-20" id="10-mcp-and-plugins-connect-codex-to-external-tools"&gt;&lt;/span&gt;
&lt;a href="#10-mcp-and-plugins-connect-codex-to-external-tools" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Manage MCP servers:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex mcp list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex mcp get &amp;lt;name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex mcp add &amp;lt;name&amp;gt; &amp;lt;command&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex mcp remove &amp;lt;name&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If an MCP server requires login:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex mcp login &amp;lt;name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex mcp &lt;span class="nb"&gt;logout&lt;/span&gt; &amp;lt;name&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Plugin entry point:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex plugin marketplace&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;MCP and plugins are not required on day one. A better learning order is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Learn &lt;code&gt;codex&lt;/code&gt; and slash commands.&lt;/li&gt;
&lt;li&gt;Learn &lt;code&gt;codex exec&lt;/code&gt; for automation.&lt;/li&gt;
&lt;li&gt;Add MCP and plugins when you need external systems.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Otherwise, the toolchain and permissions become complicated before your basic workflow is stable.&lt;/p&gt;
&lt;h2&gt;11. A daily workflow that works&lt;span class="hx-absolute -hx-mt-20" id="11-a-daily-workflow-that-works"&gt;&lt;/span&gt;
&lt;a href="#11-a-daily-workflow-that-works" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you are new to Codex, try this rhythm.&lt;/p&gt;
&lt;h3&gt;Step 1: ask it to read the project&lt;span class="hx-absolute -hx-mt-20" id="step-1-ask-it-to-read-the-project"&gt;&lt;/span&gt;
&lt;a href="#step-1-ask-it-to-read-the-project" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex -C /path/to/project &lt;span class="s2"&gt;&amp;#34;Read the project structure, explain the main modules and startup flow, and do not modify files&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 2: ask for a plan&lt;span class="hx-absolute -hx-mt-20" id="step-2-ask-for-a-plan"&gt;&lt;/span&gt;
&lt;a href="#step-2-ask-for-a-plan" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/plan Design an implementation plan for this feature. List files to change, risks, and tests.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 3: confirm, then implement&lt;span class="hx-absolute -hx-mt-20" id="step-3-confirm-then-implement"&gt;&lt;/span&gt;
&lt;a href="#step-3-confirm-then-implement" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Implement the plan with the smallest reasonable change and add necessary tests.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 4: inspect the diff&lt;span class="hx-absolute -hx-mt-20" id="step-4-inspect-the-diff"&gt;&lt;/span&gt;
&lt;a href="#step-4-inspect-the-diff" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/diff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 5: review&lt;span class="hx-absolute -hx-mt-20" id="step-5-review"&gt;&lt;/span&gt;
&lt;a href="#step-5-review" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/review&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Or from the terminal:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;codex review --uncommitted &lt;span class="s2"&gt;&amp;#34;Focus on regression risk and edge cases&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Step 6: run tests and pipe failures back&lt;span class="hx-absolute -hx-mt-20" id="step-6-run-tests-and-pipe-failures-back"&gt;&lt;/span&gt;
&lt;a href="#step-6-run-tests-and-pipe-failures-back" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt; 2&amp;gt;&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Summarize the failure and suggest the smallest fix&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This workflow is better than simply telling Codex to keep editing until everything passes. It separates planning, implementation, review, and verification.&lt;/p&gt;
&lt;h2&gt;12. Common mistakes&lt;span class="hx-absolute -hx-mt-20" id="12-common-mistakes"&gt;&lt;/span&gt;
&lt;a href="#12-common-mistakes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Mistake 1: giving broad permissions too early&lt;span class="hx-absolute -hx-mt-20" id="mistake-1-giving-broad-permissions-too-early"&gt;&lt;/span&gt;
&lt;a href="#mistake-1-giving-broad-permissions-too-early" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;danger-full-access&lt;/code&gt; feels convenient, but it is the easiest way to create damage. Unless you are in a container, temporary machine, or otherwise isolated environment, do not make it the default.&lt;/p&gt;
&lt;h3&gt;Mistake 2: putting every task into one long session&lt;span class="hx-absolute -hx-mt-20" id="mistake-2-putting-every-task-into-one-long-session"&gt;&lt;/span&gt;
&lt;a href="#mistake-2-putting-every-task-into-one-long-session" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Writing a feature, editing copy, debugging production, and refactoring config in the same session will eventually confuse the context. When the task boundary changes, use &lt;code&gt;/new&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Mistake 3: not reading the diff&lt;span class="hx-absolute -hx-mt-20" id="mistake-3-not-reading-the-diff"&gt;&lt;/span&gt;
&lt;a href="#mistake-3-not-reading-the-diff" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;AI coding tools often make “extra” changes. They may reformat files, update dependencies, touch snapshots, or edit configuration. Always inspect the diff after implementation.&lt;/p&gt;
&lt;h3&gt;Mistake 4: no project rules&lt;span class="hx-absolute -hx-mt-20" id="mistake-4-no-project-rules"&gt;&lt;/span&gt;
&lt;a href="#mistake-4-no-project-rules" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Long-running projects need &lt;code&gt;AGENTS.md&lt;/code&gt; or project-level rules. Otherwise you repeat test commands, directory conventions, commit habits, and forbidden paths every time.&lt;/p&gt;
&lt;h3&gt;Mistake 5: treating &lt;code&gt;exec&lt;/code&gt; as autopilot&lt;span class="hx-absolute -hx-mt-20" id="mistake-5-treating-exec-as-autopilot"&gt;&lt;/span&gt;
&lt;a href="#mistake-5-treating-exec-as-autopilot" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;codex exec&lt;/code&gt; is excellent for automation, but it does not remove responsibility. Any task that writes files, sends requests, deploys, or deletes data needs clear permissions and verification.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Codex is not just another AI chat window. It is more useful when you turn coding work into a controllable workflow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use &lt;code&gt;codex&lt;/code&gt; for interactive collaboration&lt;/li&gt;
&lt;li&gt;use slash commands to manage model, plan, permissions, and context&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;codex exec&lt;/code&gt; for automated analysis and batch tasks&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;codex review&lt;/code&gt; before committing&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;resume&lt;/code&gt; and &lt;code&gt;fork&lt;/code&gt; to reuse or branch existing context&lt;/li&gt;
&lt;li&gt;use sandbox, approval, and config files to control risk&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only remember one suggestion: do not let Codex edit immediately. First let it read the project, write a plan, and explain risks. Then open the right permissions for implementation. It feels a little slower, but the result is usually much safer.&lt;/p&gt;</description></item><item><title>Codex Beginner Guide: From Zero to Having AI Read, Edit, and Deliver Code with You</title><link>https://silenceper.com/en/article/2026-05-07-codex-beginner-guide/</link><pubDate>Thu, 07 May 2026 23:39:08 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-07-codex-beginner-guide/</guid><description>
&lt;blockquote&gt;
&lt;p&gt;In this article, &lt;strong&gt;Codex&lt;/strong&gt; refers to OpenAI&amp;rsquo;s current Codex coding agent. It can help you read code, understand unfamiliar repositories, review code, debug problems, and work through Codex App, IDE extensions, CLI, and Web / Cloud entry points.&lt;/p&gt;
&lt;p&gt;The screenshots in this article come from official OpenAI pages or OpenAI&amp;rsquo;s official GitHub repository. The actual UI may change over time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Who This Is For&lt;span class="hx-absolute -hx-mt-20" id="who-this-is-for"&gt;&lt;/span&gt;
&lt;a href="#who-this-is-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;This guide is for people who have never used Codex before, including readers who are not yet comfortable writing code.&lt;/p&gt;
&lt;p&gt;You do not need to understand every AI agent concept first. Start with one simple idea:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Codex is not just an AI chat window. It can enter a code project, read files, edit files, run commands, and show you the resulting diff.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Because Codex can touch project files, the most important beginner habit is not asking it to &amp;ldquo;build a complete project&amp;rdquo; right away. It is learning how to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ask it to read the project first;&lt;/li&gt;
&lt;li&gt;ask it to propose a plan;&lt;/li&gt;
&lt;li&gt;make one small change at a time;&lt;/li&gt;
&lt;li&gt;review the diff;&lt;/li&gt;
&lt;li&gt;run tests;&lt;/li&gt;
&lt;li&gt;keep a Git checkpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Table of Contents&lt;span class="hx-absolute -hx-mt-20" id="table-of-contents"&gt;&lt;/span&gt;
&lt;a href="#table-of-contents" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="#1-what-is-codex" &gt;What Is Codex?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-what-does-codex-look-like" &gt;What Does Codex Look Like?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-five-keywords-beginners-should-know" &gt;Five Keywords Beginners Should Know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-choosing-an-entry-point-app-ide-cli-or-web" &gt;Choosing an Entry Point: App, IDE, CLI, or Web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-first-use-start-with-codex-app" &gt;First Use: Start with Codex App&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-first-prompt-ask-codex-to-read-before-editing" &gt;First Prompt: Ask Codex to Read Before Editing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-first-code-change-change-one-small-thing" &gt;First Code Change: Change One Small Thing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#8-prompt-templates-you-can-copy" &gt;Prompt Templates You Can Copy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#9-safe-usage-permissions-sandboxing-approvals-and-privacy" &gt;Safe Usage: Permissions, Sandboxing, Approvals, and Privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#10-a-7-day-beginner-practice-plan" &gt;A 7-day Beginner Practice Plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#11-advanced-use-agentsmd-to-teach-codex-your-project" &gt;Advanced: Use AGENTS.md to Teach Codex Your Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#12-faq" &gt;FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;1. What Is Codex?&lt;span class="hx-absolute -hx-mt-20" id="1-what-is-codex"&gt;&lt;/span&gt;
&lt;a href="#1-what-is-codex" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Codex is an AI coding assistant that can work inside a code project.&lt;/p&gt;
&lt;p&gt;You can describe tasks in natural language, for example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please explain what this project does.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please find the cause of this bug and make the smallest necessary fix.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please add a unit test for this function.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Codex can read project files, analyze code, edit files when needed, run commands or tests, and then show you the result and the diff.&lt;/p&gt;
&lt;p&gt;Put simply: ChatGPT feels like asking questions in a chat window. Codex feels more like having someone sit inside your project directory and work with you.&lt;/p&gt;
&lt;h3&gt;The Basic Codex Workflow&lt;span class="hx-absolute -hx-mt-20" id="the-basic-codex-workflow"&gt;&lt;/span&gt;
&lt;a href="#the-basic-codex-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;pre class="mermaid hx-mt-6"&gt;
flowchart LR
A[You describe a task] --&amp;gt; B[Codex reads project files]
B --&amp;gt; C[Codex analyzes code and context]
C --&amp;gt; D[Codex proposes a plan or edits directly]
D --&amp;gt; E[Codex runs commands / tests / checks]
E --&amp;gt; F[Codex shows a summary and diff]
F --&amp;gt; G[You review, ask follow-ups, accept, or roll back]
&lt;/pre&gt;&lt;p&gt;The most important part is the last step: &lt;strong&gt;you still review the result&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Codex is powerful, but it is not an automatic production deployer. For beginners, the safest mindset is to treat it as a capable assistant whose work still needs review.&lt;/p&gt;
&lt;h2&gt;2. What Does Codex Look Like?&lt;span class="hx-absolute -hx-mt-20" id="2-what-does-codex-look-like"&gt;&lt;/span&gt;
&lt;a href="#2-what-does-codex-look-like" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Figure 1: Codex Welcome / Login Screen&lt;span class="hx-absolute -hx-mt-20" id="figure-1-codex-welcome--login-screen"&gt;&lt;/span&gt;
&lt;a href="#figure-1-codex-welcome--login-screen" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;When you open Codex App for the first time, you usually see a welcome screen where you can continue with a ChatGPT account or enter an API key.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://images.ctfassets.net/kftzwdyauwt9/6JttRtGUPpCuYGQvs0PCjP/9c54a8e25f76148598e903bed1bddac0/Installer2.png?fm=webp&amp;amp;q=90&amp;amp;w=3840" alt="Codex welcome login screen" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 2: Choose a Project Folder&lt;span class="hx-absolute -hx-mt-20" id="figure-2-choose-a-project-folder"&gt;&lt;/span&gt;
&lt;a href="#figure-2-choose-a-project-folder" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex is not only a chat tool. It usually needs to know which project it should work in. You can choose a project folder or Git repository.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://images.ctfassets.net/kftzwdyauwt9/ke4GwvCgjA68qQlcrZYiH/85d0fdb04d3d0bdd1cf99f16fd82c263/Installer3.png?fm=webp&amp;amp;q=90&amp;amp;w=3840" alt="Codex project picker" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 3: First Task Input&lt;span class="hx-absolute -hx-mt-20" id="figure-3-first-task-input"&gt;&lt;/span&gt;
&lt;a href="#figure-3-first-task-input" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;After choosing a project, you can describe what you want Codex to do. For the first task, ask it to explain the project instead of editing code.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://images.ctfassets.net/kftzwdyauwt9/IWLhh4SZnwPrLYHfYbZYS/99c1f79ceece96c9fa9650bdcb0d2023/Installer4.png?fm=webp&amp;amp;q=90&amp;amp;w=3840" alt="Codex first task input" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 4: Codex App Main Interface&lt;span class="hx-absolute -hx-mt-20" id="figure-4-codex-app-main-interface"&gt;&lt;/span&gt;
&lt;a href="#figure-4-codex-app-main-interface" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex App is a desktop workspace. It can run multiple threads, work with worktrees, use automations, and integrate with Git workflows.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/app/app-screenshot-light.webp" alt="Codex App main interface" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 5: Local / Worktree / Cloud Modes&lt;span class="hx-absolute -hx-mt-20" id="figure-5-local--worktree--cloud-modes"&gt;&lt;/span&gt;
&lt;a href="#figure-5-local--worktree--cloud-modes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;In Codex App, a thread can use different modes: Local, Worktree, or Cloud.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Local: work directly in the current project directory.&lt;/li&gt;
&lt;li&gt;Worktree: isolate changes in a new Git worktree.&lt;/li&gt;
&lt;li&gt;Cloud: run in a configured remote cloud environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/app/modes-light.webp" alt="Codex App mode selector" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 6: Git Commit Panel&lt;span class="hx-absolute -hx-mt-20" id="figure-6-git-commit-panel"&gt;&lt;/span&gt;
&lt;a href="#figure-6-git-commit-panel" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex App includes Git tools. It can show diffs and help with staging, committing, pushing, and creating pull requests.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/app/git-commit-light.webp" alt="Codex Git commit panel" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 7: Integrated Terminal&lt;span class="hx-absolute -hx-mt-20" id="figure-7-integrated-terminal"&gt;&lt;/span&gt;
&lt;a href="#figure-7-integrated-terminal" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Each thread can use an integrated terminal. Common commands include:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git status
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm run lint&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/app/integrated-terminal-light.webp" alt="Codex integrated terminal" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 8: In-app Browser&lt;span class="hx-absolute -hx-mt-20" id="figure-8-in-app-browser"&gt;&lt;/span&gt;
&lt;a href="#figure-8-in-app-browser" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;For frontend projects, Codex can use the in-app browser to preview local pages, inspect page elements, or verify UI fixes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/app/in-app-browser-light.webp" alt="Codex in-app browser" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 9: Codex Extension in VS Code / Cursor / Windsurf&lt;span class="hx-absolute -hx-mt-20" id="figure-9-codex-extension-in-vs-code--cursor--windsurf"&gt;&lt;/span&gt;
&lt;a href="#figure-9-codex-extension-in-vs-code--cursor--windsurf" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;If you already use VS Code, Cursor, Windsurf, or another VS Code-compatible editor, you can use the Codex IDE extension.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cdn.openai.com/devhub/docs/codex-extension.webp" alt="Codex IDE extension entry" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 10: Permission Modes in the IDE&lt;span class="hx-absolute -hx-mt-20" id="figure-10-permission-modes-in-the-ide"&gt;&lt;/span&gt;
&lt;a href="#figure-10-permission-modes-in-the-ide" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The Codex IDE extension supports modes such as Chat, Agent, and Agent Full Access. Beginners should start with Chat or normal Agent mode instead of granting Full Access immediately.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/ide/approval_mode.png" alt="Codex IDE approval mode" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 11: CLI Interface&lt;span class="hx-absolute -hx-mt-20" id="figure-11-cli-interface"&gt;&lt;/span&gt;
&lt;a href="#figure-11-cli-interface" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex CLI runs the coding agent inside your terminal. It is better suited for people who are already comfortable with command-line workflows.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://github.com/openai/codex/raw/main/.github/codex-cli-splash.png" alt="Codex CLI terminal interface" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 12: Requesting Codex Review on GitHub&lt;span class="hx-absolute -hx-mt-20" id="figure-12-requesting-codex-review-on-github"&gt;&lt;/span&gt;
&lt;a href="#figure-12-requesting-codex-review-on-github" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;After Codex Cloud / GitHub integration is configured, you can request a review in a GitHub PR comment with &lt;code&gt;@codex review&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/code-review/review-trigger.png" alt="Requesting Codex review on GitHub" loading="lazy" /&gt;&lt;/p&gt;
&lt;h3&gt;Figure 13: Codex Review Comment in a GitHub PR&lt;span class="hx-absolute -hx-mt-20" id="figure-13-codex-review-comment-in-a-github-pr"&gt;&lt;/span&gt;
&lt;a href="#figure-13-codex-review-comment-in-a-github-pr" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex can leave review comments on a PR and point to specific code locations and issues.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://developers.openai.com/images/codex/code-review/review-example.png" alt="Codex GitHub review example" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;3. Five Keywords Beginners Should Know&lt;span class="hx-absolute -hx-mt-20" id="3-five-keywords-beginners-should-know"&gt;&lt;/span&gt;
&lt;a href="#3-five-keywords-beginners-should-know" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Beginner-friendly meaning&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project folder&lt;/td&gt;
&lt;td&gt;The folder that contains your code&lt;/td&gt;
&lt;td&gt;Codex needs to know where it should work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git&lt;/td&gt;
&lt;td&gt;A version control tool for code&lt;/td&gt;
&lt;td&gt;If something breaks, you can roll back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;diff&lt;/td&gt;
&lt;td&gt;The before-and-after change&lt;/td&gt;
&lt;td&gt;After Codex edits, you review the diff before accepting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PR / Pull Request&lt;/td&gt;
&lt;td&gt;A set of changes submitted for review&lt;/td&gt;
&lt;td&gt;Common in Codex Cloud and GitHub workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sandbox / Approval&lt;/td&gt;
&lt;td&gt;Limits where Codex can work and when it must ask for permission&lt;/td&gt;
&lt;td&gt;Helps beginners avoid accidental deletion or risky commands&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you only remember one word for now, remember &lt;strong&gt;diff&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;After Codex edits files, do not only read its summary. Review the diff, because the diff is what it actually changed.&lt;/p&gt;
&lt;h2&gt;4. Choosing an Entry Point: App, IDE, CLI, or Web&lt;span class="hx-absolute -hx-mt-20" id="4-choosing-an-entry-point-app-ide-cli-or-web"&gt;&lt;/span&gt;
&lt;a href="#4-choosing-an-entry-point-app-ide-cli-or-web" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Codex has several entry points. Beginners often get stuck because they do not know where to start.&lt;/p&gt;
&lt;pre class="mermaid hx-mt-6"&gt;
flowchart TD
A[I want to start using Codex] --&amp;gt; B{Do I already use a code editor?}
B -- Not really --&amp;gt; C[Start with Codex App]
B -- Yes, VS Code / Cursor / Windsurf --&amp;gt; D[Use the Codex IDE extension]
B -- I am comfortable with terminals --&amp;gt; E[Use Codex CLI]
A --&amp;gt; F{Is the project on GitHub?}
F -- Yes, and I want background tasks or PRs --&amp;gt; G[Use Codex Web / Cloud]
F -- No, mainly local folders --&amp;gt; C
&lt;/pre&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Entry point&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Main use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codex App&lt;/td&gt;
&lt;td&gt;Beginners&lt;/td&gt;
&lt;td&gt;Desktop app, choose a project, then send tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE extension&lt;/td&gt;
&lt;td&gt;People already using VS Code, Cursor, Windsurf, or JetBrains&lt;/td&gt;
&lt;td&gt;Use Codex from the editor sidebar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;People comfortable with terminals&lt;/td&gt;
&lt;td&gt;Let Codex read, edit, and run a project from the terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web / Cloud&lt;/td&gt;
&lt;td&gt;GitHub projects that need background work&lt;/td&gt;
&lt;td&gt;Run tasks in the cloud, review diffs, create PRs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;My recommendation is simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Beginners should start with Codex App. Developers who already live in an editor can use the IDE extension. Use CLI after you are comfortable with terminals. Use Web / Cloud when a GitHub project needs background tasks.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;5. First Use: Start with Codex App&lt;span class="hx-absolute -hx-mt-20" id="5-first-use-start-with-codex-app"&gt;&lt;/span&gt;
&lt;a href="#5-first-use-start-with-codex-app" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;5.1 Account and Plan&lt;span class="hx-absolute -hx-mt-20" id="51-account-and-plan"&gt;&lt;/span&gt;
&lt;a href="#51-account-and-plan" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex visibility, quotas, and available features can depend on your ChatGPT plan, workspace permissions, and login method.&lt;/p&gt;
&lt;p&gt;If you use Codex App, you can usually log in with a ChatGPT account or an OpenAI API key. When using an API key, some Cloud-related features may be unavailable.&lt;/p&gt;
&lt;h3&gt;5.2 Download, Open, and Log In&lt;span class="hx-absolute -hx-mt-20" id="52-download-open-and-log-in"&gt;&lt;/span&gt;
&lt;a href="#52-download-open-and-log-in" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;For beginners, use this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install Codex App.&lt;/li&gt;
&lt;li&gt;Log in with your ChatGPT account.&lt;/li&gt;
&lt;li&gt;Choose a practice project folder.&lt;/li&gt;
&lt;li&gt;Use Local mode for the first task.&lt;/li&gt;
&lt;li&gt;For the first task, ask Codex to explain the project instead of editing code.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;5.3 Recommended First Prompt&lt;span class="hx-absolute -hx-mt-20" id="53-recommended-first-prompt"&gt;&lt;/span&gt;
&lt;a href="#53-recommended-first-prompt" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please do not modify any files yet. Explain this project in English:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. What does this project roughly do?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. What are the main folders for?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Where might the entry points be?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. If I want to run it, what commands would I usually execute?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. What are you unsure about? Say &amp;#34;not sure&amp;#34; explicitly instead of guessing.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The key idea is: &lt;strong&gt;read first, do not edit yet&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;6. First Prompt: Ask Codex to Read Before Editing&lt;span class="hx-absolute -hx-mt-20" id="6-first-prompt-ask-codex-to-read-before-editing"&gt;&lt;/span&gt;
&lt;a href="#6-first-prompt-ask-codex-to-read-before-editing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The most common beginner mistake is starting with prompts like:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Refactor the whole project for me.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Build a complete website for me.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Fix all bugs.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;These tasks are too broad. It will be hard for you to judge whether Codex did the right thing.&lt;/p&gt;
&lt;p&gt;A safer sequence looks like this:&lt;/p&gt;
&lt;pre class="mermaid hx-mt-6"&gt;
flowchart TD
A[Step 1: Explain the project without editing files] --&amp;gt; B[Step 2: Ask Codex for a plan]
B --&amp;gt; C[Step 3: Change one small thing]
C --&amp;gt; D[Step 4: Run checks or explain why checks cannot run]
D --&amp;gt; E[Step 5: Review the diff]
E --&amp;gt; F[Step 6: Accept, ask follow-ups, or roll back]
&lt;/pre&gt;&lt;p&gt;For the first task, you can ask:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please do not modify files yet. Explain the structure of this project and tell me which files a beginner should read first.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After you confirm that Codex understands the project well enough, move to the next step.&lt;/p&gt;
&lt;h2&gt;7. First Code Change: Change One Small Thing&lt;span class="hx-absolute -hx-mt-20" id="7-first-code-change-change-one-small-thing"&gt;&lt;/span&gt;
&lt;a href="#7-first-code-change-change-one-small-thing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;After you are comfortable with Codex&amp;rsquo;s project understanding, ask it to make a tiny change.&lt;/p&gt;
&lt;p&gt;A good first target is the README:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please only modify README.md and add a section named &amp;#34;How beginners can start this project&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not modify any other file.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not install new dependencies.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not change code.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- After editing, tell me what you changed.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- If the project does not clearly document startup commands, say &amp;#34;not sure&amp;#34; instead of inventing commands.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After Codex finishes, check two things:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git status
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git diff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you use Codex App, you can also review the changes in the review pane or diff pane.&lt;/p&gt;
&lt;h3&gt;What Should You Look for in the Diff?&lt;span class="hx-absolute -hx-mt-20" id="what-should-you-look-for-in-the-diff"&gt;&lt;/span&gt;
&lt;a href="#what-should-you-look-for-in-the-diff" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Did Codex change files you did not allow it to change?&lt;/li&gt;
&lt;li&gt;Did it add dependencies you do not recognize?&lt;/li&gt;
&lt;li&gt;Did it delete important configuration?&lt;/li&gt;
&lt;li&gt;Does the text or code match your request?&lt;/li&gt;
&lt;li&gt;Does the diff actually support what Codex claimed in its summary?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a beginner, you do not need to understand every line of code immediately. Start by checking which files were changed. That alone prevents many problems.&lt;/p&gt;
&lt;h2&gt;8. Prompt Templates You Can Copy&lt;span class="hx-absolute -hx-mt-20" id="8-prompt-templates-you-can-copy"&gt;&lt;/span&gt;
&lt;a href="#8-prompt-templates-you-can-copy" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;8.1 Universal Structure&lt;span class="hx-absolute -hx-mt-20" id="81-universal-structure"&gt;&lt;/span&gt;
&lt;a href="#81-universal-structure" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Goal:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What do I want you to complete?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Context:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What files, errors, reproduction steps, or screenshots are relevant?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Scope:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Which files may you edit? Which files must you not edit?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Constraints:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What must you avoid? For example: do not add dependencies, do not change the database schema, do not change API fields.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Verification:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;What commands should you run after finishing? If you cannot run them, explain why.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Output:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;List the changed files, verification result, risks, and suggested next steps.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;This structure is simple, but useful. It reduces guessing.&lt;/p&gt;
&lt;h3&gt;8.2 Project Reading Template&lt;span class="hx-absolute -hx-mt-20" id="82-project-reading-template"&gt;&lt;/span&gt;
&lt;a href="#82-project-reading-template" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please do not modify files yet. Help me understand this project:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. What does this project do?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. What is the tech stack?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Where are the entry points?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. What are the main directories responsible for?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. In what order should a beginner read the code?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6. What are you unsure about?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;8.3 Bug Fix Template&lt;span class="hx-absolute -hx-mt-20" id="83-bug-fix-template"&gt;&lt;/span&gt;
&lt;a href="#83-bug-fix-template" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I am running into a bug. Please help me find and fix it.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Symptom:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Paste the error or describe the behavior]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reproduction steps:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. [Step one]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. [Step two]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. [Step three]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- First explain what you think is causing it.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Make the smallest necessary change.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not add dependencies unless you ask me first.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- After fixing, run relevant tests or explain why you cannot run them.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Finally, list changed files and risks.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;8.4 Feature Template&lt;span class="hx-absolute -hx-mt-20" id="84-feature-template"&gt;&lt;/span&gt;
&lt;a href="#84-feature-template" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please help me add a small feature.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Feature goal:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Describe the feature]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Scope:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- You may modify: [files/directories]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not modify: [files/directories]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Start with a short plan.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Keep each step small.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Follow the existing code style.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- If you need a new dependency, stop and ask me first.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Run relevant checks after finishing.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Output:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- What files changed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- How to verify
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- What I still need to manually check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;8.5 Code Review Template&lt;span class="hx-absolute -hx-mt-20" id="85-code-review-template"&gt;&lt;/span&gt;
&lt;a href="#85-code-review-template" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please review the current uncommitted changes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Focus on:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Obvious bugs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. Missing edge cases
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Possible regressions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. Security or performance risks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. Whether tests should be added
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- List high-risk issues first.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Then list medium- and low-risk suggestions.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not modify files unless I explicitly ask you to.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;8.6 UI Work with Screenshots Template&lt;span class="hx-absolute -hx-mt-20" id="86-ui-work-with-screenshots-template"&gt;&lt;/span&gt;
&lt;a href="#86-ui-work-with-screenshots-template" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex supports image input. For UI tasks, you can attach screenshots, mockups, or error screenshots as context.&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please implement a page based on the attached screenshot.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Use the current project&amp;#39;s existing tech stack.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Match the layout, spacing, and type hierarchy as closely as possible.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not add a new UI library unless you ask me first.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Add only the necessary components.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- After finishing, tell me which command to run and which URL to open to view it.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;9. Safe Usage: Permissions, Sandboxing, Approvals, and Privacy&lt;span class="hx-absolute -hx-mt-20" id="9-safe-usage-permissions-sandboxing-approvals-and-privacy"&gt;&lt;/span&gt;
&lt;a href="#9-safe-usage-permissions-sandboxing-approvals-and-privacy" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Codex can read files, edit files, and run commands, so safety boundaries matter.&lt;/p&gt;
&lt;h3&gt;9.1 Recommended Beginner Permissions&lt;span class="hx-absolute -hx-mt-20" id="91-recommended-beginner-permissions"&gt;&lt;/span&gt;
&lt;a href="#91-recommended-beginner-permissions" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;pre class="mermaid hx-mt-6"&gt;
flowchart LR
A[Chat / Read-only&amp;lt;br/&amp;gt;Read, explain, plan] --&amp;gt; B[Agent / Auto&amp;lt;br/&amp;gt;Read, write, and run commands in workspace]
B --&amp;gt; C[Full Access&amp;lt;br/&amp;gt;Broader permissions and network access]
A -. Best for beginners .-&amp;gt; A
B -. Good for small tasks .-&amp;gt; B
C -. Use carefully .-&amp;gt; C
&lt;/pre&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Good for&lt;/th&gt;
&lt;th&gt;Beginner recommendation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat / Read-only&lt;/td&gt;
&lt;td&gt;Explaining projects, asking questions, writing plans&lt;/td&gt;
&lt;td&gt;Use this first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent / Auto&lt;/td&gt;
&lt;td&gt;Small file edits and tests&lt;/td&gt;
&lt;td&gt;Review the diff before accepting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full Access&lt;/td&gt;
&lt;td&gt;Cross-directory, networked, or complex tasks&lt;/td&gt;
&lt;td&gt;Do not use as the default when starting&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;9.2 How to Handle Approval Prompts&lt;span class="hx-absolute -hx-mt-20" id="92-how-to-handle-approval-prompts"&gt;&lt;/span&gt;
&lt;a href="#92-how-to-handle-approval-prompts" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;When Codex asks for approval, first read what it wants to do.&lt;/p&gt;
&lt;p&gt;Be careful with actions like:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl ... &lt;span class="p"&gt;|&lt;/span&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install some-package-you-do-not-understand&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accessing system directories or directories outside the project&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you are unsure, choose the narrower approval option or reject it and ask Codex to explain why the command is needed.&lt;/p&gt;
&lt;h3&gt;9.3 Do Not Give Codex These Secrets&lt;span class="hx-absolute -hx-mt-20" id="93-do-not-give-codex-these-secrets"&gt;&lt;/span&gt;
&lt;a href="#93-do-not-give-codex-these-secrets" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Do not paste the following directly into your project, prompt, logs, or screenshots:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API keys&lt;/li&gt;
&lt;li&gt;Database passwords&lt;/li&gt;
&lt;li&gt;Production tokens&lt;/li&gt;
&lt;li&gt;Customer private data&lt;/li&gt;
&lt;li&gt;Sensitive personal information&lt;/li&gt;
&lt;li&gt;Internal company material you are not allowed to share&lt;/li&gt;
&lt;li&gt;Production database connection strings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be especially careful with error logs. They may contain tokens, cookies, URL parameters, or database connection information. Scan them before pasting.&lt;/p&gt;
&lt;h3&gt;9.4 Create a Git Checkpoint Before Editing&lt;span class="hx-absolute -hx-mt-20" id="94-create-a-git-checkpoint-before-editing"&gt;&lt;/span&gt;
&lt;a href="#94-create-a-git-checkpoint-before-editing" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Inside the project directory, run:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git status
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit -m &lt;span class="s2"&gt;&amp;#34;checkpoint before codex task&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After Codex edits files, run:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git status
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git diff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If something goes wrong, Git gives you a way back.&lt;/p&gt;
&lt;p&gt;If you do not know Git yet, start with this rule: &lt;strong&gt;do not let Codex make large changes in an important production project without a backup.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;10. A 7-day Beginner Practice Plan&lt;span class="hx-absolute -hx-mt-20" id="10-a-7-day-beginner-practice-plan"&gt;&lt;/span&gt;
&lt;a href="#10-a-7-day-beginner-practice-plan" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Day 1: Read the Project Only&lt;span class="hx-absolute -hx-mt-20" id="day-1-read-the-project-only"&gt;&lt;/span&gt;
&lt;a href="#day-1-read-the-project-only" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please do not modify files. Explain what this project does, its directory structure, entry points, and how to run it.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Goal: understand what the project roughly is.&lt;/p&gt;
&lt;h3&gt;Day 2: Ask Codex to Write a Project Overview&lt;span class="hx-absolute -hx-mt-20" id="day-2-ask-codex-to-write-a-project-overview"&gt;&lt;/span&gt;
&lt;a href="#day-2-ask-codex-to-write-a-project-overview" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Based on your understanding of the project, draft docs/project-overview.md.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Write for beginners.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Explain the main directories and startup steps.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not modify code files.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Goal: practice asking Codex to generate documentation.&lt;/p&gt;
&lt;h3&gt;Day 3: Modify Only the README&lt;span class="hx-absolute -hx-mt-20" id="day-3-modify-only-the-readme"&gt;&lt;/span&gt;
&lt;a href="#day-3-modify-only-the-readme" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please only modify README.md and add installation and startup instructions.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do not modify any other file.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Goal: practice reviewing diffs.&lt;/p&gt;
&lt;h3&gt;Day 4: Fix a Small Bug&lt;span class="hx-absolute -hx-mt-20" id="day-4-fix-a-small-bug"&gt;&lt;/span&gt;
&lt;a href="#day-4-fix-a-small-bug" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Here is the error: [paste error]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reproduction steps:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. [Step one]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. [Step two]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. [Step three]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please find the cause and make the smallest fix. Run relevant checks after fixing.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Goal: learn to provide symptoms and reproduction steps.&lt;/p&gt;
&lt;h3&gt;Day 5: Add a Test&lt;span class="hx-absolute -hx-mt-20" id="day-5-add-a-test"&gt;&lt;/span&gt;
&lt;a href="#day-5-add-a-test" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please add a minimal test for the issue we just fixed.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- First explain what the test covers.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Do not do a broad refactor.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Run the test after finishing.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Goal: do not only ask Codex to write code. Ask it to verify code.&lt;/p&gt;
&lt;h3&gt;Day 6: Ask Codex to Review Your Changes&lt;span class="hx-absolute -hx-mt-20" id="day-6-ask-codex-to-review-your-changes"&gt;&lt;/span&gt;
&lt;a href="#day-6-ask-codex-to-review-your-changes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please review the current uncommitted changes. Focus on bugs, edge cases, regression risk, and whether tests are needed.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Do not modify files yet. Only output review comments.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Goal: use Codex as a second pair of eyes.&lt;/p&gt;
&lt;h3&gt;Day 7: Try Worktree or Cloud&lt;span class="hx-absolute -hx-mt-20" id="day-7-try-worktree-or-cloud"&gt;&lt;/span&gt;
&lt;a href="#day-7-try-worktree-or-cloud" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please try implementing this small feature in an isolated branch or worktree: [feature description]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Requirements:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Start with a plan.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Keep the change small.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- After finishing, explain how to verify it.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Goal: learn how to try more complex changes in an isolated environment.&lt;/p&gt;
&lt;h2&gt;11. Advanced: Use AGENTS.md to Teach Codex Your Project&lt;span class="hx-absolute -hx-mt-20" id="11-advanced-use-agentsmd-to-teach-codex-your-project"&gt;&lt;/span&gt;
&lt;a href="#11-advanced-use-agentsmd-to-teach-codex-your-project" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;When you use Codex often, consider adding an &lt;code&gt;AGENTS.md&lt;/code&gt; file at the project root.&lt;/p&gt;
&lt;p&gt;Think of it as a project guide written for AI agents. Codex reads these instructions before starting work, which helps it follow your team&amp;rsquo;s conventions.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;# AGENTS.md
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gh"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Project Conventions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; After modifying JavaScript files, run npm test.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; Do not add production dependencies unless the user confirms first.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;-&lt;/span&gt; When modifying shared utility functions, update docs as well.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- In the final summary, include changed files, verification, and risks.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Good things to put in &lt;code&gt;AGENTS.md&lt;/code&gt; include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;startup commands;&lt;/li&gt;
&lt;li&gt;test, build, and lint commands;&lt;/li&gt;
&lt;li&gt;code style;&lt;/li&gt;
&lt;li&gt;directories that must not be touched;&lt;/li&gt;
&lt;li&gt;release process;&lt;/li&gt;
&lt;li&gt;PR requirements;&lt;/li&gt;
&lt;li&gt;database and API compatibility rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A useful rule: &lt;strong&gt;when you remind Codex of the same thing twice, consider putting it in AGENTS.md.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;12. FAQ&lt;span class="hx-absolute -hx-mt-20" id="12-faq"&gt;&lt;/span&gt;
&lt;a href="#12-faq" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Q1: Can I use Codex if I do not know how to code?&lt;span class="hx-absolute -hx-mt-20" id="q1-can-i-use-codex-if-i-do-not-know-how-to-code"&gt;&lt;/span&gt;
&lt;a href="#q1-can-i-use-codex-if-i-do-not-know-how-to-code" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Yes, but start with &amp;ldquo;explain the project&amp;rdquo;, &amp;ldquo;organize documentation&amp;rdquo;, &amp;ldquo;read this error&amp;rdquo;, and &amp;ldquo;write a learning path&amp;rdquo;. Do not begin with broad refactors.&lt;/p&gt;
&lt;p&gt;You can use Codex as a learning assistant, but after it edits files, you still need to review the diff and verify the result.&lt;/p&gt;
&lt;h3&gt;Q2: Should I use Codex App, IDE, CLI, or Web?&lt;span class="hx-absolute -hx-mt-20" id="q2-should-i-use-codex-app-ide-cli-or-web"&gt;&lt;/span&gt;
&lt;a href="#q2-should-i-use-codex-app-ide-cli-or-web" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Beginners should start with Codex App. If you already use VS Code, Cursor, or Windsurf every day, use the IDE extension. Use CLI after you are comfortable with terminals. Use Web / Cloud when a GitHub project needs background work or PR creation.&lt;/p&gt;
&lt;h3&gt;Q3: What if Codex makes the wrong change?&lt;span class="hx-absolute -hx-mt-20" id="q3-what-if-codex-makes-the-wrong-change"&gt;&lt;/span&gt;
&lt;a href="#q3-what-if-codex-makes-the-wrong-change" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Review the diff first. If you do not like it, ask Codex to adjust the change. If the project becomes messy, roll back with Git.&lt;/p&gt;
&lt;p&gt;If you have not learned Git yet, practice on a sample project before letting Codex make broad changes in an important project.&lt;/p&gt;
&lt;h3&gt;Q4: Codex asks me to approve a command. Should I allow it?&lt;span class="hx-absolute -hx-mt-20" id="q4-codex-asks-me-to-approve-a-command-should-i-allow-it"&gt;&lt;/span&gt;
&lt;a href="#q4-codex-asks-me-to-approve-a-command-should-i-allow-it" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Only approve commands you understand.&lt;/p&gt;
&lt;p&gt;Be especially careful with deleting files, installing dependencies, accessing directories outside the project, downloading from the network, or running scripts.&lt;/p&gt;
&lt;p&gt;If you do not understand the command, ask:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please explain what this command does, why it is necessary, and whether there is a safer alternative.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Q5: Do I need an API key?&lt;span class="hx-absolute -hx-mt-20" id="q5-do-i-need-an-api-key"&gt;&lt;/span&gt;
&lt;a href="#q5-do-i-need-an-api-key" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Not always.&lt;/p&gt;
&lt;p&gt;Codex App can use a ChatGPT account or an OpenAI API key. When using an API key, some features such as cloud threads may be unavailable.&lt;/p&gt;
&lt;h3&gt;Q6: Can Codex deploy directly for me?&lt;span class="hx-absolute -hx-mt-20" id="q6-can-codex-deploy-directly-for-me"&gt;&lt;/span&gt;
&lt;a href="#q6-can-codex-deploy-directly-for-me" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Do not let Codex operate production without human review.&lt;/p&gt;
&lt;p&gt;A safer flow is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Small task
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Review diff
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Run tests
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Review risks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Commit / PR
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Human confirmation before release&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Final Summary&lt;span class="hx-absolute -hx-mt-20" id="final-summary"&gt;&lt;/span&gt;
&lt;a href="#final-summary" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The right way to start with Codex is not:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Build the whole project for me in one shot.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;It is:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Explain the project first
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Propose a plan
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Make one small change
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Review the diff
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Run tests
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-&amp;gt; Iterate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Keep tasks small, keep permissions tight, and make verification explicit. That is how you can safely start using Codex to read code, edit code, and review code from day one.&lt;/p&gt;
&lt;h2&gt;References&lt;span class="hx-absolute -hx-mt-20" id="references"&gt;&lt;/span&gt;
&lt;a href="#references" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/cloud" target="_blank" rel="noopener"&gt;Web - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/prompting" target="_blank" rel="noopener"&gt;Prompting - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/codex/get-started/" target="_blank" rel="noopener"&gt;Get started with Codex | OpenAI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/app" target="_blank" rel="noopener"&gt;App - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/quickstart" target="_blank" rel="noopener"&gt;Quickstart - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/app/features" target="_blank" rel="noopener"&gt;Features - Codex app | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/ide" target="_blank" rel="noopener"&gt;IDE extension - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/ide/features" target="_blank" rel="noopener"&gt;Features - Codex IDE | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/cli" target="_blank" rel="noopener"&gt;CLI - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/integrations/github" target="_blank" rel="noopener"&gt;Code review in GitHub - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.openai.com/en/articles/11369540-using-codex-with-your-chatgpt-plan" target="_blank" rel="noopener"&gt;Using Codex with your ChatGPT plan | OpenAI Help Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/cli/features" target="_blank" rel="noopener"&gt;Features - Codex CLI | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/agent-approvals-security" target="_blank" rel="noopener"&gt;Agent approvals &amp;amp; security - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.openai.com/en/articles/5722486-how-your-data-is-used-to-improve-model-performance" target="_blank" rel="noopener"&gt;How your data is used to improve model performance | OpenAI Help Center&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/guides/agents-md" target="_blank" rel="noopener"&gt;Custom instructions with AGENTS.md - Codex | OpenAI Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>How to Apply for ChatGPT Pro for Free: OpenAI Codex for Open Source Guide</title><link>https://silenceper.com/en/article/2026-05-07-free-chatgpt-pro-codex-for-oss/</link><pubDate>Thu, 07 May 2026 22:30:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-07-free-chatgpt-pro-codex-for-oss/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260507/codex-for-oss-official-page-screenshot.png" alt="OpenAI Developers Codex for Open Source official page screenshot" loading="lazy" /&gt;&lt;/p&gt;
&lt;p&gt;Many people search for “how to use ChatGPT for free.” A more accurate version of that question is: &lt;strong&gt;how can eligible open-source maintainers apply for official ChatGPT Pro benefits through an OpenAI program?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ChatGPT already has a free tier. If you are not maintaining an open-source project, this is not a general “free Pro giveaway” guide.&lt;/p&gt;
&lt;p&gt;But if you are an open-source maintainer, OpenAI’s &lt;a href="https://developers.openai.com/community/codex-for-oss" target="_blank" rel="noopener"&gt;Codex for Open Source&lt;/a&gt; program gives you an official path to apply. According to OpenAI’s official page, maintainers can apply for API credits, six months of ChatGPT Pro with Codex, and conditional access to Codex Security.&lt;/p&gt;
&lt;p&gt;This article is based on the OpenAI pages available on May 7, 2026. Program rules and forms may change, so check the official pages before applying.&lt;/p&gt;
&lt;h2&gt;One-line Summary&lt;span class="hx-absolute -hx-mt-20" id="one-line-summary"&gt;&lt;/span&gt;
&lt;a href="#one-line-summary" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Codex for Open Source is not a free ChatGPT Pro campaign for everyone. It is an OpenAI support program for open-source maintainers.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you maintain a public open-source project and can clearly explain the project’s value, your maintainer role, and how AI tools will support real maintenance work, it is worth applying.&lt;/p&gt;
&lt;h2&gt;What Is Codex for Open Source?&lt;span class="hx-absolute -hx-mt-20" id="what-is-codex-for-open-source"&gt;&lt;/span&gt;
&lt;a href="#what-is-codex-for-open-source" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href="https://developers.openai.com/community/codex-for-oss" target="_blank" rel="noopener"&gt;Codex for Open Source&lt;/a&gt; is an OpenAI program designed to support maintainers behind important open-source software.&lt;/p&gt;
&lt;p&gt;OpenAI describes open-source maintainers as people who often carry significant responsibility behind the scenes: reviewing pull requests, triaging issues, maintaining releases, and preserving security and code quality. The program is meant to reduce coding and review load with tools built for real maintenance workflows.&lt;/p&gt;
&lt;p&gt;The official page currently lists these possible benefits:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;th&gt;Best suited for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Six months of ChatGPT Pro with Codex&lt;/td&gt;
&lt;td&gt;Day-to-day coding, code understanding, issue analysis, PR review, documentation, and maintainer workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API credits&lt;/td&gt;
&lt;td&gt;PR review automation, maintainer automation, release workflows, and open-source project bots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex Security&lt;/td&gt;
&lt;td&gt;Deeper security-related analysis for eligible repositories&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;These benefits are not guaranteed. OpenAI’s program terms say approved applicants may receive one or more benefits, as determined by OpenAI. Availability, duration, scope, and timing may vary by applicant, repository, or use case.&lt;/p&gt;
&lt;h2&gt;Who Should Apply?&lt;span class="hx-absolute -hx-mt-20" id="who-should-apply"&gt;&lt;/span&gt;
&lt;a href="#who-should-apply" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The program is mainly for the following groups.&lt;/p&gt;
&lt;h3&gt;1. Primary or Core Maintainers&lt;span class="hx-absolute -hx-mt-20" id="1-primary-or-core-maintainers"&gt;&lt;/span&gt;
&lt;a href="#1-primary-or-core-maintainers" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;If you are the primary maintainer or a core maintainer of an open-source project, and you regularly handle issues, pull requests, releases, security fixes, documentation, tests, or community maintenance, you are a strong fit.&lt;/p&gt;
&lt;p&gt;The application form asks you to describe your role, so be specific. Do not just say you are a user or a fan of the project. Explain what maintenance responsibilities you actually hold.&lt;/p&gt;
&lt;h3&gt;2. Maintainers of Public Projects with Real Usage&lt;span class="hx-absolute -hx-mt-20" id="2-maintainers-of-public-projects-with-real-usage"&gt;&lt;/span&gt;
&lt;a href="#2-maintainers-of-public-projects-with-real-usage" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The official page encourages core maintainers or people who run widely used public projects to apply.&lt;/p&gt;
&lt;p&gt;That does not mean only projects with huge star counts are eligible. If your project plays an important role in a language ecosystem, framework ecosystem, plugin ecosystem, infrastructure layer, or developer tooling workflow, explain why it matters.&lt;/p&gt;
&lt;p&gt;Useful proof points include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub stars, forks, and contributors&lt;/li&gt;
&lt;li&gt;npm, PyPI, Maven, crates.io, Docker Hub, or other package download numbers&lt;/li&gt;
&lt;li&gt;downstream dependencies, user stories, or production usage&lt;/li&gt;
&lt;li&gt;PR, issue, and release activity over the last three to six months&lt;/li&gt;
&lt;li&gt;your own work on review, triage, releases, security fixes, or documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Maintainers with a Clear AI Workflow&lt;span class="hx-absolute -hx-mt-20" id="3-maintainers-with-a-clear-ai-workflow"&gt;&lt;/span&gt;
&lt;a href="#3-maintainers-with-a-clear-ai-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Your application will be more convincing if you can describe how Codex or API credits will be used in open-source maintenance.&lt;/p&gt;
&lt;p&gt;Good examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;first-pass pull request review&lt;/li&gt;
&lt;li&gt;change summaries&lt;/li&gt;
&lt;li&gt;test suggestions&lt;/li&gt;
&lt;li&gt;release note generation&lt;/li&gt;
&lt;li&gt;maintainer scripts&lt;/li&gt;
&lt;li&gt;issue classification and triage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A strong application should not simply say, “I want free ChatGPT Pro.” It should explain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;why the project deserves support&lt;/li&gt;
&lt;li&gt;what maintenance role you hold&lt;/li&gt;
&lt;li&gt;how ChatGPT Pro, Codex, or API credits will help with open-source work&lt;/li&gt;
&lt;li&gt;how maintainers will review AI output before acting on it&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What Should You Prepare Before Applying?&lt;span class="hx-absolute -hx-mt-20" id="what-should-you-prepare-before-applying"&gt;&lt;/span&gt;
&lt;a href="#what-should-you-prepare-before-applying" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The official OpenAI application form currently asks for the following information:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First name / Last name&lt;/td&gt;
&lt;td&gt;Your name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;The email associated with your ChatGPT account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub username&lt;/td&gt;
&lt;td&gt;Your GitHub profile visibility should be public&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub repository URL&lt;/td&gt;
&lt;td&gt;The repository should be public&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintainer role&lt;/td&gt;
&lt;td&gt;Whether you are a primary maintainer or core maintainer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Why does this repository qualify?&lt;/td&gt;
&lt;td&gt;Include GitHub stars, monthly downloads, or ecosystem importance, within 500 characters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I&amp;rsquo;m interested in&lt;/td&gt;
&lt;td&gt;Codex Security and/or API credits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI Organization ID&lt;/td&gt;
&lt;td&gt;The form provides a link to find it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How will you use API credits for your project?&lt;/td&gt;
&lt;td&gt;Explain how credits will support project maintenance, within 500 characters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anything else we should know?&lt;/td&gt;
&lt;td&gt;Additional project context or maintainer workload, within 500 characters&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The form also says OpenAI reviews applications on a rolling basis and notifies selected applicants by email.&lt;/p&gt;
&lt;h2&gt;Step-by-step Application Guide&lt;span class="hx-absolute -hx-mt-20" id="step-by-step-application-guide"&gt;&lt;/span&gt;
&lt;a href="#step-by-step-application-guide" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Step 1: Confirm That You Fit the Program&lt;span class="hx-absolute -hx-mt-20" id="step-1-confirm-that-you-fit-the-program"&gt;&lt;/span&gt;
&lt;a href="#step-1-confirm-that-you-fit-the-program" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;First, check whether you are truly maintaining an open-source project.&lt;/p&gt;
&lt;p&gt;Do not create an empty repository just to apply. Do not exaggerate your project’s impact. OpenAI’s program terms require applicants to provide accurate and complete information about themselves, their repositories, and their maintainer or administrator role.&lt;/p&gt;
&lt;p&gt;OpenAI may consider repository usage, ecosystem importance, evidence of active maintenance, role or permissions, and program capacity.&lt;/p&gt;
&lt;p&gt;In short: &lt;strong&gt;submitting an application does not guarantee ChatGPT Pro, API credits, or Codex Security access.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Prepare Evidence of Project Impact&lt;span class="hx-absolute -hx-mt-20" id="step-2-prepare-evidence-of-project-impact"&gt;&lt;/span&gt;
&lt;a href="#step-2-prepare-evidence-of-project-impact" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Prepare a short explanation of why your repository qualifies. The form limits this field to 500 characters, so make every sentence concrete.&lt;/p&gt;
&lt;p&gt;You can use this structure:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I am the core maintainer of [project], responsible for PR review, issue triage, releases, and security fixes. The project has [stars/downloads/users] and is used by [ecosystem/users/downstream projects]. It plays an important role in [specific ecosystem or scenario].&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If your project has a smaller GitHub footprint but matters in a specific ecosystem, say that clearly. For example, it may be a framework plugin, deployment tool, SDK, MCP server, CLI tool, language ecosystem component, or a dependency used by real downstream projects.&lt;/p&gt;
&lt;h3&gt;Step 3: Open the Official Application Page&lt;span class="hx-absolute -hx-mt-20" id="step-3-open-the-official-application-page"&gt;&lt;/span&gt;
&lt;a href="#step-3-open-the-official-application-page" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Go to the &lt;a href="https://developers.openai.com/community/codex-for-oss" target="_blank" rel="noopener"&gt;official Codex for Open Source page&lt;/a&gt;, then click &lt;strong&gt;Apply today&lt;/strong&gt; to open the &lt;a href="https://openai.com/form/codex-for-oss/" target="_blank" rel="noopener"&gt;OpenAI application form&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The form currently says selected maintainers may receive:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;6 months of ChatGPT Pro, which includes Codex&lt;/li&gt;
&lt;li&gt;Conditional access to Codex Security&lt;/li&gt;
&lt;li&gt;API credits for coding, maintainer automation, release workflows, and core open-source work&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Step 4: Write the Two Most Important Answers&lt;span class="hx-absolute -hx-mt-20" id="step-4-write-the-two-most-important-answers"&gt;&lt;/span&gt;
&lt;a href="#step-4-write-the-two-most-important-answers" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The most important parts of the form are the two short text fields.&lt;/p&gt;
&lt;p&gt;The first is &lt;strong&gt;Why does this repository qualify?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This should explain why your repository deserves support.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I am the primary maintainer of [project], responsible for PR review, issue triage, releases, and documentation. The project has [stars] GitHub stars and about [downloads] monthly downloads. It is used by [downstream projects/users] and provides [specific value] for the [ecosystem] ecosystem.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The second is &lt;strong&gt;How will you use API credits for your project?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This should explain how credits will be used for open-source maintenance.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;We plan to use API credits for pull request review, change summaries, test suggestions, release note generation, issue triage, and maintainer automation. All outputs will be reviewed by maintainers and used only for authorized repositories and core open-source maintenance workflows.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Keep the use case tied to open-source maintenance. Do not describe personal experiments, unrelated commercial projects, or unrestricted sharing with a team.&lt;/p&gt;
&lt;h3&gt;Step 5: Submit and Wait for Email&lt;span class="hx-absolute -hx-mt-20" id="step-5-submit-and-wait-for-email"&gt;&lt;/span&gt;
&lt;a href="#step-5-submit-and-wait-for-email" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;After submission, wait for OpenAI’s review.&lt;/p&gt;
&lt;p&gt;The form says applications are reviewed on a rolling basis and selected applicants are notified by email. OpenAI’s terms also say it may approve or deny applications at its discretion, and may request additional information to verify identity, repository affiliation, maintainer status, or repository control.&lt;/p&gt;
&lt;h2&gt;How to Improve Your Application&lt;span class="hx-absolute -hx-mt-20" id="how-to-improve-your-application"&gt;&lt;/span&gt;
&lt;a href="#how-to-improve-your-application" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Do Not Lead with “I Want Free ChatGPT”&lt;span class="hx-absolute -hx-mt-20" id="do-not-lead-with-i-want-free-chatgpt"&gt;&lt;/span&gt;
&lt;a href="#do-not-lead-with-i-want-free-chatgpt" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The program is about open-source maintenance, not personal free access.&lt;/p&gt;
&lt;p&gt;A stronger angle is: you want to use ChatGPT Pro with Codex to reduce maintainer workload and improve PR review, bug triage, release, documentation, and testing workflows.&lt;/p&gt;
&lt;h3&gt;Make Project Impact Specific&lt;span class="hx-absolute -hx-mt-20" id="make-project-impact-specific"&gt;&lt;/span&gt;
&lt;a href="#make-project-impact-specific" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This is more convincing:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The project has 2,000 GitHub stars, 50,000 monthly npm downloads, and is used by several downstream developer tools.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you do not have package download numbers, use activity, downstream usage, community examples, or ecosystem role.&lt;/p&gt;
&lt;h3&gt;Make Your Maintainer Role Clear&lt;span class="hx-absolute -hx-mt-20" id="make-your-maintainer-role-clear"&gt;&lt;/span&gt;
&lt;a href="#make-your-maintainer-role-clear" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The form asks for your GitHub profile and repository to be public. Your text should also make your role obvious.&lt;/p&gt;
&lt;p&gt;Examples of concrete responsibilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reviewing pull requests&lt;/li&gt;
&lt;li&gt;triaging issues&lt;/li&gt;
&lt;li&gt;maintaining releases&lt;/li&gt;
&lt;li&gt;fixing security issues&lt;/li&gt;
&lt;li&gt;maintaining documentation&lt;/li&gt;
&lt;li&gt;managing CI or release workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Keep API Credit Usage Compliant&lt;span class="hx-absolute -hx-mt-20" id="keep-api-credit-usage-compliant"&gt;&lt;/span&gt;
&lt;a href="#keep-api-credit-usage-compliant" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Avoid writing:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I want to use the credits for my personal AI experiments.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Write something closer to:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;We will use API credits for PR review summaries, test suggestions, release note generation, and issue triage. Maintainers will review all AI outputs before taking action.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Important Caveats&lt;span class="hx-absolute -hx-mt-20" id="important-caveats"&gt;&lt;/span&gt;
&lt;a href="#important-caveats" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Applying Does Not Guarantee Approval&lt;span class="hx-absolute -hx-mt-20" id="1-applying-does-not-guarantee-approval"&gt;&lt;/span&gt;
&lt;a href="#1-applying-does-not-guarantee-approval" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenAI’s program terms are clear: submitting an application does not guarantee selection, funding, or access.&lt;/p&gt;
&lt;p&gt;OpenAI may consider repository usage, ecosystem importance, evidence of active maintenance, maintainer role or permissions, and program capacity.&lt;/p&gt;
&lt;h3&gt;2. Benefits Are Not Transferable&lt;span class="hx-absolute -hx-mt-20" id="2-benefits-are-not-transferable"&gt;&lt;/span&gt;
&lt;a href="#2-benefits-are-not-transferable" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Program benefits are personal, limited, non-transferable, and have no cash value. They may not be sold, assigned, sublicensed, exchanged, or shared.&lt;/p&gt;
&lt;p&gt;If OpenAI provides a redemption code, invitation, or activation flow, the recipient must follow the applicable redemption instructions and any additional terms.&lt;/p&gt;
&lt;h3&gt;3. Codex Security and API Credits May Require Extra Review&lt;span class="hx-absolute -hx-mt-20" id="3-codex-security-and-api-credits-may-require-extra-review"&gt;&lt;/span&gt;
&lt;a href="#3-codex-security-and-api-credits-may-require-extra-review" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Codex Security and API credits are optional additional benefits. They may require separate review, additional eligibility checks, or additional terms.&lt;/p&gt;
&lt;p&gt;For Codex Security especially, OpenAI may limit access to repositories that the applicant owns, maintains, or is otherwise authorized to administer.&lt;/p&gt;
&lt;h3&gt;4. Do Not Review Unauthorized Repositories&lt;span class="hx-absolute -hx-mt-20" id="4-do-not-review-unauthorized-repositories"&gt;&lt;/span&gt;
&lt;a href="#4-do-not-review-unauthorized-repositories" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenAI’s terms also restrict use of the program, including Codex Security, for repositories, systems, or codebases that you do not own or lack permission to review.&lt;/p&gt;
&lt;p&gt;If authorization is unclear, OpenAI may require proof of control or authorization, and may limit or revoke access.&lt;/p&gt;
&lt;h2&gt;Copy-ready Application Templates&lt;span class="hx-absolute -hx-mt-20" id="copy-ready-application-templates"&gt;&lt;/span&gt;
&lt;a href="#copy-ready-application-templates" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;Repository Qualification Template&lt;span class="hx-absolute -hx-mt-20" id="repository-qualification-template"&gt;&lt;/span&gt;
&lt;a href="#repository-qualification-template" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;I am the core maintainer of [project name], responsible for PR review, issue triage, releases, documentation, and security fixes. The project has [stars/downloads/users] and is used by [ecosystem/users/downstream projects]. It plays an important role in [specific ecosystem or scenario], and ChatGPT Pro with Codex would help reduce review workload and maintain code quality.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;API Credits Usage Template&lt;span class="hx-absolute -hx-mt-20" id="api-credits-usage-template"&gt;&lt;/span&gt;
&lt;a href="#api-credits-usage-template" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;We plan to use API credits for pull request review, change summaries, test suggestions, release note generation, issue triage, and maintainer automation. All outputs will be reviewed by maintainers before use, and credits will only be used for authorized repositories and core open-source maintenance workflows.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Applying for ChatGPT Pro through Codex for Open Source is not about exploiting a free offer. It is about OpenAI supporting real open-source maintenance work.&lt;/p&gt;
&lt;p&gt;If you maintain a public open-source project and can clearly explain its value, your role, and how AI tools will improve your maintenance workflow, the program is worth a serious application.&lt;/p&gt;
&lt;p&gt;For maintainers, the most valuable part is not only six months of ChatGPT Pro. It is the chance to connect Codex, API credits, and security tooling to real workflows: faster PR review, better issue triage, easier release notes, and more time for architecture, quality, and community decisions.&lt;/p&gt;
&lt;h2&gt;Official Links&lt;span class="hx-absolute -hx-mt-20" id="official-links"&gt;&lt;/span&gt;
&lt;a href="#official-links" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/community/codex-for-oss" target="_blank" rel="noopener"&gt;Codex for Open Source official page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/form/codex-for-oss/" target="_blank" rel="noopener"&gt;Codex for Open Source application form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.openai.com/codex/codex-for-oss-terms" target="_blank" rel="noopener"&gt;Codex for Open Source Program Terms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>open-slide: A Slide Framework Built for AI Agents</title><link>https://silenceper.com/en/article/2026-05-07-open-slide-agent-slide-framework/</link><pubDate>Thu, 07 May 2026 19:47:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-07-open-slide-agent-slide-framework/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260507/open-slide-github-cover.png" alt="open-slide GitHub README cover" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;open-slide is a React slide framework built for AI agents: you describe what the deck should be, the agent writes React pages, and open-slide handles the canvas, preview, presentation mode, export, and iteration loop.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;open-slide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;1weiho&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Agent-native slide framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stack&lt;/td&gt;
&lt;td&gt;TypeScript, React, Vite, pnpm, Turbo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latest version&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@open-slide/core@1.0.6&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub popularity&lt;/td&gt;
&lt;td&gt;2.1k+ stars / 143 forks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://open-slide.dev" target="_blank" rel="noopener"&gt;https://open-slide.dev&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Init command&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx @open-slide/cli init my-slide&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The traditional slide-making workflow usually happens in Keynote, PowerPoint, Figma, or a browser-based editor. You drag elements around, adjust styles, and manually polish layout details.&lt;/p&gt;
&lt;p&gt;But a lot of that work can now be handled by AI agents: structure, copy, visual hierarchy, colors, and even code implementation. The idea behind open-slide is simple: &lt;strong&gt;if slides are visual code, let agents write that code directly.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;open-slide provides a stable slide runtime:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each page is a React component.&lt;/li&gt;
&lt;li&gt;Every slide is rendered into a fixed &lt;code&gt;1920 × 1080&lt;/code&gt; canvas.&lt;/li&gt;
&lt;li&gt;The framework supports preview, hot reload, presentation mode, and export.&lt;/li&gt;
&lt;li&gt;Agents can follow built-in skills and rules to generate and edit decks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means you do not need to set up React, Vite, rendering, and export logic from scratch. You describe the deck you want, the agent writes the pages, and open-slide turns those pages into a presentable and iterable deck.&lt;/p&gt;
&lt;h2&gt;Core features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Agent-native authoring&lt;span class="hx-absolute -hx-mt-20" id="1-agent-native-authoring"&gt;&lt;/span&gt;
&lt;a href="#1-agent-native-authoring" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The main selling point of open-slide is that it is designed around agents writing slides.&lt;/p&gt;
&lt;p&gt;It can work with coding agents such as Claude Code, Codex, and Cursor. A scaffolded workspace ships with agent-facing skills, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/create-slide&lt;/code&gt;: drafts a deck end to end, starting from topic, aesthetic, page count, text density, and motion preference.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/slide-authoring&lt;/code&gt;: gives the agent technical rules for the &lt;code&gt;1920 × 1080&lt;/code&gt; canvas, type scale, palette, and layout constraints.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In other words, open-slide is not just a slide component library. It also defines how an agent should author and revise a deck.&lt;/p&gt;
&lt;h3&gt;2. React-first: every slide is code&lt;span class="hx-absolute -hx-mt-20" id="2-react-first-every-slide-is-code"&gt;&lt;/span&gt;
&lt;a href="#2-react-first-every-slide-is-code" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide does not introduce a constrained slide DSL. Each slide page is just an arbitrary React component.&lt;/p&gt;
&lt;p&gt;That means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can write normal TSX.&lt;/li&gt;
&lt;li&gt;Layout, styling, animation, and component structure are fully controllable.&lt;/li&gt;
&lt;li&gt;Slides can be versioned with Git.&lt;/li&gt;
&lt;li&gt;Agents can edit the source directly.&lt;/li&gt;
&lt;li&gt;The deck can be reviewed like a regular frontend codebase.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The website summarizes this well: &lt;strong&gt;A slide is a file. Just React, nothing else.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;3. Fixed 1920 × 1080 canvas&lt;span class="hx-absolute -hx-mt-20" id="3-fixed-1920--1080-canvas"&gt;&lt;/span&gt;
&lt;a href="#3-fixed-1920--1080-canvas" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Every slide renders into a fixed &lt;code&gt;1920 × 1080&lt;/code&gt; canvas.&lt;/p&gt;
&lt;p&gt;This matters for agent-generated slides because it gives the agent a clear visual boundary. Font sizes, layout, element positions, and proportions can all be designed around a stable canvas.&lt;/p&gt;
&lt;p&gt;Compared with a responsive web page, this fixed canvas is closer to a real presentation deck and is easier to export and present.&lt;/p&gt;
&lt;h3&gt;4. In-browser inspector&lt;span class="hx-absolute -hx-mt-20" id="4-in-browser-inspector"&gt;&lt;/span&gt;
&lt;a href="#4-in-browser-inspector" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide also provides an interesting iteration flow. In the dev server, you can click an element and leave a comment on it.&lt;/p&gt;
&lt;p&gt;For example, you can click a heading and write:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“make this red”&lt;/li&gt;
&lt;li&gt;“shrink the headline”&lt;/li&gt;
&lt;li&gt;“change the copy to Open Slide Rocks”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those comments are persisted as &lt;code&gt;@slide-comment&lt;/code&gt; markers in the source. Then &lt;code&gt;/apply-comments&lt;/code&gt; lets the agent read pending comments, update the code, and clear the markers.&lt;/p&gt;
&lt;p&gt;This creates a useful loop: let the agent generate the first version, click to leave human feedback, and let the agent apply the next round of changes.&lt;/p&gt;
&lt;h3&gt;5. Asset manager and logo search&lt;span class="hx-absolute -hx-mt-20" id="5-asset-manager-and-logo-search"&gt;&lt;/span&gt;
&lt;a href="#5-asset-manager-and-logo-search" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide includes an assets panel for managing images, videos, and fonts per deck.&lt;/p&gt;
&lt;p&gt;It also integrates the &lt;a href="https://svgl.app/" target="_blank" rel="noopener"&gt;svgl&lt;/a&gt; logo catalogue, so you can search for and insert brand logos without hunting for SVG files manually. This is especially useful for product decks, pitches, and technical talks.&lt;/p&gt;
&lt;h3&gt;6. Professional presentation mode&lt;span class="hx-absolute -hx-mt-20" id="6-professional-presentation-mode"&gt;&lt;/span&gt;
&lt;a href="#6-professional-presentation-mode" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide is not limited to dev preview. It includes a proper present mode with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fullscreen playback&lt;/li&gt;
&lt;li&gt;keyboard navigation&lt;/li&gt;
&lt;li&gt;current and next slide preview&lt;/li&gt;
&lt;li&gt;speaker notes&lt;/li&gt;
&lt;li&gt;timer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is not just a browser page. It can be used as an actual presentation deck.&lt;/p&gt;
&lt;h3&gt;7. Export to static HTML and PDF&lt;span class="hx-absolute -hx-mt-20" id="7-export-to-static-html-and-pdf"&gt;&lt;/span&gt;
&lt;a href="#7-export-to-static-html-and-pdf" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;open-slide can export a deck as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;self-contained static HTML&lt;/li&gt;
&lt;li&gt;print-ready PDF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The static HTML output can be deployed to Vercel, Cloudflare Pages, Netlify, Zeabur, or any static hosting service. It works for both local presenting and online sharing.&lt;/p&gt;
&lt;h3&gt;8. Slide manager&lt;span class="hx-absolute -hx-mt-20" id="8-slide-manager"&gt;&lt;/span&gt;
&lt;a href="#8-slide-manager" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project also includes a slide manager for organizing multiple decks with folders, custom emoji, and drag-and-drop reordering.&lt;/p&gt;
&lt;p&gt;Once you have more than a few generated decks, that management layer becomes useful.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;open-slide is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People who want to generate decks quickly with Claude Code, Codex, or Cursor.&lt;/li&gt;
&lt;li&gt;Developers who prefer “slides as code.”&lt;/li&gt;
&lt;li&gt;Teams that need presentable decks for technical plans, product demos, or project updates.&lt;/li&gt;
&lt;li&gt;Users who want slide decks to be versioned, reviewable, and automatable.&lt;/li&gt;
&lt;li&gt;Anyone tired of manually dragging elements around in traditional slide tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is especially suitable for technical content: architecture explanations, product demos, roadmaps, open-source project introductions, and engineering talks.&lt;/p&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Initialize a project:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx @open-slide/cli init my-slide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-slide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The generated workspace includes the open-slide runtime and agent-related rules. You can ask an agent to generate a deck through &lt;code&gt;/create-slide&lt;/code&gt;, or directly edit:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slides/&amp;lt;id&amp;gt;/index.tsx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want to work on open-slide itself, the repository is a pnpm + Turbo monorepo:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm install
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm build
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm check
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pnpm lint&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Main directories:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;packages/core&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Core runtime, including home page, slide viewer, present mode, inspector, Vite plugin, and dev/build/preview CLI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;packages/cli&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scaffolder for &lt;code&gt;npx @open-slide/cli init&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apps/demo&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Demo workspace used for local development and examples&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;open-slide points to a natural new workflow: &lt;strong&gt;instead of asking AI to generate a static PowerPoint file, let an agent write a runnable, iterable, and version-controlled slide codebase.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It combines React, a fixed canvas, presentation mode, inspector comments, asset management, and export into a stable runtime for agent-authored decks.&lt;/p&gt;
&lt;p&gt;If you already use Claude Code, Codex, or Cursor for content and code generation, open-slide is a good project to try for agent-generated presentations.&lt;/p&gt;</description></item><item><title>OpenLess: An Open-Source AI Voice Input Tool That Turns Speech into Polished Text</title><link>https://silenceper.com/en/article/2026-05-07-openless-ai-voice-input/</link><pubDate>Thu, 07 May 2026 11:26:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-07-openless-ai-voice-input/</guid><description>
&lt;h2&gt;One-line positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenLess is an open-source desktop voice input tool: hold a hotkey, speak, release it, and AI-polished text appears at your current cursor.&lt;/p&gt;
&lt;h2&gt;Basic information&lt;span class="hx-absolute -hx-mt-20" id="basic-information"&gt;&lt;/span&gt;
&lt;a href="#basic-information" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Details&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;OpenLess&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/appergb/openless" target="_blank" rel="noopener"&gt;https://github.com/appergb/openless&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://openless.top" target="_blank" rel="noopener"&gt;https://openless.top&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Open-source voice input plus AI text polishing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platforms&lt;/td&gt;
&lt;td&gt;macOS 12+, Windows 10+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stack&lt;/td&gt;
&lt;td&gt;Tauri 2, Rust, React, TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current version&lt;/td&gt;
&lt;td&gt;v1.2.21-tauri&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub popularity&lt;/td&gt;
&lt;td&gt;900+ stars&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What problem does it solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Many voice input tools only produce a literal transcript. The result often still needs manual cleanup: removing filler words, fixing punctuation, and restructuring the text.&lt;/p&gt;
&lt;p&gt;OpenLess focuses on a more practical goal: &lt;strong&gt;turning spoken language directly into usable written text&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The workflow is straightforward. Put your cursor in ChatGPT, Claude, Cursor, Notion, an email draft, WeChat, Slack, or almost any other text field. Press a global hotkey and speak. OpenLess records your voice, transcribes it, polishes the text with AI, and inserts the result at the cursor. If direct insertion is blocked, it falls back to copying the output to the clipboard so your dictation is not lost.&lt;/p&gt;
&lt;p&gt;Its most distinctive mode is the &lt;strong&gt;AI prompt mode&lt;/strong&gt;. You can speak loosely, and OpenLess turns your words into a structured prompt with clearer context and constraints, ready to send to ChatGPT, Claude, or Cursor.&lt;/p&gt;
&lt;p&gt;For example, you might say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want ChatGPT to write a SQL query from the orders table, get last month&amp;rsquo;s orders, group by customer, sort by amount descending, and return the top ten.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OpenLess can turn that into:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please write a SQL query that:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Pulls orders from last month from the `orders` table.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Groups by customer.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Sorts by total amount, descending.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Returns the top 10 rows only.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In this workflow, OpenLess is not just a dictation tool. It turns spoken thoughts into text that is easier to send, ask, or submit.&lt;/p&gt;
&lt;h2&gt;Core features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Global-hotkey voice input&lt;span class="hx-absolute -hx-mt-20" id="1-global-hotkey-voice-input"&gt;&lt;/span&gt;
&lt;a href="#1-global-hotkey-voice-input" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess lets you trigger recording with a global hotkey. You can place your cursor in any input field and start speaking. The project currently supports both push-to-talk and toggle recording modes, and &lt;code&gt;Esc&lt;/code&gt; can cancel the current session.&lt;/p&gt;
&lt;h3&gt;2. Multiple output modes&lt;span class="hx-absolute -hx-mt-20" id="2-multiple-output-modes"&gt;&lt;/span&gt;
&lt;a href="#2-multiple-output-modes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess does not stop at raw transcription. It provides several output modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Raw&lt;/strong&gt;: output the transcript directly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Light polish&lt;/strong&gt;: fix filler words, punctuation, and obvious wording issues while preserving meaning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structured&lt;/strong&gt;: turn loose speech into a structured AI prompt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Formal&lt;/strong&gt;: rewrite spoken text into a more formal written style.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The structured mode is the key differentiator, especially for people who frequently write AI prompts.&lt;/p&gt;
&lt;h3&gt;3. Insert text at the current cursor&lt;span class="hx-absolute -hx-mt-20" id="3-insert-text-at-the-current-cursor"&gt;&lt;/span&gt;
&lt;a href="#3-insert-text-at-the-current-cursor" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess is not trying to become another note-taking app. Its purpose is to reduce input friction. The polished text is inserted directly into the app you are already using, such as a browser, chat app, editor, or document tool.&lt;/p&gt;
&lt;p&gt;If an app blocks direct insertion, OpenLess falls back to the clipboard, and you can paste the result manually.&lt;/p&gt;
&lt;h3&gt;4. Dictionary and hotwords&lt;span class="hx-absolute -hx-mt-20" id="4-dictionary-and-hotwords"&gt;&lt;/span&gt;
&lt;a href="#4-dictionary-and-hotwords" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project includes a dictionary feature for product names, people names, and technical terms. Enabled entries are used as hotwords during speech recognition and as semantic hints during polishing.&lt;/p&gt;
&lt;p&gt;This is useful if you often dictate English product names, technical terms, or internal team vocabulary.&lt;/p&gt;
&lt;h3&gt;5. History and settings&lt;span class="hx-absolute -hx-mt-20" id="5-history-and-settings"&gt;&lt;/span&gt;
&lt;a href="#5-history-and-settings" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;OpenLess provides a main window for overview, history, dictionary, style, and settings. You can review the original transcript and polished output for previous recordings, and you can adjust language, hotkeys, and model credentials.&lt;/p&gt;
&lt;h3&gt;6. Local-first and bring-your-own credentials&lt;span class="hx-absolute -hx-mt-20" id="6-local-first-and-bring-your-own-credentials"&gt;&lt;/span&gt;
&lt;a href="#6-local-first-and-bring-your-own-credentials" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Many similar tools are closed-source subscription products where your data, dictionary, and model calls stay inside the vendor&amp;rsquo;s account system.&lt;/p&gt;
&lt;p&gt;OpenLess takes a different approach: the app is open source, data is kept primarily on your own machine, and you configure the speech recognition and text polishing services yourself. It currently supports Volcengine ASR, OpenAI Whisper-compatible batch ASR, and Ark / DeepSeek / OpenAI-compatible Chat Completions.&lt;/p&gt;
&lt;h2&gt;Who is it for?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenLess is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People who frequently write prompts for ChatGPT, Claude, Cursor, or Gemini.&lt;/li&gt;
&lt;li&gt;Users who write emails, specs, and long messages but do not want to type everything manually.&lt;/li&gt;
&lt;li&gt;Developers who want to dictate code comments, commit messages, or PR descriptions.&lt;/li&gt;
&lt;li&gt;Users who prefer an open-source option over fully closed subscription voice input tools.&lt;/li&gt;
&lt;li&gt;Heavy macOS or Windows desktop users.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your daily work involves turning thoughts into written text, OpenLess can fit naturally into that workflow.&lt;/p&gt;
&lt;h2&gt;Quick start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;End users can download installers from GitHub Releases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS: &lt;code&gt;OpenLess_&amp;lt;version&amp;gt;_aarch64.dmg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Windows: &lt;code&gt;OpenLess_&amp;lt;version&amp;gt;_x64-setup.exe&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On first launch, you need to grant the required permissions.&lt;/p&gt;
&lt;p&gt;For macOS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grant microphone access.&lt;/li&gt;
&lt;li&gt;Grant accessibility access.&lt;/li&gt;
&lt;li&gt;Quit and reopen OpenLess.&lt;/li&gt;
&lt;li&gt;Fill in ASR and LLM credentials in Settings.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For Windows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grant microphone access.&lt;/li&gt;
&lt;li&gt;Check that the global hotkey listener is active in Settings.&lt;/li&gt;
&lt;li&gt;Fill in ASR and LLM credentials.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Developers can run it from source with:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git submodule update --init --recursive
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; openless-all/app
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm ci
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm run tauri dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The active app lives in &lt;code&gt;openless-all/app/&lt;/code&gt;. The desktop client is built with Tauri 2, a Rust backend, and a React / TypeScript frontend.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;OpenLess can be understood as an open-source AI voice input assistant.&lt;/p&gt;
&lt;p&gt;It does not answer questions, execute tasks, or try to become another AI client. It focuses on one job: &lt;strong&gt;turning what you say into clearer text that is ready to send, ask, or paste into the current input field&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For people who frequently write prompts, long messages, emails, specs, or code-related descriptions, this is a practical direction. Open source, bring-your-own credentials, local-first storage, and AI-prompt-oriented restructuring are the main reasons OpenLess is worth watching.&lt;/p&gt;</description></item><item><title>Petdex: Find an Animated Companion for Codex</title><link>https://silenceper.com/en/article/2026-05-06-petdex-codex-pets/</link><pubDate>Wed, 06 May 2026 23:20:00 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-06-petdex-codex-pets/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260506/petdex-home.png" alt="Petdex homepage screenshot" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Petdex is a public gallery of animated companions for Codex. It lets you browse, preview, collect, and install pixel-style companions so your local Codex experience feels a little more personal and playful.&lt;/p&gt;
&lt;h2&gt;Basic Info&lt;span class="hx-absolute -hx-mt-20" id="basic-info"&gt;&lt;/span&gt;
&lt;a href="#basic-info" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Info&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Website&lt;/td&gt;
&lt;td&gt;&lt;a href="https://petdex.crafter.run/" target="_blank" rel="noopener"&gt;https://petdex.crafter.run/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/crafter-station/petdex" target="_blank" rel="noopener"&gt;https://github.com/crafter-station/petdex&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Codex-compatible animated pets public gallery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current scale&lt;/td&gt;
&lt;td&gt;870+ pets shown on the homepage, with 600+ GitHub stars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick install example&lt;/td&gt;
&lt;td&gt;&lt;code&gt;npx petdex install boba&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem Does It Solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Command-line tools like Codex are efficient, but they can also feel a bit cold: text, tasks, logs, and results fill the window, while the environment itself has very little personality.&lt;/p&gt;
&lt;p&gt;Petdex does something simple and charming. It turns animated Codex companions into a public gallery, so users can browse it like an avatar library or sticker collection and pick a pet for their own Codex setup.&lt;/p&gt;
&lt;p&gt;It solves three small but real problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Centralized discovery&lt;/strong&gt;: instead of hunting for pet packs across scattered links, you can browse them in one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview before installing&lt;/strong&gt;: each companion has visuals, states, descriptions, tags, and metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clear installation path&lt;/strong&gt;: the site gives you a direct install command, making the first try low-friction.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is not a tool for making the model more capable. It is a small layer of personality and ritual around a developer workflow.&lt;/p&gt;
&lt;h2&gt;Core Features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Browse the Pet Gallery&lt;span class="hx-absolute -hx-mt-20" id="1-browse-the-pet-gallery"&gt;&lt;/span&gt;
&lt;a href="#1-browse-the-pet-gallery" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The homepage presents a large set of companion cards. Each card includes details such as number, name, category, description, tags, author, and install data.&lt;/p&gt;
&lt;p&gt;For example, Boba is a tiny otter sipping bubble tea. Duo, Doraemon, Noir Webling, and other companions are presented in pixel-art or chibi-style forms.&lt;/p&gt;
&lt;p&gt;That makes Petdex feel more like a living pet index than a plain file directory.&lt;/p&gt;
&lt;h3&gt;2. Install with One Command&lt;span class="hx-absolute -hx-mt-20" id="2-install-with-one-command"&gt;&lt;/span&gt;
&lt;a href="#2-install-with-one-command" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The homepage shows a direct install example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx petdex install boba&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The interaction is straightforward: find a companion you like, copy the command, and install it.&lt;/p&gt;
&lt;h3&gt;3. Featured Collections&lt;span class="hx-absolute -hx-mt-20" id="3-featured-collections"&gt;&lt;/span&gt;
&lt;a href="#3-featured-collections" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Petdex also includes collections, with featured sets on the homepage. Examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GRAYCRAFT: an original mech-style character set&lt;/li&gt;
&lt;li&gt;Meme Lords: meme-inspired characters such as Pepe, Wojak, and Doodlebob&lt;/li&gt;
&lt;li&gt;Anime Heroes: anime-inspired companion designs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Collections make browsing more thematic and give creators a way to present related designs together.&lt;/p&gt;
&lt;h3&gt;4. Community Submission&lt;span class="hx-absolute -hx-mt-20" id="4-community-submission"&gt;&lt;/span&gt;
&lt;a href="#4-community-submission" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Petdex includes a Submit entry point. Its README also mentions browser-based validation and submission for community pet packages.&lt;/p&gt;
&lt;p&gt;That means Petdex is not just a read-only catalog. It is designed to grow through community contributions.&lt;/p&gt;
&lt;h3&gt;5. Open-source Maintenance&lt;span class="hx-absolute -hx-mt-20" id="5-open-source-maintenance"&gt;&lt;/span&gt;
&lt;a href="#5-open-source-maintenance" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The Petdex GitHub repository is public. The README describes it as a Codex-compatible animated pets gallery and lists several core capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Browse approved pet packs&lt;/li&gt;
&lt;li&gt;Preview every animation state&lt;/li&gt;
&lt;li&gt;Download individual ZIP packages&lt;/li&gt;
&lt;li&gt;Download the full gallery pack&lt;/li&gt;
&lt;li&gt;Validate and submit community pet packages in the browser&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From the repository structure, pet packages live under &lt;code&gt;public/pets&lt;/code&gt;, while downloadable archives are generated under &lt;code&gt;public/packs&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Who Is It For?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Petdex is a good fit for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;people who use Codex often and want a more personal local environment;&lt;/li&gt;
&lt;li&gt;developers who like pixel art, chibi characters, and desktop-pet-style details;&lt;/li&gt;
&lt;li&gt;users who want their toolchain to feel a little less sterile;&lt;/li&gt;
&lt;li&gt;creators who want to design and share Codex companions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only care about model quality, task success rate, or engineering automation, Petdex is not essential. But if you spend a lot of time working with Codex in a terminal, it can make that daily experience feel lighter.&lt;/p&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Open the website:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://petdex.crafter.run/" target="_blank" rel="noopener"&gt;https://petdex.crafter.run/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pick a companion, such as Boba, and run:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx petdex install boba&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;You can also keep exploring more pets, collections, and creators on the site.&lt;/p&gt;
&lt;p&gt;To learn more about the project itself, visit the GitHub repository:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/crafter-station/petdex" target="_blank" rel="noopener"&gt;https://github.com/crafter-station/petdex&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Petdex is not a large or complicated tool. It is more like a playful entry point in the Codex ecosystem: a public index where companions can be browsed, previewed, installed, and submitted.&lt;/p&gt;
&lt;p&gt;Its value is not in making Codex smarter. Its value is in making the experience of using Codex more personal, lighter, and more like a workspace that the community can decorate together.&lt;/p&gt;</description></item><item><title>Keep Codex Fast: A Safe Maintenance Skill for Keeping Local Codex State Lightweight</title><link>https://silenceper.com/en/article/2026-05-04-keep-codex-fast/</link><pubDate>Mon, 04 May 2026 15:49:45 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-04-keep-codex-fast/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260504/keep-codex-fast-cover.png" alt="Keep Codex Fast" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Keep Codex Fast is a local-state maintenance skill for heavy Codex users. It inspects first, creates handoff notes, backs up important state, and then safely archives old sessions, logs, and temporary workspaces that can make the local experience feel heavier over time.&lt;/p&gt;
&lt;h2&gt;Basic Info&lt;span class="hx-absolute -hx-mt-20" id="basic-info"&gt;&lt;/span&gt;
&lt;a href="#basic-info" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Info&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/vibeforge1111/keep-codex-fast" target="_blank" rel="noopener"&gt;https://github.com/vibeforge1111/keep-codex-fast&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Author&lt;/td&gt;
&lt;td&gt;vibeforge1111&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;MIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main language&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default branch&lt;/td&gt;
&lt;td&gt;main&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;Codex local-state inspection and safe maintenance skill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current traction&lt;/td&gt;
&lt;td&gt;About 559 stars and 29 forks, checked on 2026-05-04&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem Does It Solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;After using Codex for a long time, many users run into a kind of &amp;ldquo;heaviness&amp;rdquo; that is hard to pin down:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long conversations keep accumulating.&lt;/li&gt;
&lt;li&gt;Old threads are frequently resumed.&lt;/li&gt;
&lt;li&gt;Multiple repositories are active at the same time.&lt;/li&gt;
&lt;li&gt;Local terminals, dev servers, logs, and workspaces keep piling up.&lt;/li&gt;
&lt;li&gt;You want to clean things up, but worry about deleting useful context.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Keep Codex Fast is not about making the model answer faster. It is about organizing the local runtime state Codex leaves on your machine. Its core principle is intentionally conservative:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Make handoffs first. Archive, don&amp;rsquo;t delete. Apply changes only when you are ready.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words: write continuity notes first, archive instead of deleting, and only apply changes after you have confirmed that you are ready.&lt;/p&gt;
&lt;p&gt;This is practical for people who use Codex for real development work. The part that makes cleanup hard is usually not the files themselves. It is the project decisions, debugging paths, failed commands, and next-step plans hidden inside older chats. Keep Codex Fast turns &amp;ldquo;cleanup&amp;rdquo; into a safer workflow: inspect first, preserve recoverable context, then archive.&lt;/p&gt;
&lt;h2&gt;Core Workflow&lt;span class="hx-absolute -hx-mt-20" id="core-workflow"&gt;&lt;/span&gt;
&lt;a href="#core-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;pre class="mermaid hx-mt-6"&gt;
flowchart TD
A[Codex local state becomes heavy] --&amp;gt; B[Read-only inspection]
B --&amp;gt; C[Generate maintenance report]
C --&amp;gt; D{Any important old sessions?}
D -- Yes --&amp;gt; E[Create handoff notes]
E --&amp;gt; F[Back up important state]
D -- No --&amp;gt; F
F --&amp;gt; G[Archive old sessions and workspaces]
G --&amp;gt; H[Rotate large logs]
H --&amp;gt; I[Prune stale project references]
I --&amp;gt; J[Inspect again and confirm results]
&lt;/pre&gt;&lt;p&gt;The most important part of this flow is the first step: read-only inspection by default. Keep Codex Fast does not immediately move files or delete history. It first reports what local state exists and where the weight is coming from.&lt;/p&gt;
&lt;h3&gt;1. Read-only Report by Default&lt;span class="hx-absolute -hx-mt-20" id="1-read-only-report-by-default"&gt;&lt;/span&gt;
&lt;a href="#1-read-only-report-by-default" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project README makes the default mode clear: it only reports. It does not write files, create backups, move directories, or mutate local Codex state. It helps you see which areas are growing, including active sessions, archived sessions, logs, old workspaces, stale project references, and heavy Node or dev processes.&lt;/p&gt;
&lt;p&gt;That makes the first run low-risk. You can treat it as a health check rather than a cleanup operation.&lt;/p&gt;
&lt;h3&gt;2. Handoffs First&lt;span class="hx-absolute -hx-mt-20" id="2-handoffs-first"&gt;&lt;/span&gt;
&lt;a href="#2-handoffs-first" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Keep Codex Fast puts special emphasis on handoff notes. A handoff is a small continuity document that records:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what you are working on;&lt;/li&gt;
&lt;li&gt;what has already changed;&lt;/li&gt;
&lt;li&gt;which files matter;&lt;/li&gt;
&lt;li&gt;which commands or checks have already been run;&lt;/li&gt;
&lt;li&gt;what errors, warnings, or open problems remain;&lt;/li&gt;
&lt;li&gt;what should happen next.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With that document in place, you can archive a heavy old chat and continue from a fresh Codex session without relying on a growing historical thread.&lt;/p&gt;
&lt;h3&gt;3. Back Up First, Archive Instead of Deleting&lt;span class="hx-absolute -hx-mt-20" id="3-back-up-first-archive-instead-of-deleting"&gt;&lt;/span&gt;
&lt;a href="#3-back-up-first-archive-instead-of-deleting" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;When it actually performs maintenance, Keep Codex Fast still takes the conservative path: back up important state first, then move old sessions, stale workspaces, and large logs into an archive location. It removes items from the hot path instead of permanently deleting them.&lt;/p&gt;
&lt;p&gt;According to the project description, it can handle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;old non-pinned active sessions;&lt;/li&gt;
&lt;li&gt;expired worktrees;&lt;/li&gt;
&lt;li&gt;large &lt;code&gt;logs_2.sqlite*&lt;/code&gt; log files;&lt;/li&gt;
&lt;li&gt;stale or temporary project references in &lt;code&gt;config.toml&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;extended Windows path inconsistencies such as &lt;code&gt;\\?\C:\...&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;reports for heavy Node or dev processes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Manual Application, Not Automatic Cleanup&lt;span class="hx-absolute -hx-mt-20" id="4-manual-application-not-automatic-cleanup"&gt;&lt;/span&gt;
&lt;a href="#4-manual-application-not-automatic-cleanup" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project also draws an important boundary: scheduled maintenance is better suited for reminders and reports, not automatic cleanup. The reason is simple. Automation cannot know which old sessions are still important, or whether a handoff is good enough.&lt;/p&gt;
&lt;p&gt;A safer workflow is to inspect regularly, confirm manually, and only apply maintenance after Codex is closed or after explicitly waiting for Codex to exit.&lt;/p&gt;
&lt;h2&gt;Who Is It For?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Keep Codex Fast is most useful for Codex users who:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use Codex for development every day;&lt;/li&gt;
&lt;li&gt;work across multiple repositories;&lt;/li&gt;
&lt;li&gt;keep long chat histories;&lt;/li&gt;
&lt;li&gt;often resume old threads for debugging or implementation;&lt;/li&gt;
&lt;li&gt;run multiple local terminals, services, or worktrees;&lt;/li&gt;
&lt;li&gt;want to clean local Codex state without losing useful context.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you only open Codex occasionally for small questions, you may not feel the value yet. But once Codex becomes part of your daily development workflow, this kind of local-state maintenance becomes increasingly important.&lt;/p&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Inside Codex, you can ask it to install the skill directly:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Install the keep-codex-fast skill from https://github.com/vibeforge1111/keep-codex-fast&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After installation, start with a read-only inspection:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use $keep-codex-fast to inspect my Codex local state and recommend a safe maintenance plan.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If the report shows old sessions worth archiving, create a handoff for any project that may continue:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Create a comprehensive handoff document for this repo/session before I archive Codex history.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Include:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- repo/path and branch
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- current goal
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- what we already completed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- files touched or investigated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- commands/tests already run
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- known errors, warnings, or failing checks
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- open decisions
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- constraints, user preferences, and do-not-touch areas
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- the next 3-7 concrete steps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Also include a reactivation prompt I can paste into a fresh Codex chat so it can continue from this handoff without relying on the old chat context.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;After important sessions have handoff notes, you can consider safe maintenance:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Use $keep-codex-fast to apply safe Codex maintenance.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Before changing anything, confirm that important active repo chats have handoff docs or do not need them.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Then back up first, archive instead of deleting, move stale worktrees, rotate large logs, prune dead config references, and verify the result.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;If Codex is currently running, do not mutate local state. Tell me to close Codex first.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you prefer running the script directly, the project also provides a CLI path:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Beyond the read-only report, you can use options such as:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --details
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --backup-only
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --apply --archive-older-than-days &lt;span class="m"&gt;10&lt;/span&gt; --worktree-older-than-days &lt;span class="m"&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python scripts/keep_codex_fast.py --apply --wait-for-codex-exit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The value of Keep Codex Fast is not aggressive cleanup. Its value is turning Codex local maintenance into a controlled process: report first, hand off first, back up first, then archive.&lt;/p&gt;
&lt;p&gt;For heavy Codex users, old sessions and local state are both a burden and an asset. The project&amp;rsquo;s approach is practical: extract truly valuable context into handoff notes, move state that does not need to stay on the hot path, and let new Codex sessions start light again.&lt;/p&gt;
&lt;p&gt;If your local Codex experience already feels heavier, Keep Codex Fast is worth running in read-only mode first. Even if you do not apply cleanup immediately, it can show which local state is growing and how to handle it safely later.&lt;/p&gt;</description></item><item><title>HyperFrames: An Open-source Rendering Framework for Generating Video with HTML</title><link>https://silenceper.com/en/article/2026-05-02-hyperframes-html-video-rendering/</link><pubDate>Sat, 02 May 2026 10:39:18 +0800</pubDate><guid>https://silenceper.com/en/article/2026-05-02-hyperframes-html-video-rendering/</guid><description>
&lt;p&gt;&lt;img src="https://silenceper.com/img/20260502/hyperframes-demo.gif" alt="HyperFrames demo" loading="lazy" /&gt;&lt;/p&gt;
&lt;h2&gt;One-line Positioning&lt;span class="hx-absolute -hx-mt-20" id="one-line-positioning"&gt;&lt;/span&gt;
&lt;a href="#one-line-positioning" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HyperFrames is HeyGen&amp;rsquo;s open-source HTML video rendering framework. It lets you define video scenes, timelines, and animations the same way you write web pages, then preview them in a browser and render them to MP4.&lt;/p&gt;
&lt;h2&gt;Basic Info&lt;span class="hx-absolute -hx-mt-20" id="basic-info"&gt;&lt;/span&gt;
&lt;a href="#basic-info" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Info&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/heygen-com/hyperframes" target="_blank" rel="noopener"&gt;https://github.com/heygen-com/hyperframes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docs&lt;/td&gt;
&lt;td&gt;&lt;a href="https://hyperframes.heygen.com/introduction" target="_blank" rel="noopener"&gt;https://hyperframes.heygen.com/introduction&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NPM package&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hyperframes&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main language&lt;/td&gt;
&lt;td&gt;TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;Apache-2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current version&lt;/td&gt;
&lt;td&gt;0.4.41&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requirements&lt;/td&gt;
&lt;td&gt;Node.js &amp;gt;= 22, FFmpeg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Positioning&lt;/td&gt;
&lt;td&gt;HTML-native, AI-first, deterministic video rendering&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;What Problem Does It Solve?&lt;span class="hx-absolute -hx-mt-20" id="what-problem-does-it-solve"&gt;&lt;/span&gt;
&lt;a href="#what-problem-does-it-solve" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;There are usually two common paths for video automation. One is to use traditional editing tools, which are great for manual production but not ideal for batch generation. The other is to use code-based video frameworks, which are automation-friendly but often require developers to enter a specific component system or DSL.&lt;/p&gt;
&lt;p&gt;HyperFrames takes a route that feels closer to normal web development: the video itself is HTML.&lt;/p&gt;
&lt;p&gt;It puts clips, subtitles, images, audio, timing, and track relationships into HTML elements and &lt;code&gt;data-*&lt;/code&gt; attributes. You can organize scenes like a web page, animate them with familiar frontend tools such as CSS, GSAP, Lottie, and Three.js, then render the result to MP4 from the command line.&lt;/p&gt;
&lt;p&gt;This approach is also friendly to AI agents. Large language models are already good at generating HTML, CSS, and simple scripts. HyperFrames adds skills, plugins, and CLI workflows for agents, so an agent can go from &amp;ldquo;describe a video&amp;rdquo; to &amp;ldquo;create the project, preview it, inspect it, and render it.&amp;rdquo;&lt;/p&gt;
&lt;h2&gt;Core Features&lt;span class="hx-absolute -hx-mt-20" id="core-features"&gt;&lt;/span&gt;
&lt;a href="#core-features" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3&gt;1. Describe Video Structure with HTML&lt;span class="hx-absolute -hx-mt-20" id="1-describe-video-structure-with-html"&gt;&lt;/span&gt;
&lt;a href="#1-describe-video-structure-with-html" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The core input to HyperFrames is an HTML document. Each element uses attributes such as &lt;code&gt;data-start&lt;/code&gt;, &lt;code&gt;data-duration&lt;/code&gt;, and &lt;code&gt;data-track-index&lt;/code&gt; to describe when it appears, how long it lasts, and where it sits in the timeline.&lt;/p&gt;
&lt;p&gt;A simple video can be composed from ordinary HTML elements such as video clips, titles, images, and background music:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stage&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-composition-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;my-video&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1920&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1080&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;video&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;clip-1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-track-index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;intro.mp4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;muted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;playsinline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;clip&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-track-index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Welcome to HyperFrames
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;audio&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-start&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-duration&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-track-index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;data-volume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;0.5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;music.wav&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;audio&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The benefit is a low learning curve. You do not need to learn a new video-editing format first, and you do not have to rewrite everything as React components.&lt;/p&gt;
&lt;h3&gt;2. Browser Preview, Local MP4 Rendering&lt;span class="hx-absolute -hx-mt-20" id="2-browser-preview-local-mp4-rendering"&gt;&lt;/span&gt;
&lt;a href="#2-browser-preview-local-mp4-rendering" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HyperFrames provides a CLI for project initialization, preview, and rendering:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes init my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes preview
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes render&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;During preview, you inspect the composition in a browser. During rendering, headless Chrome captures frames and passes them to FFmpeg to produce the final video. The official docs emphasize deterministic rendering: the same input should produce the same output, which matters for automation pipelines.&lt;/p&gt;
&lt;h3&gt;3. AI-agent-oriented Workflow&lt;span class="hx-absolute -hx-mt-20" id="3-ai-agent-oriented-workflow"&gt;&lt;/span&gt;
&lt;a href="#3-ai-agent-oriented-workflow" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HyperFrames is not just a CLI. It also provides supporting workflows for AI coding tools. The project README recommends installing skills first:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add heygen-com/hyperframes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;These skills teach agents how to write valid compositions, GSAP timelines, Tailwind v4 browser-runtime styles, and adapters for different animation runtimes.&lt;/p&gt;
&lt;p&gt;The project also provides instructions or plugin entry points for tools such as Claude Code, Cursor, Codex, and Gemini CLI. In other words, &amp;ldquo;AI support&amp;rdquo; is not just a marketing phrase. Agent-friendly initialization, linting, previewing, and rendering are part of the framework&amp;rsquo;s design.&lt;/p&gt;
&lt;h3&gt;4. Support for Multiple Animation and Asset Runtimes&lt;span class="hx-absolute -hx-mt-20" id="4-support-for-multiple-animation-and-asset-runtimes"&gt;&lt;/span&gt;
&lt;a href="#4-support-for-multiple-animation-and-asset-runtimes" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;HyperFrames uses a Frame Adapter pattern to integrate animation runtimes. You can build animations with GSAP, Lottie, CSS animation, Three.js, or the Web Animations API, as long as they can seek frame by frame and participate in deterministic rendering.&lt;/p&gt;
&lt;p&gt;This matters for video automation. Video is not just screen recording. You need a deterministic frame at a specific timestamp. HyperFrames abstracts the relationship between &amp;ldquo;how the page plays&amp;rdquo; and &amp;ldquo;how the renderer captures frames&amp;rdquo;, allowing different animation technologies to enter the same video-generation pipeline.&lt;/p&gt;
&lt;h3&gt;5. Built-in Component Registry and Multiple Packages&lt;span class="hx-absolute -hx-mt-20" id="5-built-in-component-registry-and-multiple-packages"&gt;&lt;/span&gt;
&lt;a href="#5-built-in-component-registry-and-multiple-packages" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The project provides 50+ ready-to-use blocks and components, such as social-media overlays, shader transitions, data visualization, and cinematic effects. They can be added through commands:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes add flash-through-white
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes add instagram-follow
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes add data-chart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;From the repository structure, HyperFrames is a monorepo with several key packages:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Package&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;hyperframes&lt;/code&gt; / &lt;code&gt;@hyperframes/cli&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CLI for init, preview, lint, and render&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/core&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Types, parser, generator, linter, runtime, and frame adapters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/engine&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Puppeteer + FFmpeg based page-to-video rendering engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/producer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full rendering pipeline, including capture, encoding, and audio mixing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/studio&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Browser-side composition editor UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/player&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Embeddable &lt;code&gt;&amp;lt;hyperframes-player&amp;gt;&lt;/code&gt; Web Component&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;@hyperframes/shader-transitions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;WebGL shader transitions for compositions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Official Video Examples&lt;span class="hx-absolute -hx-mt-20" id="official-video-examples"&gt;&lt;/span&gt;
&lt;a href="#official-video-examples" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes init my-video --example warm-grain&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Video link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Warm Grain&lt;/td&gt;
&lt;td&gt;Brand / lifestyle&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/warm-grain.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/warm-grain.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Play Mode&lt;/td&gt;
&lt;td&gt;Social media / product launch&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/play-mode.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/play-mode.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Swiss Grid&lt;/td&gt;
&lt;td&gt;Enterprise / technology / data&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/swiss-grid.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/swiss-grid.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kinetic Type&lt;/td&gt;
&lt;td&gt;Title card / promo&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/kinetic-type.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/kinetic-type.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decision Tree&lt;/td&gt;
&lt;td&gt;Explainer video / tutorial&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/decision-tree.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/decision-tree.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product Promo&lt;/td&gt;
&lt;td&gt;Product showcase&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/product-promo.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/product-promo.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NYT Graph&lt;/td&gt;
&lt;td&gt;Data story / chart video&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/nyt-graph.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/nyt-graph.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vignelli&lt;/td&gt;
&lt;td&gt;Vertical title / announcement&lt;/td&gt;
&lt;td&gt;&lt;a href="https://static.heygen.ai/hyperframes-oss/docs/images/templates/vignelli.mp4" target="_blank" rel="noopener"&gt;https://static.heygen.ai/hyperframes-oss/docs/images/templates/vignelli.mp4&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Who Is It For?&lt;span class="hx-absolute -hx-mt-20" id="who-is-it-for"&gt;&lt;/span&gt;
&lt;a href="#who-is-it-for" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;HyperFrames is a good fit for several scenarios:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend developers who want to generate video with code&lt;/strong&gt;&lt;br&gt;
If you already know HTML, CSS, and JavaScript, the mental model is easy to pick up.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Teams that need batch-generated marketing, tutorial, or data videos&lt;/strong&gt;&lt;br&gt;
For example, turning CSV files into animated charts, product docs into short videos, or templates into many personalized variants.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;People building AI-agent content production workflows&lt;/strong&gt;&lt;br&gt;
Its CLI, skills, and plugin design all lean toward automation, making it suitable as an execution layer for agent-generated video.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Teams that need reproducible video generation pipelines&lt;/strong&gt;&lt;br&gt;
Compared with manual editing tools, HyperFrames is easier to run from scripts, CI, Docker, or backend jobs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Quick Start&lt;span class="hx-absolute -hx-mt-20" id="quick-start"&gt;&lt;/span&gt;
&lt;a href="#quick-start" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;If you want an AI agent to participate in video generation, the official recommendation is to install the skills first:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx skills add heygen-com/hyperframes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Then you can ask the agent to create a video with &lt;code&gt;/hyperframes&lt;/code&gt; context, for example:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Using /hyperframes, create a 10-second product intro with a fade-in title, a background video, and background music.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If you want to create a project manually, use the CLI:&lt;/p&gt;
&lt;div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes init my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; my-video
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes preview
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npx hyperframes render --output output.mp4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50"
title="Copy code"
&gt;
&lt;div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Prepare these locally:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js &amp;gt;= 22&lt;/li&gt;
&lt;li&gt;FFmpeg&lt;/li&gt;
&lt;li&gt;an environment that can run Chromium / Puppeteer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;span class="hx-absolute -hx-mt-20" id="conclusion"&gt;&lt;/span&gt;
&lt;a href="#conclusion" class="subheading-anchor" aria-label="Permalink for this section"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;The core value of HyperFrames is not &amp;ldquo;another video editor.&amp;rdquo; It brings video generation back into the web stack: HTML handles structure, CSS and animation libraries handle presentation, the browser handles rendering, and FFmpeg handles output.&lt;/p&gt;
&lt;p&gt;For developers, that means videos can be generated, versioned, and automated like web pages. For AI agents, it provides a target format that is easier to understand and operate.&lt;/p&gt;
&lt;p&gt;If you are working on content automation, batch video generation, data videos, or text-to-renderable-video workflows for AI agents, HyperFrames is an open-source project worth watching.&lt;/p&gt;</description></item></channel></rss>