openrune 0.5.3 → 0.6.1

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
@@ -50,6 +50,24 @@ That's it. You just built an agent.
50
50
 
51
51
  ---
52
52
 
53
+ ## How is Rune different from Agent Teams?
54
+
55
+ Claude Code's Agent Teams spawn teammates at runtime — powerful, but ephemeral. When the session ends, the agents are gone.
56
+
57
+ Rune takes a different approach: **agents are files.**
58
+
59
+ | | Agent Teams | Rune |
60
+ |---|---|---|
61
+ | **Persistence** | Session-only — agents disappear when done | `.rune` files persist forever with history and memory |
62
+ | **Portability** | Tied to a single Claude Code session | Share, version-control, and reuse `.rune` files anywhere |
63
+ | **Scheduling** | Manual execution only | Cron, file-change, and git-commit triggers |
64
+ | **Permissions** | Inherited from session | Per-agent controls (`fileWrite`, `bash`, `allowPaths`) |
65
+ | **Execution** | Interactive | Headless, pipelines, CI/CD-ready |
66
+
67
+ Rune agents survive across sessions, machines, and teams. Build once, run forever.
68
+
69
+ ---
70
+
53
71
  ## Core Concepts
54
72
 
55
73
  ### One file = one agent
@@ -308,7 +326,7 @@ Or double-click any `.rune` file in Finder.
308
326
  | Platform | Status |
309
327
  |----------|--------|
310
328
  | macOS | Supported |
311
- | Windows | Coming soon |
329
+ | Windows | Supported |
312
330
  | Linux | Coming soon |
313
331
 
314
332
  ---
package/bin/rune.js CHANGED
@@ -5,17 +5,13 @@ const path = require('path')
5
5
  const fs = require('fs')
6
6
  const os = require('os')
7
7
 
8
- // Platform check — macOS only for now
9
- if (process.platform !== 'darwin') {
10
- console.error('\n ❌ Rune currently supports macOS only.')
11
- console.error(' Windows and Linux support is coming soon.')
12
- console.error(' Follow https://github.com/gilhyun/Rune for updates.\n')
13
- process.exit(1)
14
- }
8
+ // Platform check
9
+ const IS_MAC = process.platform === 'darwin'
10
+ const IS_WIN = process.platform === 'win32'
15
11
 
16
12
  const RUNE_HOME = path.join(os.homedir(), '.rune')
17
13
  const APP_DIR = path.join(RUNE_HOME, 'app')
18
- const QUICK_ACTION_DIR = path.join(os.homedir(), 'Library', 'Services')
14
+ const QUICK_ACTION_DIR = IS_MAC ? path.join(os.homedir(), 'Library', 'Services') : null
19
15
 
20
16
  const [,, command, ...args] = process.argv
21
17
 
@@ -71,12 +67,12 @@ function install() {
71
67
  console.log(` ✅ App built at ${projectRoot}`)
72
68
 
73
69
  // 3. Install macOS Quick Action for right-click menu
74
- if (process.platform === 'darwin') {
70
+ if (IS_MAC) {
75
71
  installQuickAction(projectRoot)
76
72
  }
77
73
 
78
74
  // 4. Register .rune file association (macOS)
79
- if (process.platform === 'darwin') {
75
+ if (IS_MAC) {
80
76
  registerFileAssociation(projectRoot)
81
77
  }
82
78
 
@@ -1403,7 +1399,7 @@ function uninstall() {
1403
1399
  }
1404
1400
 
1405
1401
  // Unregister from Launch Services
1406
- if (process.platform === 'darwin') {
1402
+ if (IS_MAC) {
1407
1403
  try {
1408
1404
  execSync(`/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -u "${appDir}"`, { stdio: 'ignore' })
1409
1405
  } catch {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openrune",
3
- "version": "0.5.3",
3
+ "version": "0.6.1",
4
4
  "description": "Rune — File-based AI Agent Toolkit for Claude Code",
5
5
  "keywords": ["ai", "agent", "claude", "desktop", "electron", "mcp", "claude-code", "toolkit", "automation"],
6
6
  "repository": {
@@ -14,7 +14,7 @@ export default defineConfig({
14
14
  },
15
15
  define: {
16
16
  'process.env': '{}',
17
- 'process.platform': JSON.stringify('darwin'),
17
+ 'process.platform': JSON.stringify(process.platform),
18
18
  },
19
19
  build: {
20
20
  outDir: path.resolve(__dirname, '..', 'dist', 'renderer'),
package/src/main.ts CHANGED
@@ -255,8 +255,12 @@ function startRetryPolling(port: number) {
255
255
 
256
256
  // ── .mcp.json Writer ─────────────────────────────────
257
257
  function findNodePath(): string {
258
- try { return execSync('which node', { encoding: 'utf-8' }).trim() } catch {}
259
- for (const p of ['/usr/local/bin/node', '/opt/homebrew/bin/node']) {
258
+ const cmd = process.platform === 'win32' ? 'where node' : 'which node'
259
+ try { return execSync(cmd, { encoding: 'utf-8' }).trim().split('\n')[0] } catch {}
260
+ const candidates = process.platform === 'win32'
261
+ ? ['C:\\Program Files\\nodejs\\node.exe']
262
+ : ['/usr/local/bin/node', '/opt/homebrew/bin/node']
263
+ for (const p of candidates) {
260
264
  if (fs.existsSync(p)) return p
261
265
  }
262
266
  return 'node'