<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: VibeiDE</title>
    <description>The latest articles on DEV Community by VibeiDE (@vibeidedev).</description>
    <link>https://dev.to/vibeidedev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4227145%2F65ad46e5-bb97-4b2b-bf08-967c87f3aa08.png</url>
      <title>DEV Community: VibeiDE</title>
      <link>https://dev.to/vibeidedev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vibeidedev"/>
    <language>en</language>
    <item>
      <title>Codex exec: execute Codex non-interactively in scripts and CI</title>
      <dc:creator>VibeiDE</dc:creator>
      <pubDate>Wed, 04 Nov 2026 21:14:35 +0000</pubDate>
      <link>https://dev.to/vibeidedev/codex-exec-execute-codex-non-interactively-in-scripts-and-ci-4g50</link>
      <guid>https://dev.to/vibeidedev/codex-exec-execute-codex-non-interactively-in-scripts-and-ci-4g50</guid>
      <description>&lt;p&gt;Originally published on &lt;a href="https://vibeide.dev/blog/codex-exec/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;vibeide.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most people meet Codex in its interactive terminal UI. The same agent also runs without that UI: &lt;code&gt;codex exec&lt;/code&gt; takes a prompt, works through the task, prints the final answer and exits. That makes it the piece you use in shell scripts, git hooks, cron jobs and CI pipelines, anywhere nobody is sitting at the keyboard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick answer:&lt;/strong&gt; run &lt;code&gt;codex exec "your task"&lt;/code&gt; inside a Git repository. It is read-only by default, so add &lt;code&gt;--sandbox workspace-write&lt;/code&gt; when the task must edit files, and &lt;code&gt;-o result.md&lt;/code&gt; to save only the final answer.&lt;/p&gt;

&lt;p&gt;This guide covers what &lt;code&gt;codex exec&lt;/code&gt; does by default, how to give it more or less permission, how to get output a script can parse, how to continue a run with &lt;code&gt;codex exec resume&lt;/code&gt;, and how to run it safely in CI. Commands and flags follow the official &lt;a href="https://learn.chatgpt.com/docs/non-interactive-mode" rel="noopener noreferrer"&gt;non-interactive mode documentation&lt;/a&gt; and the &lt;a href="https://github.com/openai/codex" rel="noopener noreferrer"&gt;Codex source code&lt;/a&gt; as of October 2026. If Codex is not installed yet, start with our guide to &lt;a href="https://vibeide.dev/blog/install-codex-cli/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;installing the Codex CLI&lt;/a&gt;. Claude Code has the same idea in &lt;code&gt;claude -p&lt;/code&gt;, covered in our guide to &lt;a href="https://vibeide.dev/blog/claude-code-headless-mode/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;Claude Code headless mode&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What codex exec does
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;codex exec&lt;/code&gt; (alias &lt;code&gt;codex e&lt;/code&gt;) runs one task non-interactively. You pass the instructions as an argument, Codex reads the repository, runs commands inside its sandbox and stops when the task is done.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"summarize the repository structure and list the top 5 risky areas"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two details make it script friendly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Progress goes to stderr, the answer goes to stdout.&lt;/strong&gt; While Codex works, its steps stream to stderr. Only the final agent message is printed to stdout, so you can pipe or redirect it without filtering anything out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It expects a Git repository.&lt;/strong&gt; Codex refuses to run outside one, as a guard against destructive changes in folders you cannot roll back. Add &lt;code&gt;--skip-git-repo-check&lt;/code&gt; when you deliberately run it elsewhere, such as a scratch directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because stdout carries only the answer, saving a result is a plain redirect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"generate release notes for the last 10 commits"&lt;/span&gt; | &lt;span class="nb"&gt;tee &lt;/span&gt;release-notes.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Feed it input from stdin
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;codex exec&lt;/code&gt; reads standard input in two ways. If you pass a prompt and pipe data in, the piped text becomes context for that prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff main...HEAD | codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"explain what this diff changes, file by file"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; diff-notes.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you pass &lt;code&gt;-&lt;/code&gt; as the prompt, or no prompt at all, stdin becomes the whole prompt. That is useful when a script builds the instructions from a template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;prompts/triage.md | codex &lt;span class="nb"&gt;exec&lt;/span&gt; -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;resume&lt;/code&gt; and &lt;code&gt;review&lt;/code&gt; subcommands described below accept &lt;code&gt;-&lt;/code&gt; the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Permissions: read-only unless you say otherwise
&lt;/h2&gt;

