USER MANUAL

How to use KKCode after the first connection.

Three surfaces, no more: Chat for talking to OpenCode, Workspace for picking a project and a session, and Settings for the look, the language, and the connection. If you are not connected yet, start with how to use OpenCode from your phone.

Last updated: 2026-08-03English

Before you send the first prompt

Three pieces of context decide where the next instruction actually lands:

  1. Connection — the connection screen shows the active server URL and username. A green status badge means the SSE stream is live.
  2. Project — the Workspace tab shows the project directory that will receive the next request. The selected project is remembered across launches.
  3. Session — the Chat tab shows the active work thread. Use one session per outcome so context usage and review stay clean.

The most expensive mobile mistake is sending a valid instruction to the wrong project or session. Always check the project name and the session title before sending.

Chat

The Chat tab is where AI text, reasoning, tool calls, and file I/O stream in real time. The composer at the bottom accepts a text prompt plus attachments from the system share sheet. The session title at the top mirrors what you would see in a desktop OpenCode client.

Streaming chat

AI text, reasoning traces, tool calls, and file reads stream into the transcript with the same typewriter cadence as the desktop. If the connection drops, KKCode reconnects the SSE stream with exponential backoff and the in-flight tool call resumes from the last server checkpoint.

Permission prompts

When OpenCode wants to read a file, edit a file, or run a command, the request appears as a card in the chat. Three choices: Allow Once, Always (persist for the active project), or Reject. Treat each prompt as a security decision — read the project, the command, and the path before approving. The full threat model is in the security guide.

Code blocks and file diffs

Tool output and file edits render with proper syntax highlighting. Diffs use a side-by-side view; tap a line to jump to the source. There is no file editor inside Chat — to change a file you approve the agent's edit and verify with your own review.

Session history

Every conversation is saved on the dev machine. Open the session list to browse, search, and resume any previous thread with full context. Use New Session to start a clean work thread; long-press a session in the list to rename, delete, or share the URL.

Dictation

Use the iOS dictation key on the system keyboard to dictate prompts. KKCode does not run a hands-free voice loop — every dictation lands in the composer where you can review and edit before sending.

Workspace

The Workspace tab is the project picker. The first time you connect, KKCode lists every project directory the dev machine exposes through OpenCode. The selected project is the scope of every session, file event, and permission prompt until you switch.

Multi-project switching

Tap the project header to switch. Sessions from other projects are kept separately and never mix into the active project. This is the model boundary that keeps a quick edit on project A from accidentally landing in project B.

Status indicator

The connection status badge in the top bar always reflects the live state of the SSE stream: Connected, Connecting, or Error. If the badge turns red, open the connection screen and check the underlying error before sending more prompts.

Refreshing the project list

Pull to refresh on the project list. If a new directory was added on the dev machine, it appears in the list after the next refresh.

Settings

Settings covers the look, the language, the connection, and the credential reset. The whole app follows the active theme — terminal, code blocks, and accent colors update together.

Theme

Three options: Light, Dark, Auto (follows the system). The default is Dark to match the OpenCode terminal aesthetic.

Language

21 languages, with first-class CJK input for shell, agent, and chat. CLDR plural rules are honoured; missing keys fall back to English. The language choice is independent of the dev machine and can be changed at any time without reconnecting.

Connection

Edit the server URL, username, or password. Editing does not start a new connection automatically — tap Reconnect to apply. Sign out removes the encrypted credentials from the device keystore; the next launch shows the connection screen again.

Offline credentials

Connection profiles stay encrypted in the iOS Keychain (or Android Keystore-backed SecureStore). Reconnect to any known host without re-entering a password. To wipe everything, use Sign out or reinstall the app.

What KKCode does not do (yet)

KKCode is a focused control surface, not a full desktop IDE replacement. The following are out of scope in the current build and are listed so you do not look for them:

  • Push notifications. Background delivery of task completion is not implemented. Keep KKCode in the foreground or use a remote-access path that keeps the SSE stream alive.
  • On-device terminal, file editing, or worktree controls. Multi-file edits, terminal commands, and branch management all happen on the dev machine through OpenCode itself.
  • Provider / model picker. Provider keys and model selection live on the dev machine's opencode serve configuration. KKCode shows whatever the server exposes.
  • MCP / LSP / diagnostics dashboard. Optional endpoints vary by server; KKCode does not surface a separate diagnostics panel.

For broad code navigation, prolonged terminal interaction, complex conflict resolution, or detailed visual review, return to the desktop OpenCode client. Mobile complements it.