English | 繁體中文
An open-source tool that lets you use ChatGPT Chat as a local coding agent. No reverse engineering, no API, no Codex, no Work mode. A ChatGPT Plus subscription is enough.
This is an independent open-source project and is not affiliated with or endorsed by OpenAI. We built it as a personal tool and decided to open-source it. Some features are still buggy and may cause unexpected behavior. Use it at your own risk. We are not responsible for any loss caused by this tool. It is strongly recommended to run it inside a VM or container.
Codex has a very generous weekly quota (reset usage frequently) compared to Antigravity (good at good morning) and Claude Code (RIP 5h quota 💀), that's why we love OpenAI so much.
However, the quota runs out very quickly if you work on a large project.

We used up our Codex quota on the first day after it reset
Then you need to wait another 7 days. What are you going to do for the rest of the week?
Here's the solution: most people with a Plus subscription do not use even 10% of their weekly thinking messages.
So why not use your 3,000 weekly messages for coding?
That's the idea behind CatDesk! It gives ChatGPT Web tools like write and run_command to edit files on your computer.

GPT-5.5: 3,000 messages/week
GPT-5.6: "existing ChatGPT limits", unclear but we have never hit the limit
GPT-6 Astra: not available for Plus in Chat mode
Note
Although custom connectors are a valid and normal official feature of ChatGPT Chat mode, which is totally fine to use and will not lead to a ban, I believe OpenAI will eventually kill this kind of tool because of the lack of compute. It will probably:
- Introduce usage limits for custom connectors
- Merge Chat and Work Mode, with no separate limits anymore
There have been some signs recently. For example, the reasoning time for GPT-5.6 Sol High has been reduced from 102 mins → 25 mins, and GPT-6 Sol/Astra are not being added to Chat mode for Plus users (at least for now). I believe this kind of project will not last long (maybe until the end of 2026?), but I'll try my best to maintain CatDesk in the meantime.
- A ChatGPT Plus or above subscription is required.
- CatDesk runs as a local MCP server on your computer. It has the ability to run commands and edit files, just like Codex.
- You can connect ChatGPT Web to CatDesk using a Custom Connector, which is a feature available only to Plus and Pro users.
- Done! Now ChatGPT Web can control your computer and code on it.
In short,
ChatGPT Web + CatDesk
= a stripped-down version of Codex
= OpenClaw without cron and other active utilities
We tried this with GPT-5.2 before, and the results were poor. However, GPT-5.4 Thinking is now really good at tool calling and computer use. The first time we tried it with GPT-5.4, we were surprised by how well it worked. GPT-5.5 and GPT-5.6 are even smoother, and GPT-5.6 is extremely good at using CatDesk. It's also very fast.
| ChatGPT Chat + CatDesk | Codex | OpenAI API | |
|---|---|---|---|
| Usage | 3,000 messages/week | Generous weekly quota | Pay as you go |
| Pros | Stable, no extra fee, and nearly unlimited* quota | Stable and no extra fee | Stable |
| Cons | Not as smooth as native Codex | Runs out very quickly | Tokens are expensive |
*Let's say you sleep 6 hours a day and use CatDesk every day. In that case, you can send 3,000 / (24 - 6) / 7 = 23.8 messages per hour. Since thinking and tool calls take time, it is very difficult to use up your weekly 3,000 message limit.
If you don't want to use CatDesk, here are some similar projects you can try:
| Project | Description |
|---|---|
| Desktop Commander | General-purpose MCP server for local filesystem, terminal, process management, editing, and automation. |
| DevSpace | Self-hosted MCP server that brings a Codex-style coding workflow to ChatGPT and other MCP-capable hosts. |
| CodexPro | Local MCP coding tools for ChatGPT, scoped to explicitly allowed repositories. |
| ChatGPT Local Coder | Self-hosted MCP server that gives ChatGPT Web filesystem, shell, Git, patching, and project-context tools. |
| Local Coding Agent | Local MCP coding workspace for ChatGPT Web and other MCP clients. |
| Proxide | Agent-agnostic workspace bridge for using web-based models with local repositories through MCP or a browser fallback. |
| codex-mcp | Small MCP server exposing a Codex-like workspace interface over stdio or HTTP. |
Feel free to fork CatDesk and make your own version!
Note
We do not own or maintain any of the projects listed above. They are included here for informational purposes only.
- People who used up their Codex quota on the first few days after it reset (us🥺)
- People who are working on web development and crawlers. (CatDesk enables ChatGPT Web to read elements and control your browser tab through chrome-devtools-mcp integration.)
Caution
This tool is very powerful and can potentially wipe your whole disk or produce unexpected results. Run it inside a VM or container (DevContainer is a good option). Treat it like OpenClaw, keep it containerized and isolated.
-
Install CatDesk globally with npm.
npm i -g catdesk --allow-scripts=catdesk
-
Run CatDesk.
catdesk
Choose
Control Computer,Control Browser, orBoth.On first launch, enter your ngrok authtoken and static domain from the ngrok dashboard. CatDesk will save them for future launches.
-
Wait for the TUI to show the MCP Server URL.
-
In the pop-up window, fill in the connector form:
- Name:
CatDeskor any name you like - MCP Server URL: the full URL shown in CatDesk TUI
- Authentication:
None
- Name:
-
Click
I understand and want to continue. -
Click
Create, then clickConnect.- Permission defaults to Allow read actions. For the smoothest experience, we recommend Allow all actions (equivalent to Codex's
--yolo; use with caution).
- Permission defaults to Allow read actions. For the smoothest experience, we recommend Allow all actions (equivalent to Codex's
-
Add this to your ChatGPT
Custom instructions:
CatDesk is a coding tool and a custom connector. Always use CatDesk if the user wants to do anything related to file operations. Always call `catdesk_instruction` after `list_resources`, and follow the instructions it contains.
- Start using the connector from ChatGPT Web. Some important tips:
- We recommend letting ChatGPT decide which connector to use automatically. You can manually select the connector using
/or@. This way, ChatGPT can only access the connector you selected, which may improve stability. However, the downside is thatweb.searchandweb.openwill be disabled, which means it can't search for the latest information. Thewebtool and a custom connector cannot be used at the same time.
![]() Select CatDesk manually with /
|
![]() Select CatDesk manually with @
|
- To improve performance and avoid high memory usage, we strongly recommend opening a new session for every small feature. Library handoff is disabled by default; enable it in TUI Settings only when ChatGPT Library Search is available and you want cross-chat continuity. When enabled, ask ChatGPT to use
create_handoffbefore switching chats. CatDesk prepares acatdesk_handoff_<workspace-name>_<short-id>.mdartifact containing the current goal, completed work, important decisions, validation, next steps, and Git context; ChatGPT then saves it to the persistent Library instead of writing the workspace. On the next session,catdesk_instructiontells ChatGPT to search Library using the full workspace identity prefixcatdesk_handoff_<workspace-name>_<short-id>, not just the workspace name. With one exact workspace match it reads the handoff and deletes it only after a successful read; with multiple exact matches it asks which one to use first. Do not put credentials, tokens, passwords, or other secrets in a handoff. CatDesk can become extremely laggy after 50+ tool calls.
- If you change MCP-related settings (including the tool mode or enabling/disabling the widget), you will need to start a new chat and refresh CatDesk in settings. The most reliable way is to remove CatDesk and reinstall it (steps 2–7).
![]() Refresh CatDesk in ChatGPT settings |
![]() Remove CatDesk from ChatGPT settings |
| Part | Stack |
|---|---|
| Core | Rust |
| MCP server | Custom implementation (no SDK) |
| MCP protocolVersion | 2026-07-28 |
| Server | Axum + Tokio |
| TUI | Ratatui |
| Tunnel | ngrok |
| Browser control | chrome-devtools-mcp |
| Widget | HTML + JavaScript |
| Distribution | npm |
CatDesk has two local tool modes: multi-tools exposes 10 tools by default (11 when Library handoff is enabled), and read-only exposes 3 tools by default (4 when Library handoff is enabled).
CatDesk's local tools in multi-tools mode are:
| Tool | Type | What it does |
|---|---|---|
catdesk_instruction |
Guide | Returns CatDesk usage instructions and render Binagotchy |
read |
Read | Reads one or more text files from the workspace |
search |
Read | Searches workspace text with rg, grep, or built-in search |
write |
Write | Creates or overwrites a file |
edit |
Write | Applies guarded replace/range edits atomically |
create_handoff |
Read | Optional: prepares a workspace-specific Library handoff without changing the workspace |
delete |
Write | Deletes a file or directory |
run_command |
Shell | Runs a short shell command and waits for completion |
start_command |
Job | Starts a long-running shell command and immediately returns a job ID |
poll_command |
Job | Reads incremental output and status from a background command |
cancel_command |
Job | Stops a background command and its child process tree |
Long-running commands are deliberately decoupled from the lifetime of an MCP HTTP request. Builds, compilation, dependency installation, long test suites, and development servers should use start_command, then poll_command with the returned cursor. Poll responses are bounded; if hasMoreOutput is true, keep polling with nextCursor even after the command reaches a terminal state to drain the remaining buffered output. run_command remains the simpler path for short commands and has a 120-second maximum timeout.
If browser mode is enabled, CatDesk can also expose extra browser/devtools tools. Those are provided by the browser bridge, so the exact list depends on your environment.
search uses rg when it is available, falls back to grep, then falls back to CatDesk's built-in scanner. Installing ripgrep is optional, but gives the best search performance and behavior.
According to the blog and the code, the context window in ChatGPT web is different from Codex.
| Tier | CatDesk + ChatGPT Web (in + out = sum) | Codex CLI (sum) |
|---|---|---|
| Plus | 128K + 128K = 256K | 258K (1M experimental) |
| Pro | 272K + 128K = 400K | 258K (1M experimental) |
![]() The red CSP button |
![]() Enforce CSP in developer mode in Advanced connector settings
|
Yes. Open Advanced connector settings and turn on Enforce CSP in developer mode. That setting removes the red button. CatDesk automatically adds the current ngrok domain to the widget CSP, so the widget should keep working with CSP enforcement enabled.
There doesn't seem to be any obvious pattern for when the connector triggers Connect. We're sure it's not triggered by the tool call count, but we don't know the exact reason.
![]() Connector asks to connect again |
![]() Connector asks to connect again (After you click Continue) |
Looks like it was a bug, and they fixed it 🥳.
Yes, in theory. CatDesk may also work with other apps that support custom remote MCP servers, including Claude. (We don't think anyone will use CatDesk with Claude though, since Claude Chat mode and Claude Code share the same usage limits.)
However, CatDesk is built specifically for ChatGPT Chat and its Custom Connector (They renamed it to Apps, and now they renamed it again and call it Plugins, but to prevent confusion with Application, we still prefer to call it Connector) flow. ChatGPT Chat is the environment CatDesk is designed and tested for, so other apps may not work as smoothly.
CatDesk does not get official token usage numbers from ChatGPT Web. It estimates them locally with o200k_base, the same tokenizer family used by GPT-5.5-style models, so the numbers are useful, but still only estimates.
| Field | Symbol | What it means | Price |
|---|---|---|---|
inputTokens |
↓ |
Tool input ≈ LLM output | ≈ $30.00 / 1M output tokens |
outputTokens |
↑ |
Tool output ≈ LLM input | ≈ $5.00 / 1M input tokens |
totalTokens |
Σ |
inputTokens + outputTokens |
input price + output price |
CatDesk does not count:
- the full ChatGPT conversation
- hidden prompts or reasoning tokens
- other internal tokens on OpenAI's side
The loading animation is only a visual effect. ChatGPT Web does not stream partial MCP tool input/output into CatDesk, so the widget animates locally first and then locks to the estimated values when the real tool result arrives.
Workspace is the root directory CatDesk is allowed to work in.
By default, it is the directory where you launch CatDesk. You can also override it with WORKSPACE_ROOT.
File tools use this directory as their base path, and paths outside the workspace are rejected.
You can put it in 3 places.
- Workspace root
~/.catdesk/AGENTS.md~/.codex/AGENTS.md
CatDesk checks these locations for AGENTS.md in this order. This happens every time catdesk_instruction is called. You can also manually choose which AGENTS.md to use.
- Simply refresh the page and reconnect the connector.
- Stop the response and send the message again.
This is a bug on ChatGPT's side. There is nothing we can do about it, and changing the code will not solve the issue. This bug was probably introduced on Apr 15th.
Caution
Do NOT share the MCP Server URL with anyone. Anyone with the URL can access your computer.
The URL is made of these parts:
| Part | Example | What it means |
|---|---|---|
| Public URL | https://xxxx.ngrok-free.dev |
Your ngrok static domain |
| Random path | /Ab3kL9xQ2pTm7VhC |
A random path generated on first launch |
| MCP endpoint | /mcp |
The actual MCP endpoint |
So the full URL looks like this:
https://xxxx.ngrok-free.dev/Ab3kL9xQ2pTm7VhC/mcp
Both the static domain and the random path are persisted in ~/.catdesk/config.toml, so the full MCP URL stays the same across launches. You only need to set up the connector once.
The character is a cute shark-cat! We actually made this before CatDesk and decided to put it in the project.
By default, CatDesk will generate a random Binagotchy every time you start it. If you see a cute one, you can set it as your partner on the launch screen. The system will also automatically save every Binagotchy in ~/.catdesk/binagotchy. You can download it too (or, to be accurate, export it)! Both .png and .gif are supported. Feel free to use it anywhere. This project and Binagotchy are both under the MIT License. By the way, Binagotchy is generated using pure scripts and does not use any text-to-image or diffusion model.













