dorkos 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,68 +1,112 @@
1
- # dorkos
1
+ <picture>
2
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dork-labs/dorkos/main/apps/site/public/images/dork-logo-white.svg">
3
+ <img alt="DorkOS" src="https://raw.githubusercontent.com/dork-labs/dorkos/main/apps/site/public/images/dork-logo.svg" height="52">
4
+ </picture>
5
+
6
+ &nbsp;
2
7
 
3
8
  [![npm version](https://img.shields.io/npm/v/dorkos)](https://www.npmjs.com/package/dorkos)
9
+ [![CI](https://github.com/dork-labs/dorkos/actions/workflows/cli-smoke-test.yml/badge.svg)](https://github.com/dork-labs/dorkos/actions/workflows/cli-smoke-test.yml)
4
10
  [![license](https://img.shields.io/npm/l/dorkos)](https://github.com/dork-labs/dorkos/blob/main/LICENSE)
5
11
 
6
- Web-based interface and REST/SSE API for Claude Code, built with the Claude Agent SDK.
7
-
8
- ## What is DorkOS?
9
-
10
- DorkOS provides a browser-based chat UI for interacting with Claude Code sessions. It includes tool approval flows, slash command discovery, cross-client session sync, and a full REST/SSE API — all powered by the Claude Agent SDK.
12
+ The operating system for autonomous AI agents. Scheduling, messaging, agent discovery, and a browser-based command center. One person can ship like a team.
11
13
 
12
- ## Installation
14
+ ## Install
13
15
 
14
16
  ```bash
15
17
  npm install -g dorkos
16
18
  ```
17
19
 
18
- ## Usage
20
+ ## Quick Start
19
21
 
20
22
  ```bash
23
+ export ANTHROPIC_API_KEY=your-key-here
21
24
  dorkos
22
25
  ```
23
26
 
24
- The server starts on port 4242 and opens your browser automatically. You'll see the DorkOS chat interface where you can start Claude Code sessions, approve tool calls, and use slash commands.
27
+ Your browser opens. You're looking at every Claude Code session across all your projects: sessions you started from the CLI, from VS Code, from anywhere. One place. Every session. Already there.
25
28
 
26
- ## Updating
29
+ ## What DorkOS Does
27
30
 
28
- ```bash
29
- npm install -g dorkos@latest
30
- ```
31
+ It's 7am. CI has been red since 2:47am. A dependency update cascaded across three repos. Your agent could have caught this overnight, fixed it, and sent you a Telegram message. Instead, the terminal was closed. The agent wasn't running.
32
+
33
+ DorkOS gives your agents what they're missing: scheduling, communication, and coordination. The intelligence comes from the agents. Everything else comes from DorkOS.
34
+
35
+ ### Pulse - Scheduling
36
+
37
+ Cron-based agent execution, independent of your IDE or terminal. Your agents ship code, triage issues, and run audits on schedule. You wake up to completed pull requests.
38
+
39
+ - Overrun protection prevents duplicate runs
40
+ - Isolated sessions per run with full history
41
+ - Configurable concurrency limits
42
+ - Approval gates for agent-created schedules
43
+
44
+ ### Relay - Communication
45
+
46
+ Built-in messaging between your agents and the channels you already use. Telegram, webhooks, browser. Agents reach you where you are. Agents can also message each other across project boundaries.
47
+
48
+ - Telegram and webhook adapters built in
49
+ - Add new channels with a plugin, no custom bots required
50
+ - Messages persist when terminals close
51
+ - Your research agent can notify your coding agent. No copy-paste required.
31
52
 
32
- DorkOS checks for updates automatically on startup and displays a notification when a new version is available. You can also check your current version with:
53
+ ### Mesh - Agent Discovery
54
+
55
+ Scans your projects and finds agent-capable directories. You approve which agents join the network. They coordinate through channels you define.
56
+
57
+ - Finds Claude Code, Cursor, and Codex projects automatically
58
+ - Each agent gets an identity: name, color, icon, purpose
59
+ - Agents know about each other: what they can do and how to reach them
60
+ - From solo agents to a coordinated team
61
+
62
+ ### Console - Browser UI
63
+
64
+ Your agents have names, colors, and status. Glance at your browser tabs and know which ones are working, which are done, and which need your attention.
65
+
66
+ Start a session from the browser. Check on it from your phone. Resume it from inside Obsidian. Every session, regardless of which client started it, visible in one place.
67
+
68
+ - Rich markdown rendering with full session history
69
+ - Approve or deny tool calls from any device
70
+ - Real-time sync across multiple clients
71
+ - Available in any browser or embedded in Obsidian
72
+
73
+ ## CLI Reference
33
74
 
34
75
  ```bash
35
- dorkos --version
76
+ dorkos # Start the server
77
+ dorkos --port 8080 # Custom port
78
+ dorkos --dir ~/projects # Custom working directory
79
+ dorkos --tunnel # Enable remote access via ngrok
80
+ dorkos config # Show all settings
81
+ dorkos config set <key> <val> # Update a setting
82
+ dorkos init # Interactive setup wizard
83
+ dorkos init --yes # Accept all defaults
36
84
  ```
37
85
 
38
- ## CLI Flags
86
+ ### Flags
39
87
 
40
88
  | Flag | Description |
41
89
  |---|---|
42
90
  | `-p, --port <port>` | Port to listen on (default: 4242) |
43
- | `-d, --dir <path>` | Working directory (default: current directory) |
91
+ | `-d, --dir <path>` | Working directory |
44
92
  | `-b, --boundary <path>` | Directory boundary (default: home directory) |
45
- | `-t, --tunnel` | Enable ngrok tunnel |
93
+ | `-t, --tunnel` | Enable ngrok tunnel for remote access |
46
94
  | `-l, --log-level <level>` | Log level (`fatal`, `error`, `warn`, `info`, `debug`, `trace`) |
47
- | `-h, --help` | Show help message |
48
- | `-v, --version` | Show version number |
49
95
 
50
- ## Subcommands
96
+ ### Config Subcommands
51
97
 
52
98
  | Command | Description |
53
99
  |---|---|
54
100
  | `dorkos config` | Show all effective settings |
55
- | `dorkos config get <key>` | Get a single config value |
56
- | `dorkos config set <key> <value>` | Set a single config value |
101
+ | `dorkos config get <key>` | Get a single value |
102
+ | `dorkos config set <key> <value>` | Set a single value |
57
103
  | `dorkos config list` | Full JSON output |
58
104
  | `dorkos config reset [key]` | Reset to defaults |
59
- | `dorkos config edit` | Open config in `$EDITOR` |
105
+ | `dorkos config edit` | Open in `$EDITOR` |
60
106
  | `dorkos config path` | Print config file location |
61
- | `dorkos config validate` | Check config validity |
62
- | `dorkos init` | Interactive setup wizard |
63
- | `dorkos init --yes` | Accept all defaults |
107
+ | `dorkos config validate` | Check validity |
64
108
 
65
- ## Configuration
109
+ ## Environment Variables
66
110
 
67
111
  ### Required
68
112
 
@@ -75,13 +119,12 @@ dorkos --version
75
119
  | Variable | Default | Description |
76
120
  |---|---|---|
77
121
  | `DORKOS_PORT` | `4242` | Server port |
122
+ | `DORKOS_HOST` | `localhost` | Server host (use `0.0.0.0` for Docker) |
78
123
  | `DORKOS_DEFAULT_CWD` | Current directory | Default working directory for sessions |
79
- | `DORKOS_BOUNDARY` | Home directory | Directory boundary root (restricts filesystem access) |
80
- | `LOG_LEVEL` | `info` | Log verbosity (`fatal`, `error`, `warn`, `info`, `debug`, `trace`) |
81
-
82
- ### Tunnel Configuration
124
+ | `DORKOS_BOUNDARY` | Home directory | Directory boundary root |
125
+ | `LOG_LEVEL` | `info` | Log verbosity |
83
126
 
84
- DorkOS supports ngrok tunnels for remote access:
127
+ ### Remote Access
85
128
 
86
129
  | Variable | Description |
87
130
  |---|---|
@@ -90,15 +133,25 @@ DorkOS supports ngrok tunnels for remote access:
90
133
  | `TUNNEL_DOMAIN` | Custom tunnel domain (optional) |
91
134
  | `TUNNEL_AUTH` | Basic auth in `user:pass` format (optional) |
92
135
 
93
- ## Config Directory
136
+ ## Docker
94
137
 
95
- DorkOS creates a `~/.dork/` directory on startup for configuration storage. Log files are written to `~/.dork/logs/dorkos.log` as NDJSON.
138
+ ```bash
139
+ docker build -f Dockerfile.run --build-arg INSTALL_MODE=npm -t dorkos .
140
+ docker run --rm -p 4242:4242 \
141
+ -e ANTHROPIC_API_KEY=your-key-here \
142
+ -e DORKOS_HOST=0.0.0.0 \
143
+ dorkos
144
+ ```
96
145
 
97
146
  ## API Documentation
98
147
 
99
- When running, DorkOS serves interactive API documentation at `/api/docs` (powered by Scalar UI) and the raw OpenAPI spec at `/api/openapi.json`.
148
+ Interactive API docs at `/api/docs` (Scalar UI) and raw OpenAPI spec at `/api/openapi.json`.
149
+
150
+ ## Open Source
151
+
152
+ MIT-licensed. Open source. Runs on your machine. Your agents, your data, your rules.
100
153
 
101
- ## Links
154
+ Choose your permission mode, from approve-every-tool-call to fully autonomous. Every session is recorded locally. When your agent runs overnight, you'll see exactly what it did in the morning.
102
155
 
103
156
  - [Documentation](https://dorkos.ai/docs)
104
157
  - [Changelog](https://dorkos.ai/docs/changelog)
package/dist/bin/cli.js CHANGED
@@ -14402,14 +14402,29 @@ var init_config_schema = __esm({
14402
14402
  retentionCount: 100
14403
14403
  })),
14404
14404
  mesh: external_exports.object({
14405
- enabled: external_exports.boolean().default(true),
14406
14405
  scanRoots: external_exports.array(external_exports.string()).default(() => [])
14407
- }).default(() => ({ enabled: true, scanRoots: [] })),
14406
+ }).default(() => ({ scanRoots: [] })),
14408
14407
  onboarding: OnboardingStateSchema.default(() => ({
14409
14408
  completedSteps: [],
14410
14409
  skippedSteps: [],
14411
14410
  startedAt: null,
14412
14411
  dismissedAt: null
14412
+ })),
14413
+ agentContext: external_exports.object({
14414
+ relayTools: external_exports.boolean().default(true),
14415
+ meshTools: external_exports.boolean().default(true),
14416
+ adapterTools: external_exports.boolean().default(true),
14417
+ pulseTools: external_exports.boolean().default(true)
14418
+ }).default(() => ({ relayTools: true, meshTools: true, adapterTools: true, pulseTools: true })),
14419
+ uploads: external_exports.object({
14420
+ maxFileSize: external_exports.number().int().positive().default(10 * 1024 * 1024),
14421
+ // 10MB
14422
+ maxFiles: external_exports.number().int().min(1).max(50).default(10),
14423
+ allowedTypes: external_exports.array(external_exports.string()).default(() => ["*/*"])
14424
+ }).default(() => ({
14425
+ maxFileSize: 10 * 1024 * 1024,
14426
+ maxFiles: 10,
14427
+ allowedTypes: ["*/*"]
14413
14428
  }))
14414
14429
  });
14415
14430
  LOG_LEVEL_MAP = {
@@ -17972,12 +17987,12 @@ Examples:
17972
17987
  process.exit(0);
17973
17988
  }
17974
17989
  if (values.version) {
17975
- console.log("0.7.0");
17990
+ console.log("0.9.0");
17976
17991
  process.exit(0);
17977
17992
  }
17978
17993
  if (values["post-install-check"]) {
17979
17994
  checkClaude();
17980
- console.log(`dorkos ${"0.7.0"}`);
17995
+ console.log(`dorkos ${"0.9.0"}`);
17981
17996
  console.log("Installation verified.");
17982
17997
  process.exit(0);
17983
17998
  }
@@ -18078,7 +18093,7 @@ if (fs3.existsSync(envPath)) {
18078
18093
  await import("../server/index.js");
18079
18094
  var port = process.env.DORKOS_PORT || String(DEFAULT_PORT);
18080
18095
  console.log("");
18081
- console.log(` DorkOS v${"0.7.0"}`);
18096
+ console.log(` DorkOS v${"0.9.0"}`);
18082
18097
  console.log(` Local: http://localhost:${port}`);
18083
18098
  var nets = networkInterfaces();
18084
18099
  var networkUrl = null;
@@ -18134,9 +18149,9 @@ console.log("");
18134
18149
  }
18135
18150
  });
18136
18151
  }
18137
- checkForUpdate("0.7.0").then((latestVersion) => {
18152
+ checkForUpdate("0.9.0").then((latestVersion) => {
18138
18153
  if (latestVersion) {
18139
- const msg = `Update available: ${"0.7.0"} \u2192 ${latestVersion}`;
18154
+ const msg = `Update available: ${"0.9.0"} \u2192 ${latestVersion}`;
18140
18155
  const cmd = "Run npm install -g dorkos@latest to update";
18141
18156
  const width = Math.max(msg.length, cmd.length) + 6;
18142
18157
  const pad = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;