agentrealm 0.1.0 → 1.0.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
@@ -5,6 +5,7 @@
5
5
  [![npm](https://img.shields.io/npm/v/agentrealm.svg)](https://www.npmjs.com/package/agentrealm)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
7
  [![Node.js](https://img.shields.io/node/v/agentrealm)](package.json)
8
+ [![Release](https://github.com/exisz/agentrealm/actions/workflows/release.yml/badge.svg)](https://github.com/exisz/agentrealm/actions/workflows/release.yml)
8
9
 
9
10
  ---
10
11
 
@@ -12,7 +13,7 @@
12
13
 
13
14
  A **realm** is a lightweight, agentless sandbox workspace for AI agents.
14
15
 
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 objective is complete, the realm is sealed.
16
+ 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
17
 
17
18
  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
19
 
@@ -23,7 +24,7 @@ Think of it as a shared project folder with built-in structure, a context loader
23
24
  | Persistent agent | ✅ Always watching | ❌ Agentless |
24
25
  | Entry model | One dedicated agent | Any agent |
25
26
  | Context loading | Agent-managed | `realm prompt <name>` |
26
- | Lifecycle | Ongoing | Scoped → seal when done |
27
+ | Lifecycle | Ongoing | Scoped → delete when done |
27
28
  | Use case | Long-lived assistant | Focused task or project |
28
29
  | Overhead | High | Low |
29
30
 
@@ -51,14 +52,14 @@ realm prompt my-project
51
52
  # Copy context to clipboard (then paste into your agent)
52
53
  realm prompt my-project --copy
53
54
 
54
- # List all active realms
55
+ # List all realms
55
56
  realm ls
56
57
 
57
58
  # Add a diary entry
58
59
  realm diary my-project "Finished the API integration, tests passing"
59
60
 
60
- # Seal when done
61
- realm seal my-project
61
+ # When you're done, you can delete the realm or leave it archived
62
+ # realm rm my-project --purge
62
63
  ```
63
64
 
64
65
  ---
@@ -68,11 +69,9 @@ realm seal my-project
68
69
  | Command | Description |
69
70
  |---------|-------------|
70
71
  | `realm new <name> [--dir <path>] [--with-diary]` | Create a new realm |
71
- | `realm ls [--all]` | List realms (active by default; `--all` includes sealed) |
72
+ | `realm ls` | List realms |
72
73
  | `realm cd <name>` | Print realm directory (`cd $(realm cd foo)`) |
73
74
  | `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
75
  | `realm rm <name> [--purge] [--yes]` | Remove from registry; `--purge` deletes directory |
77
76
  | `realm diary <name> [message]` | Append diary entry or open in `$EDITOR` |
78
77
  | `realm skill` | Print path to bundled SKILL.md |
@@ -109,9 +108,7 @@ version: 1
109
108
  realms:
110
109
  my-project:
111
110
  dir: /Users/you/realms/my-project
112
- status: active
113
111
  created: 2026-04-18T08:55:00.000Z
114
- sealed_at: null
115
112
  description: ""
116
113
  ```
117
114
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentrealm",
3
- "version": "0.1.0",
3
+ "version": "1.0.1",
4
4
  "description": "Agentless sandbox workspaces for AI agents",
5
5
  "type": "module",
6
6
  "engines": {
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. Realms are sealed when the work is done.
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 / Sealing
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 active realms |
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);
@@ -5,36 +5,27 @@ export function lsCommand(program) {
5
5
  program
6
6
  .command('ls')
7
7
  .description('List realms')
8
- .option('--all', 'Include sealed realms')
9
- .action((opts) => {
8
+ .action(() => {
10
9
  const registry = readRegistry();
11
10
  const realms = Object.entries(registry.realms || {});
12
11
 
13
- const filtered = opts.all
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, ...filtered.map(([n]) => n.length));
23
- const col2 = 8;
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 + col3 + 4));
24
+ console.log('─'.repeat(col1 + col2 + 2));
32
25
 
33
- for (const [name, realm] of filtered) {
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
  }
@@ -22,9 +22,7 @@ export function newCommand(program) {
22
22
 
23
23
  addRealm(registry, name, {
24
24
  dir,
25
- status: 'active',
26
25
  created: new Date().toISOString(),
27
- sealed_at: null,
28
26
  description: '',
29
27
  });
30
28
 
@@ -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
- }
@@ -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
- }