agentrealm 0.1.0 → 1.0.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 +6 -10
- package/package.json +1 -1
- package/skill/SKILL.md +3 -5
- package/src/cli.js +0 -4
- package/src/commands/ls.js +6 -15
- package/src/commands/new.js +0 -2
- package/src/commands/seal.js +0 -16
- package/src/commands/unseal.js +0 -16
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
A **realm** is a lightweight, agentless sandbox workspace for AI agents.
|
|
14
14
|
|
|
15
|
-
In a traditional agent workspace, one agent permanently guards the space — it's always watching, always running. A realm is different: **no agent lives there**. Any AI agent (or human) can enter when needed, do focused work, and leave. When the
|
|
15
|
+
In a traditional agent workspace, one agent permanently guards the space — it's always watching, always running. A realm is different: **no agent lives there**. Any AI agent (or human) can enter when needed, do focused work, and leave. When the work is complete, simply delete the realm or keep it archived.
|
|
16
16
|
|
|
17
17
|
Think of it as a shared project folder with built-in structure, a context loader, and a work diary — designed to be understood and entered by any agent without prior knowledge of the project.
|
|
18
18
|
|
|
@@ -23,7 +23,7 @@ Think of it as a shared project folder with built-in structure, a context loader
|
|
|
23
23
|
| Persistent agent | ✅ Always watching | ❌ Agentless |
|
|
24
24
|
| Entry model | One dedicated agent | Any agent |
|
|
25
25
|
| Context loading | Agent-managed | `realm prompt <name>` |
|
|
26
|
-
| Lifecycle | Ongoing | Scoped →
|
|
26
|
+
| Lifecycle | Ongoing | Scoped → delete when done |
|
|
27
27
|
| Use case | Long-lived assistant | Focused task or project |
|
|
28
28
|
| Overhead | High | Low |
|
|
29
29
|
|
|
@@ -51,14 +51,14 @@ realm prompt my-project
|
|
|
51
51
|
# Copy context to clipboard (then paste into your agent)
|
|
52
52
|
realm prompt my-project --copy
|
|
53
53
|
|
|
54
|
-
# List all
|
|
54
|
+
# List all realms
|
|
55
55
|
realm ls
|
|
56
56
|
|
|
57
57
|
# Add a diary entry
|
|
58
58
|
realm diary my-project "Finished the API integration, tests passing"
|
|
59
59
|
|
|
60
|
-
#
|
|
61
|
-
realm
|
|
60
|
+
# When you're done, you can delete the realm or leave it archived
|
|
61
|
+
# realm rm my-project --purge
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
---
|
|
@@ -68,11 +68,9 @@ realm seal my-project
|
|
|
68
68
|
| Command | Description |
|
|
69
69
|
|---------|-------------|
|
|
70
70
|
| `realm new <name> [--dir <path>] [--with-diary]` | Create a new realm |
|
|
71
|
-
| `realm ls
|
|
71
|
+
| `realm ls` | List realms |
|
|
72
72
|
| `realm cd <name>` | Print realm directory (`cd $(realm cd foo)`) |
|
|
73
73
|
| `realm prompt <name>` | Build context bundle — stdout, clipboard, or file |
|
|
74
|
-
| `realm seal <name>` | Seal a realm (mark complete) |
|
|
75
|
-
| `realm unseal <name>` | Unseal a realm (reactivate) |
|
|
76
74
|
| `realm rm <name> [--purge] [--yes]` | Remove from registry; `--purge` deletes directory |
|
|
77
75
|
| `realm diary <name> [message]` | Append diary entry or open in `$EDITOR` |
|
|
78
76
|
| `realm skill` | Print path to bundled SKILL.md |
|
|
@@ -109,9 +107,7 @@ version: 1
|
|
|
109
107
|
realms:
|
|
110
108
|
my-project:
|
|
111
109
|
dir: /Users/you/realms/my-project
|
|
112
|
-
status: active
|
|
113
110
|
created: 2026-04-18T08:55:00.000Z
|
|
114
|
-
sealed_at: null
|
|
115
111
|
description: ""
|
|
116
112
|
```
|
|
117
113
|
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -16,7 +16,7 @@ install: npm i -g agentrealm
|
|
|
16
16
|
|
|
17
17
|
A **realm** is an agentless sandbox workspace. Unlike an agent workspace where a dedicated agent
|
|
18
18
|
permanently guards the space, realms are ephemeral collaboration zones. Any agent can enter,
|
|
19
|
-
work, and leave.
|
|
19
|
+
work, and leave.
|
|
20
20
|
|
|
21
21
|
## When This Skill Applies
|
|
22
22
|
|
|
@@ -47,10 +47,9 @@ context block. Paste it into your session or use `--copy` to get it on the clipb
|
|
|
47
47
|
realm diary <name> "Brief note: what you did, what's next"
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
## Leaving
|
|
50
|
+
## Leaving
|
|
51
51
|
|
|
52
52
|
- Leave freely — no cleanup required beyond a diary note
|
|
53
|
-
- Seal when the work is fully done: `realm seal <name>`
|
|
54
53
|
|
|
55
54
|
## Common Commands
|
|
56
55
|
|
|
@@ -58,9 +57,8 @@ context block. Paste it into your session or use `--copy` to get it on the clipb
|
|
|
58
57
|
|---------|-------------|
|
|
59
58
|
| `realm new <name>` | Create a new realm |
|
|
60
59
|
| `realm prompt <name>` | Load realm context |
|
|
61
|
-
| `realm ls` | List
|
|
60
|
+
| `realm ls` | List realms |
|
|
62
61
|
| `realm diary <name> "msg"` | Log a diary entry |
|
|
63
|
-
| `realm seal <name>` | Seal a completed realm |
|
|
64
62
|
| `realm cd <name>` | Get realm directory path |
|
|
65
63
|
|
|
66
64
|
## Finding This Skill
|
package/src/cli.js
CHANGED
|
@@ -7,8 +7,6 @@ import { newCommand } from './commands/new.js';
|
|
|
7
7
|
import { lsCommand } from './commands/ls.js';
|
|
8
8
|
import { cdCommand } from './commands/cd.js';
|
|
9
9
|
import { promptCommand } from './commands/prompt.js';
|
|
10
|
-
import { sealCommand } from './commands/seal.js';
|
|
11
|
-
import { unsealCommand } from './commands/unseal.js';
|
|
12
10
|
import { rmCommand } from './commands/rm.js';
|
|
13
11
|
import { diaryCommand } from './commands/diary.js';
|
|
14
12
|
import { skillCommand } from './commands/skill.js';
|
|
@@ -27,8 +25,6 @@ newCommand(program);
|
|
|
27
25
|
lsCommand(program);
|
|
28
26
|
cdCommand(program);
|
|
29
27
|
promptCommand(program);
|
|
30
|
-
sealCommand(program);
|
|
31
|
-
unsealCommand(program);
|
|
32
28
|
rmCommand(program);
|
|
33
29
|
diaryCommand(program);
|
|
34
30
|
skillCommand(program);
|
package/src/commands/ls.js
CHANGED
|
@@ -5,36 +5,27 @@ export function lsCommand(program) {
|
|
|
5
5
|
program
|
|
6
6
|
.command('ls')
|
|
7
7
|
.description('List realms')
|
|
8
|
-
.
|
|
9
|
-
.action((opts) => {
|
|
8
|
+
.action(() => {
|
|
10
9
|
const registry = readRegistry();
|
|
11
10
|
const realms = Object.entries(registry.realms || {});
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
? realms
|
|
15
|
-
: realms.filter(([, r]) => r.status !== 'sealed');
|
|
16
|
-
|
|
17
|
-
if (filtered.length === 0) {
|
|
12
|
+
if (realms.length === 0) {
|
|
18
13
|
console.log('No realms found. Create one with: realm new <name>');
|
|
19
14
|
return;
|
|
20
15
|
}
|
|
21
16
|
|
|
22
|
-
const col1 = Math.max(4, ...
|
|
23
|
-
const col2 =
|
|
24
|
-
const col3 = Math.max(3, ...filtered.map(([, r]) => r.dir.length));
|
|
17
|
+
const col1 = Math.max(4, ...realms.map(([n]) => n.length));
|
|
18
|
+
const col2 = Math.max(3, ...realms.map(([, r]) => r.dir.length));
|
|
25
19
|
|
|
26
20
|
const header =
|
|
27
21
|
chalk.bold('NAME'.padEnd(col1)) + ' ' +
|
|
28
|
-
chalk.bold('STATUS'.padEnd(col2)) + ' ' +
|
|
29
22
|
chalk.bold('DIR');
|
|
30
23
|
console.log(header);
|
|
31
|
-
console.log('─'.repeat(col1 + col2 +
|
|
24
|
+
console.log('─'.repeat(col1 + col2 + 2));
|
|
32
25
|
|
|
33
|
-
for (const [name, realm] of
|
|
34
|
-
const statusColor = realm.status === 'sealed' ? chalk.gray : chalk.green;
|
|
26
|
+
for (const [name, realm] of realms) {
|
|
35
27
|
console.log(
|
|
36
28
|
name.padEnd(col1) + ' ' +
|
|
37
|
-
statusColor(realm.status.padEnd(col2)) + ' ' +
|
|
38
29
|
chalk.dim(realm.dir)
|
|
39
30
|
);
|
|
40
31
|
}
|
package/src/commands/new.js
CHANGED
package/src/commands/seal.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { readRegistry, requireRealm, updateRealm } from '../registry.js';
|
|
2
|
-
|
|
3
|
-
export function sealCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('seal <name>')
|
|
6
|
-
.description('Seal a realm (mark as done)')
|
|
7
|
-
.action((name) => {
|
|
8
|
-
const registry = readRegistry();
|
|
9
|
-
requireRealm(registry, name);
|
|
10
|
-
updateRealm(registry, name, {
|
|
11
|
-
status: 'sealed',
|
|
12
|
-
sealed_at: new Date().toISOString(),
|
|
13
|
-
});
|
|
14
|
-
console.log(`✓ Realm "${name}" sealed.`);
|
|
15
|
-
});
|
|
16
|
-
}
|
package/src/commands/unseal.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { readRegistry, requireRealm, updateRealm } from '../registry.js';
|
|
2
|
-
|
|
3
|
-
export function unsealCommand(program) {
|
|
4
|
-
program
|
|
5
|
-
.command('unseal <name>')
|
|
6
|
-
.description('Unseal a realm (reactivate)')
|
|
7
|
-
.action((name) => {
|
|
8
|
-
const registry = readRegistry();
|
|
9
|
-
requireRealm(registry, name);
|
|
10
|
-
updateRealm(registry, name, {
|
|
11
|
-
status: 'active',
|
|
12
|
-
sealed_at: null,
|
|
13
|
-
});
|
|
14
|
-
console.log(`✓ Realm "${name}" unsealed.`);
|
|
15
|
-
});
|
|
16
|
-
}
|