The composer and status bar
Sending messages, the send-key preference, attaching images, the status bar and what each word means, notifications, and the permission and approval prompts agents show.
The composer is the message box at the bottom of a thread in the Code view. Below the text area it has, from left to right:
- Session settings — the CLI, model, effort and permission mode (see Agents),
- + — attach images,
- the send-key button, and
- ↑ — send (on a new thread: start the thread).
Whenever Send is disabled, pointing at it tells you why.
Send key
By default, ⌘↵ sends on macOS and Ctrl+↵ on Windows and Linux, and ↵ (Enter) adds a new line.
If you prefer, click the send-key button next to Send to switch to ↵ sends:
| Setting | Send | New line |
|---|---|---|
| ⌘↵ / Ctrl+↵ (default) | ⌘↵ / Ctrl+↵ | ↵ |
| ↵ | ↵ — and ⌘↵ / Ctrl+↵ still send | ⇧↵ / Shift+↵ |
The button shows the key that's in force; click it again to switch back. The change takes effect immediately and is remembered on this computer (it isn't tied to your GitDB account). When you're typing with an input method, the Enter that confirms your text never sends the message.
The new-thread box shows the active key in its placeholder: "Describe the task… (⌘↵ to start)".
Attach images
You can add images to a message in three ways: click +, paste an image into the box, or drop image files onto the composer.
- Formats: PNG, JPEG, GIF and WebP.
- Limits: up to 5 images per message, 5 MiB each.
- An image can't be sent on its own: "Add a message — images are sent with text (a turn always has text)".
Each attached image shows as a small preview with × to remove it. If an image can't be attached, the app says why — for example that it's "over the 5 MiB limit per image", or that "At most 5 images can go with one message".
Some limits depend on the CLI:
- Codex CLI: the model must accept images. If it doesn't, Send is disabled with "Codex model … does not accept images — pick a model that does, or remove the images."
- Claude Code: a message with images can't start with
/(see Slash commands).
Message length
A message can be up to 32,000 characters. When you get close to the limit, a counter appears under the box (for example "29,500 / 32,000 characters"). Over the limit it adds "— too long to send" and Send is disabled. Nothing is ever cut off.
The status bar
The bar along the bottom of the window reports on the open workspace and your agents, whichever view you're in.
On the left:
| Item | Meaning |
|---|---|
LOCAL · … or GITDB · … | The open workspace: a local folder's path, or a GitDB repository. While the app reconnects to your last GitDB repository at startup, it reads GITDB · restoring …. |
⑂ main | The GitDB branch you're on. |
2 unsaved | Open files with unsaved edits. |
4 WIP (1 unstaged) | GitDB repositories only: uncommitted changes waiting in GitDB, and how many of them aren't staged yet. |
On the right:
| Item | Meaning |
|---|---|
codex · … and claude · … | One entry per CLI, with a colored dot. The word is explained below. Point at it for the version and details. |
agent sessions 1/3 | How many agent sessions are running, out of the 3 allowed. See Threads and sessions. |
Offline mode | You're in offline mode. |
UTF-8 | The text encoding the app uses for files. |
TypeScript (etc.) | The language of the file open in the File view. |
session only | You're signed in, but only until you quit — see Sign in and offline mode. |
The CLI entries appear after the app has checked for the CLIs (when you open the Code view). Each shows one word:
| Word | Meaning |
|---|---|
logged in | Installed and signed in. |
sign-in needed | Installed, but you need to sign in — see Agents. |
installed | Installed. For Codex CLI this also shows before Codex has started, when its sign-in isn't known yet. |
starting… | Codex CLI is starting. |
auth unknown | Installed, but its sign-in state couldn't be read. |
not installed | The CLI wasn't found — see Install. |
unknown | The app got no answer about this CLI. |
If Codex CLI stopped, its entry shows the reason instead. It starts again on your next Codex turn.
While a Claude Code thread is selected, the bar can also show that session's live state: rate limit (Claude Code reported a rate limit — point at it for the full message), auth (Claude Code is signing in), thinking with a token count, and Claude Code's own status text. Rarely, it shows a warning such as plan refused when Claude Code refused a permission-mode change — point at it for Claude Code's reason.
Notifications
GitDB Desktop can post desktop notifications while you're working in another window. Click the bell at the top right (Notifications) to choose, under Notify me when:
- A permission or approval is waiting
- A turn completes
- A turn fails
All three are on until you change them. As the menu says, notifications appear "Only while GitDB Desktop is not the focused window." Send test notification posts a sample right away ("Notifications are on. This is what they look like.") so you can check your system allows them.
The notifications you can get:
| Notification | When |
|---|---|
| Claude Code needs permission | Claude Code is waiting for you to allow a tool. |
| Codex CLI needs approval | Codex is waiting for an approval. |
| Claude Code needs input | An MCP server is asking you a question on a Claude Code thread. (On Codex threads this arrives as a "needs approval" notification.) |
| Codex CLI needs MCP sign-in | An MCP server's sign-in expired. |
| Claude Code finished / Codex CLI finished | A turn completed. |
| Claude Code turn failed / Codex CLI turn failed | A turn failed. |
- Clicking a notification brings the app forward and opens that thread.
- A notification names the thread and the kind of request — never the command, the tool's input or file contents.
- Stopping a turn yourself doesn't send a notification.
- If a turn completes and your queued message goes out straight away, you aren't notified about that completion.
Permission and approval prompts
When an agent needs your OK, a prompt window appears over whatever view you're in. It stays until you answer it (or the agent withdraws the request). If more requests are queued, the window says how many are waiting.
For the first half-second after a prompt appears, its buttons and the Escape key don't respond. That stops a keystroke you meant for something else from answering it. Clicking outside the window does nothing.
How often you're asked depends on the thread's permission mode — see Agents.
Claude Code
The window is titled with the tool's name and says "Claude Code wants to run" the tool "in this workspace", with the details Claude Code sent (such as the path or rule involved) and the tool's input.
| Button | What it does |
|---|---|
| Allow once | Runs this one tool call. |
| An "always allow" button, such as Yes, allow … or Yes, and don't ask again | Runs it and saves the permission Claude Code suggested. Shown only when Claude Code suggests one. |
| Deny (or press Escape) | Refuses the tool call and stops the turn. |
When there's an "always allow" button, the window lists what it would save and where: for this project (just you), all projects, this project (shared), or this session.
Codex CLI
The window's title says what Codex wants, for example "Allow Codex to run this command?", "Allow Codex to connect to" a host, "Allow Codex to edit the following files?", "Codex is asking for more access", "Codex needs an answer", or "Allow Codex to run an MCP tool?".
| Request | Buttons |
|---|---|
| Run a command | Allow once, Allow this conversation, Allow similar commands, Deny, Stop the turn — only the ones Codex offers for that command |
| Connect to a network host | as above, plus Always allow or Always deny the host when Codex proposes it |
| Edit files | Allow once, Allow all edits, Deny, Stop the turn |
| More access | Deny, Allow for this turn, Allow for this session |
| A question for you | Answer it, then Send answer |
| Run an MCP tool | Allow once, Allow for this session (when offered), Deny, Stop the turn |
Deny refuses just this request — "Codex keeps working on the turn". Stop the turn refuses it and stops the turn. Escape counts as Deny when Deny is offered.