Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
4f322f6
Fix main session rename to edit labels
Apr 9, 2026
86d2559
Persist main session labels across reloads
Apr 9, 2026
443eefa
Add Apple Watch to hero copy
Apr 9, 2026
febc302
Preserve main session labels across daemon sync
Apr 9, 2026
88922f1
Fix server integration test for session labels
Apr 9, 2026
dd2e8f8
Strengthen OpenSpec dropdown prompts
Apr 10, 2026
b09787d
Link Windows tool-call file paths
Apr 10, 2026
a144aac
Fix cron chat history sent event
Apr 10, 2026
bd166f4
Fix startup black screen on slow networks
Apr 10, 2026
4e86e26
Cap P2P pulled files at twenty
Apr 10, 2026
3b3f61c
Add command ids to web session sends
Apr 10, 2026
b162026
Fix Claude context window usage stats
Apr 10, 2026
b97598d
Return to login after auth loss
Apr 10, 2026
4e71c4c
Fix URL detection in chat rendering
Apr 10, 2026
f5806b0
Keep queued transport messages visible until idle
Apr 11, 2026
a383ce9
Harden transport session relaunch handling
Apr 11, 2026
533367a
Stabilize Claude SDK session restarts
Apr 11, 2026
bb9b82e
Clarify Qwen restart session continuity
Apr 11, 2026
708d5e4
Move live agent status below ctx bar
Apr 11, 2026
b9bd51d
Make transport stop interrupt immediately
Apr 11, 2026
e279946
Recover codex sessions after stop timeout
Apr 11, 2026
58a0935
Refine footer agent status icons
Apr 11, 2026
21278c4
Unify codex quota display sources
Apr 11, 2026
0e7fd53
Preserve diff preview tab across refreshes
Apr 11, 2026
6cbee1b
Refine footer thinking status icons
Apr 12, 2026
e01ee66
Tighten live status and upgrade guards
Apr 12, 2026
9147838
Fix web test mock for live status helper
Apr 12, 2026
9cd8408
Prevent stale idle status during active turns
Apr 13, 2026
b830c8f
Fix stale footer idle state during active turns
Apr 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.i18n/README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

**La capa de mensajería para agentes.**