&lt;p&gt;The most important default to know: &lt;strong&gt;&lt;code&gt;codex exec&lt;/code&gt; runs in a read-only sandbox.&lt;/strong&gt; Codex can read files and run commands that only look around, but it cannot change your working tree. That is safe for summaries, reviews and questions, and it is why a first attempt at "fix the failing test" often reports a fix without applying it.&lt;/p&gt;

&lt;p&gt;Raise the level per run with &lt;code&gt;--sandbox&lt;/code&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sandbox&lt;/th&gt;
&lt;th&gt;What Codex may do&lt;/th&gt;
&lt;th&gt;Typical use&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; (default)&lt;/td&gt;
&lt;td&gt;Read files, no writes&lt;/td&gt;
&lt;td&gt;Summaries, reviews, questions&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;Edit files inside the project&lt;/td&gt;
&lt;td&gt;Fixes, refactors, generated code&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;No sandbox at all&lt;/td&gt;
&lt;td&gt;Disposable containers only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--sandbox&lt;/span&gt; workspace-write &lt;span class="s2"&gt;"fix the failing test in tests/api.test.ts"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Older scripts often use &lt;code&gt;--full-auto&lt;/code&gt;. The documentation calls it a deprecated compatibility flag that prints a warning, so write &lt;code&gt;--sandbox workspace-write&lt;/code&gt; in new scripts. The flag &lt;code&gt;--dangerously-bypass-approvals-and-sandbox&lt;/code&gt; (alias &lt;code&gt;--yolo&lt;/code&gt;) removes every protection; keep it for throwaway environments that you would happily delete. Our &lt;a href="https://vibeide.dev/blog/codex-sandbox/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;guide to the Codex sandbox&lt;/a&gt; explains the modes, network access, extra writable folders and approval policies in more detail.&lt;/p&gt;

&lt;p&gt;Two more flags help when you want a predictable run regardless of whose machine it is: &lt;code&gt;--ignore-user-config&lt;/code&gt; skips your personal &lt;code&gt;config.toml&lt;/code&gt; (authentication still works), and &lt;code&gt;--ignore-rules&lt;/code&gt; skips user and project execpolicy rule files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get output a script can use
&lt;/h2&gt;

&lt;p&gt;Plain text on stdout is enough for notes and summaries. When another program has to act on the result, &lt;code&gt;codex exec&lt;/code&gt; has three better options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write the final message to a file&lt;/strong&gt; with &lt;code&gt;-o&lt;/code&gt; (long form &lt;code&gt;--output-last-message&lt;/code&gt;). The terminal still shows progress, and the file gets only the answer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; summary.md &lt;span class="s2"&gt;"summarize the changes on this branch for a pull request description"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Stream events as JSON Lines&lt;/strong&gt; with &lt;code&gt;--json&lt;/code&gt;. Every step becomes one JSON object on stdout: &lt;code&gt;thread.started&lt;/code&gt;, &lt;code&gt;turn.started&lt;/code&gt;, &lt;code&gt;item.started&lt;/code&gt; and &lt;code&gt;item.completed&lt;/code&gt; for commands, file changes and messages, and finally &lt;code&gt;turn.completed&lt;/code&gt; (with token usage) or &lt;code&gt;turn.failed&lt;/code&gt;. A short &lt;code&gt;jq&lt;/code&gt; filter pulls out the agent's messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt; &lt;span class="s2"&gt;"summarize the repo structure"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'select(.type == "item.completed" and .item.type == "agent_message") | .item.text'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;thread.started&lt;/code&gt; event carries a &lt;code&gt;thread_id&lt;/code&gt;, which is the ID you need to resume that run later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Force a shape with a JSON Schema.&lt;/strong&gt; &lt;code&gt;--output-schema&lt;/code&gt; takes a schema file and makes the final response match it, so a script gets predictable fields instead of prose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"project_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"programming_languages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"array"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"project_name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"programming_languages"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"additionalProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"Extract project metadata"&lt;/span&gt; &lt;span class="nt"&gt;--output-schema&lt;/span&gt; ./schema.json &lt;span class="nt"&gt;-o&lt;/span&gt; ./project-metadata.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combining &lt;code&gt;--output-schema&lt;/code&gt; with &lt;code&gt;-o&lt;/code&gt; gives you a JSON file you can load directly in the next step of a pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continue a run with codex exec resume
&lt;/h2&gt;

