Skip to content

Commit ef9b908

Browse files
authored
Merge pull request #82 from open-webui/main
0.7.0
2 parents acea42c + 9b168fb commit ef9b908

53 files changed

Lines changed: 4246 additions & 201 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.7.0] - 2026-06-25
9+
10+
### Added
11+
12+
- 🤖 **Coding agents.** You can now connect coding agents as AI backends. Supported agents include Codex, Claude Code, Cursor, Grok, and OpenCode. Configure agent profiles from the new Agents tab in admin settings, and they show up as selectable models in the chat. Each agent runs in your workspace with full tool access, and conversations can be resumed where you left off.
13+
- ⚙️ **Agents admin panel.** A new Agents section in Settings lets you add, edit, and remove agent profiles. You can configure the command path, model list, approval and permission modes, and see at a glance whether each agent is installed and ready. Models can be left empty to auto-detect what the agent supports.
14+
- 🎙️ **Voice dictation in the terminal.** The mobile shortcut bar now has a microphone button that lets you dictate text directly into the terminal using speech recognition.
15+
- ℹ️ **System info modal.** A new "System info" option in the sidebar menu shows your machine's hostname, OS, CPU, memory, disk, and running processes in a dedicated modal instead of on the welcome screen.
16+
17+
### Changed
18+
19+
- 🏠 **Redesigned welcome screen.** The home page now highlights a "Continue" section that picks up your most recent workspace with context about what was happening (active tasks, running processes). Recent workspaces also show status signals so you can see which ones have work in progress.
20+
- 🏷️ **Renamed to Computer.** All visible references to "cptr" in the UI, notifications, and documentation now read "Computer" for clarity.
21+
- 🧹 **Code formatting cleanup.** Whitespace and formatting improvements across frontend components.
22+
823
## [0.6.2] - 2026-06-25
924

1025
### Added

README.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# cptr
1+
# Computer (cptr)
22

