Features

Streaming chat, extended thinking, the conversation library, image and voice input, exports, usage analytics, and a resilient generation runtime.

This page walks through everything Cordy for Mobile can do today. Unless noted otherwise, every feature is built and verified on Android; see platform availability at the end for the iOS picture.

The chat surface

The chat screen is the whole app. It shows:

  • The active provider · model line, so you always know where messages go.
  • An empty-state prompt — "Ask privately." — with quick-start suggestions (Explain code, Improve UI, Summarize text, Debug error).
  • A composer labeled "Message CordyAI", with actions for attaching an image and starting voice input.
  • A setup banner when configuration is incomplete (for example "Add an API key before chatting"), with a direct Go to Settings action.

Streaming chat with live Markdown

Send a message and the reply streams in token by token, rendered as Markdown as it arrives — headings, lists, tables, fenced code blocks, and inline formatting all render live. While a reply is generating, the composer's send button becomes a Stop control, and the assistant row shows a "Responding" state.

Extended thinking

On models that support it (Anthropic's extended thinking, or reasoning models via OpenRouter), Cordy renders the model's reasoning in a separate Thinking block, visually distinct from the final answer. You control how much room the model gets with the thinking budget, which only appears on thinking-capable models.

Conversation library

Every chat is saved locally and listed in the library (each item is marked Stored locally). From here you can:

  • Create a new chat.
  • Resume any past conversation exactly where you left off — including re-attaching to a reply that is still generating.
  • Rename a conversation. Titles are auto-derived from your first message; rename to anything you like.
  • Delete a conversation (with a confirm dialog). Deleting also releases any image attachments it held.
  • Search your history by title, with a live "N of M shown" count and clear empty states.

Opening a conversation uses the provider and model it was created with — so a chat started under one provider keeps showing its own history against its own key, even if you've since switched providers.

Message actions

Long-press or use the action row on a message. Availability depends on the message and whether a reply is generating:

ActionAvailable onNotes
CopyAny user or assistant message with textCopies the message text.
ReportAny assistant message with textDrafts a local report (see below).
RetryThe latest message, if it's a failed assistant replyRe-attempts the same request.
RegenerateThe latest message, if it's a completed or stopped assistant replyDrops that reply and regenerates from history. Hidden while generating.
EditThe most recent user messageRewrite it and regenerate; later assistant turns are discarded. Hidden while generating.
StopWhile a reply is streamingCancels generation and marks the reply "Stopped".

Image input (Android)

Ask about pictures and screenshots:

  • Gallery — attach an image from your photo library.
  • Camera — capture a photo in the moment.
  • Share-in — share an image into Cordy from another app; you land in chat with the image staged.

Staged images preview in the composer ("Image ready · ready to send") and persist in the conversation so you can reopen them later. Image send is gated by model capability: if the selected model can't see images, Cordy blocks the send before any request and shows "Choose a vision-capable model before sending images," with a direct Change model action.

Camera and gallery access are optional and requested only at the moment you use them. If you decline the camera, image picking and share-in keep working.

Voice input (Android)

Tap the microphone in the composer to dictate. Cordy transcribes your speech into editable text in the message field (you'll see a "Listening" state, then "Transcript ready") — review and edit before sending. Microphone permission is requested only at point of use. No audio is stored; only the final text you send is kept. Cancelling voice input leaves the conversation unchanged.

Markdown export

Export any conversation as Markdown through the system share sheet — send it to notes, files, a chat app, or yourself. The export includes the provider and model names and the full message history. If the share sheet isn't available, Cordy copies the Markdown to the clipboard instead.

Usage & cost analytics

Open Settings → Token usage. Cordy records input/output token counts and cost for each completed response and rolls them up:

  • Totals across all runs (input tokens, output tokens, total tokens, cost, run count).
  • Breakdowns per model, per provider, and per day.

Cost is computed from the price captured at completion time, so later price changes don't rewrite history. When a provider doesn't report token usage, Cordy estimates locally and flags those figures with a leading . When no price is known, cost shows .

Report a response

If an assistant reply is unsafe or low quality, Report drafts a Markdown report — provider, model, message ID, and a truncated excerpt of the response, plus guidance on what to include. There is no backend: the sheet states plainly that CordyAI doesn't submit reports anywhere, and gives you Copy and Share so you can route the draft to wherever you collect feedback.

A resilient generation runtime

Generation is owned at the app level, not by a single screen, which makes an in-flight answer durable:

  • Survives navigation. Switch conversation, provider, or model while a reply is streaming and it keeps generating. Reopen the conversation and the screen re-attaches to the same live stream.
  • Survives restart. In-progress replies are checkpointed to the database about every 500 ms, so a mid-stream crash or force-quit recovers the partial answer instead of losing it.
  • Clean recovery. On the next launch, any stream that was interrupted is cleanly marked Stopped rather than left dangling as "responding" forever — and you can regenerate from there.

Accessibility

Cordy targets WCAG AA contrast, keeps Android TalkBack semantics intact across chat, settings, onboarding, message actions, and destructive flows, and uses touch targets of at least 44dp. Motion is brief and purposeful. (VoiceOver support is part of the shared design but rides on the in-progress iOS build.)

Platform availability

FeatureAndroidiOS
Streaming chat, Markdown, extended thinkingVerifiedIn progress (compiles, not device-verified)
Conversation library, message actionsVerifiedIn progress
Generation controls & usage analyticsVerifiedIn progress
Markdown export / shareVerifiedWired (share via the system sheet), not device-verified
Image input (gallery / camera / share-in)VerifiedNot yet wired
Voice inputVerifiedNot yet wired

See Privacy & security → platform note for the full honest status.