&lt;p&gt;Each &lt;code&gt;codex exec&lt;/code&gt; run is saved as a session, just like an interactive one. &lt;code&gt;codex exec resume&lt;/code&gt; sends a follow-up prompt into that session, so Codex keeps everything it already read and decided:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="s2"&gt;"review the change for race conditions"&lt;/span&gt;
codex &lt;span class="nb"&gt;exec &lt;/span&gt;resume &lt;span class="nt"&gt;--last&lt;/span&gt; &lt;span class="s2"&gt;"fix the race conditions you found"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--last&lt;/code&gt; picks the most recent session. Pass a session ID (or a thread name) to target a specific one, and add &lt;code&gt;--all&lt;/code&gt; if the session was started in another directory, since the lookup filters by the current directory by default. In scripts, read the ID from the &lt;code&gt;thread.started&lt;/code&gt; event of the first run instead of relying on &lt;code&gt;--last&lt;/code&gt;, because a second job on the same machine could create a newer session in between.&lt;/p&gt;

&lt;p&gt;If you do not want a run saved at all, add &lt;code&gt;--ephemeral&lt;/code&gt;. Nothing is written to disk, which suits one-off CI jobs, but it also means that run cannot be resumed. Our &lt;a href="https://vibeide.dev/blog/codex-resume/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;guide to codex resume&lt;/a&gt; covers the interactive picker, forks and naming sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review code with codex exec review
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;codex exec review&lt;/code&gt; runs a code review without the UI. It can review your uncommitted changes, a branch against its base, or a single commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex &lt;span class="nb"&gt;exec &lt;/span&gt;review &lt;span class="nt"&gt;--uncommitted&lt;/span&gt;
codex &lt;span class="nb"&gt;exec &lt;/span&gt;review &lt;span class="nt"&gt;--base&lt;/span&gt; main
codex &lt;span class="nb"&gt;exec &lt;/span&gt;review &lt;span class="nt"&gt;--commit&lt;/span&gt; 1a2b3c4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can add custom review instructions as a prompt, for example asking it to focus on error handling. Because a review reads code rather than changing it, this is a low-risk first step if you are trying &lt;code&gt;codex exec&lt;/code&gt; in a pre-push hook.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run codex exec in CI
&lt;/h2&gt;

