Repository navigation
codr v0.8.0
codr 0.8.0
codr 0.8.0 adds confirmed phone-driven worker updates, immediate prepared-media
delivery, ordinary file attachments, and more reliable project setup and
progress completion. These changes follow 0.7.0.
Confirmed updates from your phone
/updatechecks stable releases from the pinned maintainer's ngit records and
downloads checksum-verified bytes from Blossom, without a GitHub fallback.- A ten-minute, chat-bound confirmation is required before installation. The
update job replaces only the managed bridge worker, retaining identities,
chats, queues, accepted deliveries and running native coding sessions. - Connector, protocol or storage-cohort changes are refused. Failed startup
restores the previous executable without rewinding routing state. Uncertain
launches are not automatically retried.
Media delivery without an idle wait
- ZIP archives, documents and other file attachments are downloaded to private
local files and handed to the agent with their caption, file path and quoted
original name. They do not require audio transcription. Archives are not
automatically extracted or executed by the bridge. - Images download and voice messages transcribe while the agent works. Prepared
input is handed to the same verified native session without interrupting it or
waiting for the current task to finish. - Image preparation stays FIFO, but an older legacy text delivery does not hold
it up. Outgoing sync-off does not block owner media input. Captions, private
prepared paths and submission receipts survive worker restarts. - Image acceptance says
Preparing image, rather than implying that a future
agent task was queued. Blocked native dialogs and changed or unavailable
sessions still defer delivery safely.
File attachments retain the four-attachment and 25 MiB-per-file limits. Private
copies survive restarts; remote filenames never become destination paths.
Optional Gemini voice transcription
- Paul Eipper (@lkraider) contributed
scripts/transcribe_gemini.pythrough ngit for hosts where local transcription
is too slow or too large. It sends decrypted voice audio to Google's Gemini
API and returns the transcript through the existing voice-message flow. - Local Phonon remains the default. Gemini requires an API key file with private
permissions and an explicittranscribe_commandchange; setup does not enable
it, and there is no automatic Google fallback. Google's API terms apply. - Tests use synthetic audio and mocked HTTP responses. No live Gemini request
has been verified.
Standalone control chat
- Juraj Bednar (@jooray) contributed an optional
owner-onlycodr controlchat. Setcontrol_chat = trueto create it on worker
startup. It accepts/newand general commands without an existing agent
session; ordinary text receives guidance instead of becoming an agent prompt. - The chat is off by default and uses the existing account. It is excluded from
session-history checkpoints, session-end detection and automatic renames.
Uncertain group creation is not retried automatically.
More reliable project setup
- Juraj's command shortcuts accept unambiguous prefixes such as
/n,/st
and/sy. The control chat also accepts bare command words. Ambiguous
prefixes do not guess, and shortcuts never rewrite prepared voice/file input
or previously accepted deliveries./uis ambiguous between/unmuteand
/update; use/unor/upinstead. - At the folder step,
lslists selectable folders underlaunch_rootfor
numbered selection. Listing and launch validation do not follow root,
ancestor or entry symlinks. Existing one-line workspace nameslistand
pickremain valid. - Reply
confirm,yesoryto a current launch preview, or type its
repository folder name. Expiry, cancellation, replay protection and workspace
revalidation remain active. - Fresh panes can finish shell startup before
agent.startsucceeds. Only an
explicit pre-inputagent_pane_busyrefusal retries, every 250 ms for up to
15 seconds. Other errors and uncertain outcomes do not retry. - Confirm
/newusing the repository folder name, not the destination workspace
label. Forparent/repo.v2inside workspaceMain, typerepo.v2. The preview
still shows the workspace separately and rechecks destination renames. - Keep ten-minute expiry, restart-safe confirmations and
0cancellation. A
repository folder named0uses explicit/new confirminstead. - Accept OpenCode's explicit
defaultvariant when the selected model omitted
a variant. Previously, a successfully created session could be marked
uncertain before its tab or agent started. In-place model changes use the same
corrected check. Provider, model, explicit variant, session and folder checks
remain strict; old uncertain launches still require inspection.
Custom text replies to OpenCode questions
- For a supported OpenCode V2 question that allows a custom answer, type the
answer directly, such asv6.6.6, or use/answer TEXT. Exact listed numbers
and labels still select an option. Combined text such as1 v6.6.6is sent
literally as a custom answer, not interpreted as two separate actions. - Custom replies use the authenticated, request-bound form API. The bridge
rechecks the native session, current form and question code before sending,
and persists submission intent first. No model prompt or terminal keystrokes
carry the custom text; uncertain replies are not automatically repeated. - Changed questions require the current card's code. Custom text is limited to
4000 UTF-8 bytes and complete owner text messages; prepared media is not
automatically treated as a custom answer. Legacy questions, forms without
custom answers, multi-select and multi-question dialogs retain terminal-only
custom entry.
One progress bubble, completed in place
- Follow-ups, media acceptance and blocked-to-working transitions do not append
extra standalone working notices. The active editable bubble carries status
and checklist updates, then becomesdone; final answers remain separate. - Failed completion edits keep their known targets and retry without blocking
final replies. Mute/resume and restart retain both the target and completion
evidence, including a final recorded before runtime reports idle. - Early idle alone does not finish progress. A lost initial acknowledgement with
no known message target is retained for inspection instead of replaying a send
that could create a duplicate; localstatusreportsunresolved_progress. - New chats say
Connected to <chat name>.followed by
Type /help from anywhere to view commands.The obsolete bracketed terminal
title and longer Pat introduction are removed from the welcome.
Reliable handoff and retained chats
- Juraj's repeated-message attribution matches identical confirmed phone
receipts to fresh transcript echoes by count. Unmatched extra input remains
ambiguous and still mutes forwarding. - Delivered blocked notices do not repeat after mute/wake. Cancelled notices
that never reached a confirmed send can announce on wake. Muted polling does
not consume their announcement, and editable progress keeps its known target. - An unexpected new native session on a terminal with a retained chat pauses
the new connection before creating another group. The original chat, history
and accepted deliveries remain intact. Localconfirm-session-changechecks
the current terminal and native identity before approving a separate chat.
Returning to the original native session reconnects its existing chat. - README guidance covers the control chat and White Noise intelligent folders.
Existing screenshots remain unchanged.
The bridge guard does not patch OpenCode itself. The separately installed local
OpenCode session-recovery build is not part of codr's release assets.
Contributors and prior work
The new 0.8.0 changes were implemented by Tom Dwyer
(@tidley), Paul Eipper
(@lkraider), who contributed the optional Gemini
transcriber through ngit, and Juraj Bednar
(@jooray), who contributed the standalone control
chat, command shortcuts, folder listing, confirmation replies, safe launch
retries, input attribution, blocked-notice deduplication and README guidance
through GitHub PRs #7 and
#8–#15.
Tom added the session-replacement safeguard and the review-driven integration
regressions and fixes. Original contributor commits are preserved.
This release also builds on the 0.7.0
contributions of Paul Eipper (@lkraider)
through ngit and Juraj Bednar (@jooray) through
GitHub. Their original contributions and credit remain in the
0.7.0 release notes; those
earlier contributions are not presented as newly authored 0.8.0 changes.
Verification and release limits
Local verification covers the Rust and Python suites, strict clippy, and
independent read-only reviews, including the attachment and custom-answer fixes.
No real self-update has been exercised; updater scheduling and rollback tests use
fixtures. Local verification does not substitute for the required four-platform
release checks.
Existing 0.7.0 binaries cannot be relabelled as 0.8.0. A public 0.8.0 release must
be built from its reviewed, versioned source and pass the platform and connector
gates. The connector remains in the existing MDK 0.14 cohort; this release does
not authorize storage migration. Published notes and credits must be identical
on GitHub and the verified ngit/Blossom mirror.