IM.codes es un mensajero especializado para agentes de programación con IA. Te permite seguir sesiones largas desde móvil o web, con acceso a terminal, navegación de archivos, vistas de Git, vista previa de localhost, notificaciones y flujos multiagente integrados. Funciona con [Claude Code](https://github.com/anthropics/claude-code), [Codex](https://github.com/openai/codex), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [OpenClaw](https://openclaw.com) y [Qwen](https://github.com/QwenLM/qwen-agent).
IM.codes es un mensajero especializado para agentes de programación con IA. Te permite seguir sesiones largas desde iPhone, iPad, Apple Watch, móvil o web, con acceso a terminal, navegación de archivos, vistas de Git, vista previa de localhost, notificaciones y flujos multiagente integrados. Funciona con [Claude Code](https://github.com/anthropics/claude-code), [Codex](https://github.com/openai/codex), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [OpenClaw](https://openclaw.com) y [Qwen](https://github.com/QwenLM/qwen-agent).

> **Nota:** Este archivo es una traducción. **El README en inglés (`../README.md`) es la versión canónica.** Si hay alguna diferencia, prevalece la versión en inglés.

Expand Down
2 changes: 1 addition & 1 deletion README.i18n/README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**AI エージェントのための IM。**

IM.codes は AI コーディングエージェント向けの専用メッセンジャーです。モバイルや Web から長時間動作する agent session にアクセスし、ターミナル、ファイル閲覧、Git 変更、localhost プレビュー、通知、マルチエージェント連携を扱えます。Claude Code、Codex、Gemini CLI、OpenClaw、Qwen に対応します。
IM.codes は AI コーディングエージェント向けの専用メッセンジャーです。iPhone、iPad、Apple Watch、モバイルや Web から長時間動作する agent session にアクセスし、ターミナル、ファイル閲覧、Git 変更、localhost プレビュー、通知、マルチエージェント連携を扱えます。Claude Code、Codex、Gemini CLI、OpenClaw、Qwen に対応します。

> これは翻訳版です。**正式な内容は英語版 README(`../README.md`)です。** 差異がある場合は英語版を優先してください。

Expand Down
2 changes: 1 addition & 1 deletion README.i18n/README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**AI 에이전트를 위한 IM.**

IM.codes는 AI 코딩 에이전트를 위한 전용 메신저입니다. 모바일이나 웹에서 장시간 실행 중인 agent session에 접근해 터미널, 파일 브라우징, Git 변경 보기, localhost 미리보기, 알림, 멀티 에이전트 워크플로를 사용할 수 있습니다. Claude Code, Codex, Gemini CLI, OpenClaw, Qwen을 지원합니다.
IM.codes는 AI 코딩 에이전트를 위한 전용 메신저입니다. iPhone, iPad, Apple Watch, 모바일이나 웹에서 장시간 실행 중인 agent session에 접근해 터미널, 파일 브라우징, Git 변경 보기, localhost 미리보기, 알림, 멀티 에이전트 워크플로를 사용할 수 있습니다. Claude Code, Codex, Gemini CLI, OpenClaw, Qwen을 지원합니다.

> 이 문서는 번역본입니다. **기준 문서는 영어 README(`../README.md`)입니다.** 차이가 있으면 영어판을 우선합니다.

Expand Down
2 changes: 1 addition & 1 deletion README.i18n/README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**Слой мессенджера для агентов.**

IM.codes — специализированный мессенджер для AI coding agents. Он позволяет держать долгие agent‑сессии под рукой с телефона или из веба: терминал, файлы, Git, просмотр localhost, уведомления и multi‑agent workflows. Поддерживаются Claude Code, Codex, Gemini CLI, OpenClaw и Qwen.
IM.codes — специализированный мессенджер для AI coding agents. Он позволяет держать долгие agent‑сессии под рукой с iPhone, iPad, Apple Watch, телефона или из веба: терминал, файлы, Git, просмотр localhost, уведомления и multi‑agent workflows. Поддерживаются Claude Code, Codex, Gemini CLI, OpenClaw и Qwen.

> Это перевод. **Каноническая версия — английский README (`../README.md`).** Если есть расхождения, ориентируйтесь на английский вариант.

Expand Down
2 changes: 1 addition & 1 deletion README.i18n/README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

**Agent 的即时通讯层。**

IM.codes 是一个面向 AI 编码代理的专用即时通讯器。你可以在手机或网页上持续查看长时间运行的 agent 会话,直接访问终端、浏览文件、查看 Git 变更、预览本地 localhost、接收通知,并进行多 agent 协作。支持 [Claude Code](https://github.com/anthropics/claude-code)、[Codex](https://github.com/openai/codex)、[Gemini CLI](https://github.com/google-gemini/gemini-cli)、[OpenClaw](https://openclaw.com)、[Qwen](https://github.com/QwenLM/qwen-agent) 等,也支持 transport 型 agent 的原生流式输出。
IM.codes 是一个面向 AI 编码代理的专用即时通讯器。你可以在 iPhone、iPad、Apple Watch、手机或网页上持续查看长时间运行的 agent 会话,直接访问终端、浏览文件、查看 Git 变更、预览本地 localhost、接收通知,并进行多 agent 协作。支持 [Claude Code](https://github.com/anthropics/claude-code)、[Codex](https://github.com/openai/codex)、[Gemini CLI](https://github.com/google-gemini/gemini-cli)、[OpenClaw](https://openclaw.com)、[Qwen](https://github.com/QwenLM/qwen-agent) 等,也支持 transport 型 agent 的原生流式输出。

> **说明:** 本文件是中文翻译版。**英文 README(`../README.md`)是规范版本。** 若内容存在差异,以英文版为准。

Expand Down
2 changes: 1 addition & 1 deletion README.i18n/README.zh-TW.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

**Agent 的即時通訊層。**

IM.codes 是一个面向 AI 编码代理的專用即時通訊器。你可以在手機或網頁上持续檢視长时间运行的 agent 会话,直接访问终端、瀏覽文件、檢視 Git 變更、預覽本地 localhost、接收通知,并进行多 agent 协作。支持 [Claude Code](https://github.com/anthropics/claude-code)、[Codex](https://github.com/openai/codex)、[Gemini CLI](https://github.com/google-gemini/gemini-cli)、[OpenClaw](https://openclaw.com)、[Qwen](https://github.com/QwenLM/qwen-agent) 等,也支持 transport 型 agent 的原生流式输出。
IM.codes 是一个面向 AI 编码代理的專用即時通訊器。你可以在 iPhone、iPad、Apple Watch、手機或網頁上持续檢視长时间运行的 agent 会话,直接访问终端、瀏覽文件、檢視 Git 變更、預覽本地 localhost、接收通知,并进行多 agent 协作。支持 [Claude Code](https://github.com/anthropics/claude-code)、[Codex](https://github.com/openai/codex)、[Gemini CLI](https://github.com/google-gemini/gemini-cli)、[OpenClaw](https://openclaw.com)、[Qwen](https://github.com/QwenLM/qwen-agent) 等,也支持 transport 型 agent 的原生流式输出。

> **說明:** 本文件是中文翻译版。**英文 README(`../README.md`)是規範版本。** 若内容存在差异,以英文版为准。

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**The IM for agents.**

A specialized instant messenger for AI agents. Keep long-running coding-agent sessions within reach from mobile or web, with terminal access, file browsing, git views, localhost preview, notifications, and multi-agent workflows built in. Works with [Claude Code](https://github.com/anthropics/claude-code) and [Codex](https://github.com/openai/codex) via both CLI and SDK integrations, plus [Gemini CLI](https://github.com/google-gemini/gemini-cli), [OpenClaw](https://openclaw.com), [Qwen](https://github.com/QwenLM/qwen-agent), and more — including native streaming output for transport-backed agents.
A specialized instant messenger for AI agents. Keep long-running coding-agent sessions within reach from iPhone, iPad, Apple Watch, mobile, or web, with terminal access, file browsing, git views, localhost preview, notifications, and multi-agent workflows built in. Works with [Claude Code](https://github.com/anthropics/claude-code) and [Codex](https://github.com/openai/codex) via both CLI and SDK integrations, plus [Gemini CLI](https://github.com/google-gemini/gemini-cli), [OpenClaw](https://openclaw.com), [Qwen](https://github.com/QwenLM/qwen-agent), and more — including native streaming output for transport-backed agents.

> **Disclaimer:** This is an actively developed personal open-source project. There are no warranties, no SLA, and no guarantees of stability, security, or backward compatibility. Use at your own risk. Breaking changes may happen at any time without notice.

Expand Down
14 changes: 7 additions & 7 deletions landing/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ <h1>IM<span>.</span>codes</h1>
</header>

<section>
<p class="lead" data-i18n="hero_intro">Keep long-running coding-agent sessions within reach from mobile or web, with terminal access, file browsing, git views, localhost preview, notifications, and multi-agent workflows built in.</p>
<p class="lead" data-i18n="hero_intro">Keep long-running coding-agent sessions within reach from iPhone, iPad, Apple Watch, mobile, or web, with terminal access, file browsing, git views, localhost preview, notifications, and multi-agent workflows built in.</p>
<div class="prompt">imcodes bind https://app.im.codes/bind/&lt;key&gt;<span class="cursor"></span></div>
<div class="output" data-i18n="hero_output">bound to app.im.codes &middot; daemon started &middot; registered as system service</div>
</section>
Expand Down Expand Up @@ -468,7 +468,7 @@ <h2 data-i18n="h_about">about</h2>
},
'zh-CN': {
tagline: '为 AI 代理而生的即时通讯',
hero_intro: '让长时间运行的 coding agent 会话始终触手可及:手机或网页即可查看终端、文件、Git、localhost 预览、通知和多代理工作流。',
hero_intro: '让长时间运行的 coding agent 会话始终触手可及:iPhone、iPad、Apple Watch、手机或网页即可查看终端、文件、Git、localhost 预览、通知和多代理工作流。',
hero_output: '已绑定 app.im.codes · 守护进程已启动 · 已注册为系统服务',
self_host_warning: '<strong>强烈建议自行部署。</strong><code>app.im.codes</code> 是共享测试实例,无可用性保证,可能被限流、攻击或不可用。这是个人项目,不提供商用保障。正式使用请部署到自己的服务器。',
h_screenshots: '截图', h_why: '为什么', h_not: '它不是什么', h_features: '功能', h_arch: '架构', h_download: '下载', h_install: '安装', h_quick: '快速开始', h_selfhost: '自托管部署', h_agents: '支持的代理', h_reqs: '系统要求', h_about: '关于',
Expand Down Expand Up @@ -527,7 +527,7 @@ <h2 data-i18n="h_about">about</h2>
},
'zh-TW': {
tagline: '為 AI 代理而生的即時通訊',
hero_intro: '讓長時間運行的 coding agent 會話始終觸手可及:手機或網頁即可查看終端、檔案、Git、localhost 預覽、通知和多代理工作流。',
hero_intro: '讓長時間運行的 coding agent 會話始終觸手可及:iPhone、iPad、Apple Watch、手機或網頁即可查看終端、檔案、Git、localhost 預覽、通知和多代理工作流。',
hero_output: '已綁定 app.im.codes · 守護程序已啟動 · 已註冊為系統服務',
self_host_warning: '<strong>強烈建議自行部署。</strong><code>app.im.codes</code> 是共享測試實例,無可用性保證,可能被限流、攻擊或不可用。這是個人專案,不提供商用保障。正式使用請部署到自己的伺服器。',
h_screenshots: '截圖', h_why: '為什麼', h_not: '它不是什麼', h_features: '功能', h_arch: '架構', h_download: '下載', h_install: '安裝', h_quick: '快速開始', h_selfhost: '自託管部署', h_agents: '支援的代理', h_reqs: '系統需求', h_about: '關於',
Expand Down Expand Up @@ -586,7 +586,7 @@ <h2 data-i18n="h_about">about</h2>
},
ja: {
tagline: 'AIエージェントのためのIM',
hero_intro: '長時間動く coding agent セッションを、モバイルやWebから常に手の届く場所に。ターミナル、ファイル、Git、localhost プレビュー、通知、マルチエージェントワークフローをまとめて提供します。',
hero_intro: '長時間動く coding agent セッションを、iPhone、iPad、Apple Watch、モバイルやWebから常に手の届く場所に。ターミナル、ファイル、Git、localhost プレビュー、通知、マルチエージェントワークフローをまとめて提供します。',
hero_output: 'app.im.codes にバインド完了 · デーモン起動 · システムサービスとして登録',
self_host_warning: '<strong>セルフホスティングを強く推奨します。</strong><code>app.im.codes</code> は共有テストインスタンスであり、稼働保証はありません。レート制限、攻撃対象、利用不可の可能性があります。個人プロジェクトのため商用サポートはありません。評価以外の用途では自社インフラにデプロイしてください。',
h_screenshots: 'スクリーンショット', h_why: '背景', h_not: 'これは何ではないか', h_features: '機能', h_arch: 'アーキテクチャ', h_download: 'ダウンロード', h_install: 'インストール', h_quick: 'クイックスタート', h_selfhost: 'セルフホスト', h_agents: '対応エージェント', h_reqs: '要件', h_about: '概要',
Expand Down Expand Up @@ -644,7 +644,7 @@ <h2 data-i18n="h_about">about</h2>
},
ko: {
tagline: 'AI 에이전트를 위한 IM',
hero_intro: '오래 실행되는 coding agent 세션을 모바일이나 웹에서 항상 닿는 곳에 두세요. 터미널, 파일, Git, localhost 미리보기, 알림, 멀티 에이전트 워크플로우가 함께 제공됩니다.',
hero_intro: '오래 실행되는 coding agent 세션을 iPhone, iPad, Apple Watch, 모바일이나 웹에서 항상 닿는 곳에 두세요. 터미널, 파일, Git, localhost 미리보기, 알림, 멀티 에이전트 워크플로우가 함께 제공됩니다.',
hero_output: 'app.im.codes에 바인딩 완료 · 데몬 시작됨 · 시스템 서비스로 등록됨',
self_host_warning: '<strong>셀프 호스팅을 강력히 권장합니다.</strong> <code>app.im.codes</code>는 공유 테스트 인스턴스로 가동 보장이 없으며, 속도 제한, 공격 대상이 되거나 사용 불가할 수 있습니다. 개인 프로젝트로 상업적 지원은 제공되지 않습니다. 평가 이외의 용도에는 자체 인프라에 배포하세요.',
h_screenshots: '스크린샷', h_why: '배경', h_not: '무엇이 아닌가', h_features: '기능', h_arch: '아키텍처', h_download: '다운로드', h_install: '설치', h_quick: '빠른 시작', h_selfhost: '셀프 호스팅', h_agents: '지원 에이전트', h_reqs: '요구사항', h_about: '소개',
Expand Down Expand Up @@ -703,7 +703,7 @@ <h2 data-i18n="h_about">about</h2>
},
es: {
tagline: 'El IM para agentes',
hero_intro: 'Mantén las sesiones de coding agents de larga duración al alcance desde móvil o web, con terminal, archivos, vistas Git, vista previa de localhost, notificaciones y flujos multiagente integrados.',
hero_intro: 'Mantén las sesiones de coding agents de larga duración al alcance desde iPhone, iPad, Apple Watch, móvil o web, con terminal, archivos, vistas Git, vista previa de localhost, notificaciones y flujos multiagente integrados.',
hero_output: 'vinculado a app.im.codes · daemon iniciado · registrado como servicio del sistema',
self_host_warning: '<strong>Se recomienda encarecidamente el autoalojamiento.</strong> <code>app.im.codes</code> es una instancia de prueba compartida sin garantías de disponibilidad — puede tener límites, ser objetivo de ataques o no estar disponible. Este es un proyecto personal sin soporte comercial. Para uso más allá de la evaluación, despliega en tu propia infraestructura.',
h_screenshots: 'capturas', h_why: 'por qué', h_not: 'qué no es', h_features: 'características', h_arch: 'arquitectura', h_download: 'descargar', h_install: 'instalar', h_quick: 'inicio rápido', h_selfhost: 'autoalojamiento', h_agents: 'agentes compatibles', h_reqs: 'requisitos', h_about: 'acerca de',
Expand Down Expand Up @@ -762,7 +762,7 @@ <h2 data-i18n="h_about">about</h2>
},
ru: {
tagline: 'IM для агентов',
hero_intro: 'Держите долгоживущие coding agent-сессии под рукой с телефона или из браузера: терминал, файлы, Git, localhost-превью, уведомления и мульти-агентные сценарии уже встроены.',
hero_intro: 'Держите долгоживущие coding agent-сессии под рукой с iPhone, iPad, Apple Watch, телефона или из браузера: терминал, файлы, Git, localhost-превью, уведомления и мульти-агентные сценарии уже встроены.',
hero_output: 'привязан к app.im.codes · демон запущен · зарегистрирован как системная служба',
self_host_warning: '<strong>Настоятельно рекомендуется самостоятельный хостинг.</strong> <code>app.im.codes</code> — общий тестовый экземпляр без гарантий доступности. Может быть ограничен, атакован или недоступен. Это личный проект без коммерческой поддержки. Для использования помимо тестирования разверните на собственной инфраструктуре.',
h_screenshots: 'скриншоты', h_why: 'зачем', h_not: 'чем это не является', h_features: 'возможности', h_arch: 'архитектура', h_download: 'скачать', h_install: 'установка', h_quick: 'быстрый старт', h_selfhost: 'свой сервер', h_agents: 'поддерживаемые агенты', h_reqs: 'требования', h_about: 'о проекте',
Expand Down
7 changes: 5 additions & 2 deletions server/src/db/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ export async function upsertDbSession(
agentType: string,
projectDir: string,
state: string,
label?: string | null,
agentVersion?: string | null,
runtimeType?: string | null,
providerId?: string | null,
Expand All @@ -380,14 +381,15 @@ export async function upsertDbSession(
): Promise<void> {
const now = Date.now();
await db.execute(
`INSERT INTO sessions (id, server_id, name, project_name, role, agent_type, agent_version, project_dir, state, runtime_type, provider_id, provider_session_id, description, requested_model, active_model, effort, transport_config, created_at, updated_at)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17::jsonb, $18, $19)
`INSERT INTO sessions (id, server_id, name, project_name, role, agent_type, agent_version, project_dir, state, label, runtime_type, provider_id, provider_session_id, description, requested_model, active_model, effort, transport_config, created_at, updated_at)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18::jsonb, $19, $20)
ON CONFLICT(server_id, name) DO UPDATE SET
role = excluded.role,
agent_type = excluded.agent_type,
agent_version = excluded.agent_version,
project_dir = excluded.project_dir,
state = excluded.state,
label = COALESCE(excluded.label, sessions.label),
runtime_type = excluded.runtime_type,
provider_id = excluded.provider_id,
provider_session_id = excluded.provider_session_id,
Expand All @@ -407,6 +409,7 @@ export async function upsertDbSession(
agentVersion ?? null,
projectDir,
state,
label ?? null,
runtimeType ?? null,
providerId ?? null,
providerSessionId ?? null,
Expand Down
Loading
Loading