&lt;p&gt;The same commands work in CI with a few adjustments:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Authenticate with an API key.&lt;/strong&gt; By default &lt;code&gt;codex exec&lt;/code&gt; reuses saved CLI credentials. On a runner, set &lt;code&gt;CODEX_API_KEY&lt;/code&gt; only for the one command that needs it, for example &lt;code&gt;CODEX_API_KEY=&amp;lt;api-key&amp;gt; codex exec --json "triage open bug reports"&lt;/code&gt;. The documentation (as of October 2026) warns against setting it at the job level in workflows that run code from the repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose the sandbox deliberately.&lt;/strong&gt; Leave the default read-only sandbox for review and summary jobs. Use &lt;code&gt;--sandbox workspace-write&lt;/code&gt; only for jobs that must edit files, and let the pipeline open a pull request so a person reviews the change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make runs reproducible.&lt;/strong&gt; &lt;code&gt;--ignore-user-config&lt;/code&gt; and &lt;code&gt;--ephemeral&lt;/code&gt; keep a runner's leftovers from changing behavior or piling up session files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On GitHub, use the action.&lt;/strong&gt; The docs recommend the Codex GitHub Action (&lt;code&gt;openai/codex-action@v1&lt;/code&gt;) instead of installing Codex and passing API keys to shell steps yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check MCP servers before you rely on them.&lt;/strong&gt; If the job needs tools from an MCP server, &lt;code&gt;codex mcp list --json&lt;/code&gt; shows what the runner has configured. Our &lt;a href="https://vibeide.dev/blog/codex-mcp/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;Codex MCP guide&lt;/a&gt; covers adding servers, tokens from environment variables and startup timeouts.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep project instructions in &lt;code&gt;AGENTS.md&lt;/code&gt; so CI runs follow the same build and test commands as your local sessions. Our guide to &lt;a href="https://vibeide.dev/blog/agents-md-codex/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;AGENTS.md for Codex&lt;/a&gt; explains how Codex finds those files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common problems
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Codex describes a fix but no file changed&lt;/td&gt;
&lt;td&gt;Default read-only sandbox&lt;/td&gt;
&lt;td&gt;Add &lt;code&gt;--sandbox workspace-write&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refuses to start in a folder&lt;/td&gt;
&lt;td&gt;Not a Git repository&lt;/td&gt;
&lt;td&gt;Run inside a repo or add &lt;code&gt;--skip-git-repo-check&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Script captures progress noise&lt;/td&gt;
&lt;td&gt;Reading stderr as well&lt;/td&gt;
&lt;td&gt;Read stdout only, or use &lt;code&gt;-o&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warning about &lt;code&gt;--full-auto&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Deprecated flag&lt;/td&gt;
&lt;td&gt;Replace with &lt;code&gt;--sandbox workspace-write&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;resume --last&lt;/code&gt; picks the wrong run&lt;/td&gt;
&lt;td&gt;Another run is newer&lt;/td&gt;
&lt;td&gt;Resume by the &lt;code&gt;thread_id&lt;/code&gt; from &lt;code&gt;--json&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Different results on CI and laptop&lt;/td&gt;
&lt;td&gt;Personal config loaded&lt;/td&gt;
&lt;td&gt;Add &lt;code&gt;--ignore-user-config&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When a flag behaves differently from this guide, run &lt;code&gt;codex exec --help&lt;/code&gt;: the installed version is the source of truth for its own options.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do I execute Codex without the interactive UI?
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;codex exec "your task"&lt;/code&gt; inside a Git repository. Codex works through the task, prints progress to stderr, prints only the final message to stdout and exits, so the command fits shell scripts, git hooks and CI steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does codex exec change my files?
&lt;/h3&gt;

&lt;p&gt;Not by default. It runs in a read-only sandbox, so it can read and inspect but not edit. Add &lt;code&gt;--sandbox workspace-write&lt;/code&gt; for a run that has to change files inside the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I capture the answer in a script?
&lt;/h3&gt;

&lt;p&gt;Redirect stdout, or use &lt;code&gt;-o answer.md&lt;/code&gt; to write the final message to a file while progress stays in the terminal. For a fixed JSON shape add &lt;code&gt;--output-schema schema.json&lt;/code&gt;; for every step as events add &lt;code&gt;--json&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can codex exec run outside a Git repository?
&lt;/h3&gt;