33
![GitHub stars](https://img.shields.io/github/stars/open-webui/computer?style=social)
44
![GitHub forks](https://img.shields.io/github/forks/open-webui/computer?style=social)
@@ -16,7 +16,7 @@
1616

1717
`cptr` (short for "computer") runs on your machine and serves your whole computer (files, terminal, editor, git) to any browser. It literally is your computer.
1818

19-
Use it from your phone, tablet, laptop, another computer, or the machine it's running on. Designed to feel native on every screen. Plug in an AI that can actually read, write, and run things on your machine, or bring your favourite terminal agent. Terminal multiplexer, parallel AI agents, full workstation, one tool, your computer, any device.
19+
Use it from your phone, tablet, laptop, another computer, or the machine it's running on. Designed to feel native on every screen. Connect your own AI via API key, or plug in a coding agent you already subscribe to and skip the key entirely. Terminal multiplexer, parallel AI agents, full workstation, one tool, your computer, any device.
2020

2121
## Install
2222

@@ -69,7 +69,7 @@ Or skip networking entirely and connect a [messaging bot](#messaging-bots) inste
6969

7070
## AI agent
7171

72-
Bring your own API key. Works with OpenAI, Anthropic, Ollama, or any OpenAI-compatible endpoint.
72+
Bring your own API key (OpenAI, Anthropic, Ollama, or any OpenAI-compatible endpoint), or connect a coding agent you already subscribe to.
7373

7474
| | |
7575
|---|---|
@@ -91,7 +91,15 @@ Bring your own API key. Works with OpenAI, Anthropic, Ollama, or any OpenAI-comp
9191
| 🔌 **Tool servers** | Connect external tools via MCP or OpenAPI. |
9292
| 🧠 **Context compaction** | Long conversations are automatically summarised to stay fast. |
9393

94-
Already have a favourite terminal agent? Claude Code, Codex, Gemini CLI, Cursor, Grok, OpenCode, Kilo Code, and Pi all plug straight in. Use the subscription you already pay for.
94+
## Coding agents
95+
96+
Connect a coding agent as a native backend and use the subscription you already pay for. No separate API key needed.
97+
98+
**Codex** · **Claude Code** · **Cursor** · **Grok** · **OpenCode**
99+
100+
Add an agent profile from Settings, pick your models, and it shows up in the model selector like any other provider. Conversations run inside your workspace with full tool access and resume where you left off.
101+
102+
Prefer to run agents yourself? Any terminal agent (Gemini CLI, Kilo Code, Pi, and others) works in the terminal tab the way it always has.
95103

96104
## Messaging bots
97105

cptr/frontend/src/app.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<meta name="mobile-web-app-capable" content="yes" />
1616
<meta name="apple-mobile-web-app-capable" content="yes" />
1717
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
18-
<meta name="apple-mobile-web-app-title" content="cptr" />
18+
<meta name="apple-mobile-web-app-title" content="Computer" />
1919
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
2020
<link rel="apple-touch-startup-image" href="/icon-512.png" />
2121
%sveltekit.head%

cptr/frontend/src/lib/apis/admin.ts

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,63 @@ export const updateConfig = (config: Record<string, unknown>) =>
5858
method: 'PUT'
5959
});
6060

61+
// ── Agents ─────────────────────────────────────────────────
62+
63+
export type AgentType = 'codex' | 'claude_code' | 'cursor' | 'grok' | 'opencode';
64+
export type AgentMode = 'auto' | 'enabled' | 'disabled';
65+
export type AgentStatus = 'ready' | 'not_found' | 'missing_dependency' | 'auth_unknown' | 'error';
66+
67+
export interface AgentProfile {
68+
id: string;
69+
agent: AgentType;
70+
name: string;
71+
mode: AgentMode;
72+
command: string;
73+
home: string | null;
74+
models: string[];
75+
default_model: string;
76+
approval_mode?: 'ask' | 'auto' | 'full';
77+
sandbox_mode?: 'read-only' | 'workspace-write' | 'danger-full-access';
78+
permission_mode?: 'default' | 'accept_edits' | 'bypass_permissions';
79+
launch_args?: string;
80+
api_endpoint?: string;
81+
server_url?: string;
82+
server_password?: string;
83+
}
84+
85+
export interface AgentsResponseProfile {
86+
id: string;
87+
agent: AgentType;
88+
name: string;
89+
config: AgentProfile;
90+
detected: {
91+
status: AgentStatus;
92+
command: string | null;
93+
version: string | null;
94+
message: string | null;
95+
models?: string[] | null;
96+
};
97+
available: boolean;
98+
implicit: boolean;
99+
model_ids: string[];
100+
}
101+
102+
export interface AgentsResponse {
103+
profiles: AgentsResponseProfile[];
104+
}
105+
106+
export const getAgents = async (): Promise<AgentsResponse> =>
107+
fetchJSON<AgentsResponse>('/api/admin/agents');
108+
109+
export const updateAgents = (profiles: AgentProfile[]): Promise<AgentsResponse> =>
110+
fetchJSON<AgentsResponse>('/api/admin/agents', {
111+
...jsonBody({ profiles }),
112+
method: 'PUT'
113+
});
114+
115+
export const refreshAgents = async (): Promise<AgentsResponse> =>
116+
fetchJSON<AgentsResponse>('/api/admin/agents/refresh', { method: 'POST' });
117+
61118
// ── Connections ─────────────────────────────────────────────
62119

63120
export interface Connection {
@@ -118,7 +175,14 @@ export interface ModelConfigEntry {
118175

119176
export interface ModelConfigResponse {
120177
config: Record<string, ModelConfigEntry>;
121-
models: { id: string; name: string; provider: string; connection_id: string }[];
178+
models: {
179+
id: string;
180+
name: string;
181+
provider: string;
182+
connection_id: string;
183+
agent_id?: string;
184+
profile_id?: string;
185+
}[];
122186
}
123187

124188
export const getModelConfig = async (): Promise<ModelConfigResponse> =>

0 commit comments

Comments
 (0)