Repository navigation
Agent Chat
Agent chat is enabled by default. It provides a persistent local Markdown conversation between you and the ChatGPT-side agent, with queued messages, files, receipts, progress reports, and optional browser-assisted continuation.
Run on the computer running Codexify:
codexify chatOpen the printed URL. The listener defaults to 127.0.0.1:3120, separate from MCP port 3000 and the OpenAI tunnel. agentChat.port: null requests an OS-assigned port. The URL's fragment is a persistent private access token: do not share the URL or ~/.codexify/owner-chat.json.
The token survives service restart; the URL remains usable while the port stays the same. If an OS-assigned port changes, run codexify chat again. The file's presence alone does not prove the service is running.
The same task can also appear in an embedded ChatGPT widget. Both interfaces use the same server-side message channel; the owner interface supplies global settings, sidebar organization, statistics, and browser controls.
The default mode is Queue (agentChat.defaultMessageMode: "queue"). Change it under Settings → Chats & goals.
- Return / send button: use the selected mode.
- Cmd+Return on macOS or Ctrl+Return on Windows/Linux: use the other mode for one message.
- Shift+Return: newline.
- When the agent is waiting for your answer: send it directly; Return and the modified Return do not leave the answer queued.
Steering delivers new input immediately. Queued messages and their attachments remain private until released, with Edit, Trash, and Steer controls. Normal completion releases the oldest eligible queued message; a request for user input does not. An unfinished or blocked goal keeps queued messages private until the goal is completed. Ordinary online delivery uses chat tools rather than posting another ChatGPT prompt.
| Tool | Effect |
|---|---|
chat_read |
Deliver unread user messages and advance the agent's read cursor. |
chat_write |
Append the agent's Markdown reply and return pending input. A write alone is not request completion. |
chat_await |
Wait for needed user input; does not release the private queue. |
turn_completed |
Complete the current request and release eligible queued work, or wait for more work. |
The default wait is 55 seconds, configurable from 1–300 seconds. A timeout is a wait outcome, not a new user message. An active or blocked goal must be resolved through its goal protocol rather than silently ending work.
User receipts distinguish saved, delivered to the agent, and acknowledged through chat tools. They are tool-activity receipts, not proof of model comprehension. Presence also reflects tool activity: online under three minutes, last-seen/away from three to five minutes, and offline afterward. A waiting-for-input state is distinct from active work.
Projects and Recent switch between grouping and latest activity. Search covers persisted transcripts, including history outside the current message page. Rename chat stores a persistent custom title; clearing it restores the derived title.
Unread positions are server-persisted and shared across browsers. Only incoming agent messages or visible warnings can create a blue dot. Your own messages, tool calls, and sent/read receipt changes do not. Viewing a chat acknowledges the entries actually loaded for display; newer entries remain unread. This is separate from the agent's delivery/read cursor.
Message copy controls copy original Markdown; the header transcript copy includes persisted history beyond the loaded page, while omitting storage markers and receipt/counter formatting. It does not sanitize secrets in your message text.
A known goal is loaded from shared conversation metadata when switching chats, avoiding a delayed goal-bar appearance. Conversations with no goal do not display a goal bar.
Use the paperclip, drag/drop, or paste an image. Pasted screenshots omit automatically chosen filename captions; user-selected files keep their names. Image previews use cached thumbnails, so opening a chat need not download the original image repeatedly. Open the attachment when you need the original.
Agents find files with chat_list_attachments, chat_search_attachments, and chat_get_attachment using the returned attachment ID. Text can be returned inline up to 64 KiB; images can be previewed inline. Larger/truncated text and binary attachments have a local path for authorized inspection. Downloadable ChatGPT file resources require the separate, off-by-default materialization setting; ordinary chat uploads and inline previews do not.
A goal is a persisted objective with revisions, status, turn count, and active duration. Add or edit it above the composer, then use Run/Resume, Pause, or Clear as appropriate. Clearing a goal does not delete its chat history. Browser continuation needs an installed, signed-in companion, an exact connector name, and verified pairing.
The command forms are /goal set, /goal run, /goal stop, /goal clear, and /goal status. Model-facing tools are:
-
goal_read— read the current revision and objective. -
goal_set— create/update and activate withrequestId,expectedRevision, andmarkdown. -
goal_resume— resume a paused/blocked goal with revision and request ID checks. -
goal_finish— mark itcompletedorblocked; a blocked result needs a reason.
These state changes must match the current revision. A completed-looking ordinary reply alone does not finish an active goal. Browser send acceptance alone does not prove the agent resumed work.
Pending automatic retries use a red spinning indicator. Exhausted or paused failures require attention instead of looking like successful active work. Pause retries and Dismiss are separate from pausing or clearing the goal; see Browser automation.
rollout.md records progress separately from CHAT.md. The default checkpoint reminder is 25 work calls; rollout_read and rollout_update handle recovery. Context and memory explains retention and full task handoff.
Notifications are optional Apprise URLs and need Python/Apprise on the service computer. Event filters cover ordinary messages, completion, input requests, blocked goals, errors, and offline transitions. Errors awaiting automatic retry stay quiet; input requests are deduplicated until you reply. See Configuration.
From another device, first arrange protected access or forwarding to the host’s loopback listener; the printed localhost address alone does not reach that host from a phone.
On iPhone/iPad, open the working private URL in Safari and use Share → Add to Home Screen. The installed web app still needs a connection to your running service; this does not provide offline execution or push notifications.
Browser Start/Stop, sign-in, connector refresh, and model refresh belong to global Settings → Browser. Per-conversation settings contain its project and pairing information. Analytics is available from Statistics or global settings.
Reviewed against v2.3.9 on 22 October 2026. Source: src/markdown_chat/mod.rs · src/owner_chat.rs.
Guides reviewed for v2.3.9 · 22 October 2026 · Repository · Releases · Report an issue · MIT License
Get started
Chat and automation
Projects and task context
- Workspace selection
- Worktree isolation
- Context, memory, and continuation
- AGENTS.md and skills
- Diff checkpoints
Reference and operations