&lt;p&gt;Only with &lt;code&gt;--skip-git-repo-check&lt;/code&gt;. The repository check guards against changes you cannot roll back, so skip it only in folders you can safely throw away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where VibeiDE fits
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;codex exec&lt;/code&gt; is ideal for unattended jobs. For the interactive side of the same work, VibeiDE is a desktop app that coordinates the Codex, Claude Code and OpenCode CLIs you already installed, signed in with your own accounts. Codex runs in an embedded terminal that shows the original CLI interface, each project has its own task queue, each task keeps its saved provider conversation so a follow-up continues it instead of re-explaining the context, and finished tasks wait in Ready for review. See the &lt;a href="https://vibeide.dev/for/codex/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;Codex page&lt;/a&gt; or how the &lt;a href="https://vibeide.dev/use-cases/ai-agent-task-queue/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;task queue&lt;/a&gt; works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;codex exec&lt;/code&gt; runs one task without the UI: progress on stderr, the final message on stdout.&lt;/li&gt;
&lt;li&gt;It is read-only by default; add &lt;code&gt;--sandbox workspace-write&lt;/code&gt; when the task must edit files, and drop the deprecated &lt;code&gt;--full-auto&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;-o&lt;/code&gt; for a clean answer file, &lt;code&gt;--json&lt;/code&gt; for events a script can parse, and &lt;code&gt;--output-schema&lt;/code&gt; for a fixed JSON shape.&lt;/li&gt;
&lt;li&gt;Continue a run with &lt;code&gt;codex exec resume --last&lt;/code&gt;, or by &lt;code&gt;thread_id&lt;/code&gt; in scripts; &lt;code&gt;--ephemeral&lt;/code&gt; skips saving.&lt;/li&gt;
&lt;li&gt;In CI, set &lt;code&gt;CODEX_API_KEY&lt;/code&gt; only for the command that needs it, keep the sandbox tight, and prefer &lt;code&gt;openai/codex-action@v1&lt;/code&gt; on GitHub.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>codex</category>
      <category>ai</category>
      <category>cli</category>
      <category>devops</category>
    </item>
    <item>
      <title>OpenCode desktop app: official app, web UI and GUI options</title>
      <dc:creator>VibeiDE</dc:creator>
      <pubDate>Wed, 04 Nov 2026 21:10:15 +0000</pubDate>
      <link>https://dev.to/vibeidedev/opencode-desktop-app-official-app-web-ui-and-gui-options-36f2</link>
      <guid>https://dev.to/vibeidedev/opencode-desktop-app-official-app-web-ui-and-gui-options-36f2</guid>
      <description>&lt;p&gt;Originally published on &lt;a href="https://vibeide.dev/blog/opencode-desktop-app/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;vibeide.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, OpenCode has an official desktop app. As of October 2026, OpenCode Desktop is a free download for macOS, Windows and Linux on the &lt;a href="https://opencode.ai/download" rel="noopener noreferrer"&gt;OpenCode download page&lt;/a&gt;, and &lt;code&gt;opencode web&lt;/code&gt; opens the same agent in your browser. If you want a graphical view of several OpenCode sessions next to Claude Code and Codex, a multi-agent desktop app is the other option.&lt;/p&gt;

&lt;p&gt;This guide compares every way to run OpenCode outside the plain terminal, shows how to install each one, and helps you pick the right one for how you work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is there an OpenCode desktop app?
&lt;/h2&gt;

&lt;p&gt;Yes. The download page lists &lt;strong&gt;OpenCode Desktop&lt;/strong&gt; next to the terminal version, as of October 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Package listed on the download page&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;macOS, Apple Silicon&lt;/td&gt;
&lt;td&gt;DMG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS, Intel&lt;/td&gt;
&lt;td&gt;DMG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows x64&lt;/td&gt;
&lt;td&gt;NSIS installer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows ARM64&lt;/td&gt;
&lt;td&gt;NSIS installer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;.deb and .rpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS with Homebrew&lt;/td&gt;
&lt;td&gt;&lt;code&gt;brew install --cask opencode-desktop&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The desktop app is a front end for the same OpenCode agent, so you still need a provider or a free model. If you have not set one up yet, start with &lt;a href="https://vibeide.dev/blog/install-opencode/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;installing OpenCode&lt;/a&gt; and &lt;a href="https://vibeide.dev/blog/opencode-models/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;choosing a model&lt;/a&gt;, then open the desktop app on your project folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I install the OpenCode desktop app?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://opencode.ai/download" rel="noopener noreferrer"&gt;OpenCode download page&lt;/a&gt; and pick the build for your system under OpenCode Desktop.&lt;/li&gt;
&lt;li&gt;On macOS you can install it from the terminal instead:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; opencode-desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;On Windows, run the NSIS installer for x64 or ARM64. If you also use the terminal version on Windows, read &lt;a href="https://vibeide.dev/blog/opencode-windows/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;OpenCode on Windows&lt;/a&gt; for PowerShell and WSL details.&lt;/li&gt;
&lt;li&gt;On Linux, install the &lt;code&gt;.deb&lt;/code&gt; (Debian, Ubuntu) or &lt;code&gt;.rpm&lt;/code&gt; (Fedora, openSUSE) package with your package manager.&lt;/li&gt;
&lt;li&gt;Open a project folder, sign in to a provider or pick a free model, and send a first prompt to check that everything works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you only want to try OpenCode without paying for a model, the &lt;a href="https://vibeide.dev/blog/opencode-free-models/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;free models guide&lt;/a&gt; lists what OpenCode Zen offers at no cost right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I use OpenCode in the browser?
&lt;/h2&gt;

&lt;p&gt;Yes. The &lt;code&gt;opencode web&lt;/code&gt; command starts a local server and opens a web interface in your default browser, according to the &lt;a href="https://opencode.ai/docs/web/" rel="noopener noreferrer"&gt;OpenCode web docs&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;opencode web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default it listens on &lt;code&gt;127.0.0.1&lt;/code&gt; with a random free port. A few flags matter:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag or variable&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--port 4096&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Use a fixed port&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--hostname 0.0.0.0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Listen on all interfaces, for access from another device&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--mdns&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Advertise the server on the local network as &lt;code&gt;opencode.local&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OPENCODE_SERVER_PASSWORD&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Protect the server with a password&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The docs warn that the server is unsecured without a password, which is fine on localhost and risky on a network. Set &lt;code&gt;OPENCODE_SERVER_PASSWORD&lt;/code&gt; before you use &lt;code&gt;--hostname 0.0.0.0&lt;/code&gt;. You can also attach a terminal to a running server with &lt;code&gt;opencode attach http://localhost:4096&lt;/code&gt;, so the browser and the terminal show the same sessions. On Windows the docs suggest running &lt;code&gt;opencode web&lt;/code&gt; from WSL rather than PowerShell.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I run OpenCode inside my editor?
&lt;/h2&gt;

&lt;p&gt;Yes, in two ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IDE extension.&lt;/strong&gt; OpenCode has an extension for VS Code and forks such as Cursor, Windsurf and VSCodium. Install it from the extension marketplace, then press Cmd+Esc on macOS or Ctrl+Esc on Windows and Linux to open OpenCode in a split terminal. It shares your current selection or tab with the agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACP editors.&lt;/strong&gt; &lt;code&gt;opencode acp&lt;/code&gt; runs OpenCode as an Agent Client Protocol server, so editors that speak ACP can host it as their agent. The &lt;a href="https://opencode.ai/docs/acp/" rel="noopener noreferrer"&gt;ACP docs&lt;/a&gt; list Zed, JetBrains IDEs, Avante.nvim and CodeCompanion.nvim. In Zed you can add it from the ACP registry with the &lt;code&gt;zed: acp registry&lt;/code&gt; command, or add this to &lt;code&gt;~/.config/zed/settings.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agent_servers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"OpenCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"custom"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"opencode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"acp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The docs note that a few slash commands, such as &lt;code&gt;/undo&lt;/code&gt; and &lt;code&gt;/redo&lt;/code&gt;, are not supported over ACP.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenCode GUI options compared
&lt;/h2&gt;

&lt;p&gt;Every option below runs the same OpenCode agent. They differ in where the window lives and how many sessions you can see at once (as of October 2026).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Where it runs&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Several sessions at once&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenCode Desktop&lt;/td&gt;
&lt;td&gt;Native app on macOS, Windows, Linux&lt;/td&gt;
&lt;td&gt;A GUI for one agent&lt;/td&gt;
&lt;td&gt;Sessions inside one app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;opencode web&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your browser, served locally&lt;/td&gt;
&lt;td&gt;Remote or second-screen use&lt;/td&gt;
&lt;td&gt;Sessions on one server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IDE extension&lt;/td&gt;
&lt;td&gt;VS Code, Cursor, Windsurf, VSCodium terminal&lt;/td&gt;
&lt;td&gt;Editing code next to the agent&lt;/td&gt;
&lt;td&gt;One terminal per session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACP in Zed or JetBrains&lt;/td&gt;
&lt;td&gt;The editor's agent panel&lt;/td&gt;
&lt;td&gt;Staying inside your editor&lt;/td&gt;
&lt;td&gt;Editor threads&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Squad&lt;/td&gt;
&lt;td&gt;Terminal, tmux sessions&lt;/td&gt;
&lt;td&gt;Keyboard-driven multi-agent work&lt;/td&gt;
&lt;td&gt;Yes, one tmux session per agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VibeiDE&lt;/td&gt;
&lt;td&gt;Desktop app for macOS and Windows&lt;/td&gt;
&lt;td&gt;Queuing and reviewing work across OpenCode, Claude Code and Codex&lt;/td&gt;
&lt;td&gt;Yes, per project queues&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you only use OpenCode, the official desktop app or &lt;code&gt;opencode web&lt;/code&gt; is the simplest choice. The question changes when OpenCode is one of several agents you run every day. For a wider list of multi-agent apps, see &lt;a href="https://vibeide.dev/blog/conductor-alternatives/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;Conductor alternatives&lt;/a&gt; and &lt;a href="https://vibeide.dev/blog/claude-code-gui/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;Claude Code GUI options&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a multi-agent desktop app fits better
&lt;/h2&gt;

&lt;p&gt;The official front ends are built around one agent. If you run OpenCode for cheap or free models, Claude Code for hard reasoning and Codex for batch work, you end up with three windows and no single place that says what is running, what is waiting and what is finished.&lt;/p&gt;

&lt;p&gt;VibeiDE is a desktop app that coordinates the Codex, Claude Code and OpenCode CLIs you already installed; macOS is fully validated, Windows is supported and the Linux build is experimental. OpenCode runs headless with recorded activity, while Codex and Claude Code run in embedded terminals. Each project has its own task queue, a task starts when its provider has a free slot, and finished tasks wait in Ready for review. You sign in to your own provider accounts, so model costs stay with your providers. See &lt;a href="https://vibeide.dev/for/opencode/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;VibeiDE for OpenCode&lt;/a&gt; for the details.&lt;/p&gt;

&lt;p&gt;A practical split:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use the OpenCode desktop app or &lt;code&gt;opencode web&lt;/code&gt; while you explore a single change.&lt;/li&gt;
&lt;li&gt;Move to a queue when you have more independent tasks than you can watch, for example several fixes on free models from &lt;a href="https://vibeide.dev/use-cases/free-ai-coding-models/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=outreach"&gt;the free AI coding models page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Review each finished task before you start the next one that depends on it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is the OpenCode desktop app free?
&lt;/h3&gt;

&lt;p&gt;The desktop app is a free download. You still pay your model provider unless you use a free model, and free model lists change often.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the OpenCode desktop app replace the terminal version?
&lt;/h3&gt;

&lt;p&gt;No. The download page offers the terminal version and the desktop app side by side, and you can keep using the terminal, the web UI or the IDE extension on the same project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there an OpenCode GUI for Linux?
&lt;/h3&gt;

&lt;p&gt;Yes. As of October 2026 the download page lists &lt;code&gt;.deb&lt;/code&gt; and &lt;code&gt;.rpm&lt;/code&gt; packages for OpenCode Desktop, and &lt;code&gt;opencode web&lt;/code&gt; works on Linux too.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I use OpenCode from my phone or another computer?
&lt;/h3&gt;

&lt;p&gt;Run &lt;code&gt;opencode web --hostname 0.0.0.0&lt;/code&gt; with &lt;code&gt;OPENCODE_SERVER_PASSWORD&lt;/code&gt; set, then open the server address from the other device on the same network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OpenCode Desktop is the official GUI, available for macOS, Windows and Linux as of October 2026.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;opencode web&lt;/code&gt; gives you a browser UI; set a password before exposing it beyond localhost.&lt;/li&gt;
&lt;li&gt;The IDE extension and ACP put OpenCode inside VS Code forks, Zed and JetBrains IDEs.&lt;/li&gt;
&lt;li&gt;For OpenCode plus Claude Code and Codex in one place, use a multi-agent app with queues and review, such as VibeiDE.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opencode</category>
      <category>ai</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
