agenticros 0.1.19 → 0.2.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/dist/commands/skills.d.ts.map +1 -1
- package/dist/commands/skills.js +125 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/menu.js +22 -4
- package/dist/menu.js.map +1 -1
- package/dist/util/marketplace.d.ts +57 -0
- package/dist/util/marketplace.d.ts.map +1 -0
- package/dist/util/marketplace.js +144 -0
- package/dist/util/marketplace.js.map +1 -0
- package/dist/util/skills.d.ts +6 -6
- package/dist/util/skills.d.ts.map +1 -1
- package/dist/util/skills.js +14 -9
- package/dist/util/skills.js.map +1 -1
- package/package.json +12 -11
- package/runtime/BUNDLE.json +1 -1
- package/runtime/README.md +59 -2
- package/runtime/packages/agenticros/openclaw.plugin.json +1 -1
- package/runtime/packages/agenticros/src/config-page.ts +1 -1
- package/runtime/packages/agenticros/src/skill-loader.ts +109 -38
- package/runtime/packages/agenticros-claude-code/README.md +52 -9
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.d.ts +2 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.js +773 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/capabilities-mcp.test.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.d.ts +2 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.js +97 -0
- package/runtime/packages/agenticros-claude-code/dist/__tests__/follow-me-registry.test.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts +2 -2
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js +5 -5
- package/runtime/packages/agenticros-claude-code/dist/find-object/find-object.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.d.ts +109 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.js +392 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/depth-loop.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts +8 -3
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js +30 -12
- package/runtime/packages/agenticros-claude-code/dist/follow-me/loop.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/index.js +5 -5
- package/runtime/packages/agenticros-claude-code/dist/index.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.d.ts +16 -0
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.d.ts.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.js +19 -0
- package/runtime/packages/agenticros-claude-code/dist/mission-registry.js.map +1 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.d.ts +9 -0
- package/runtime/packages/agenticros-claude-code/dist/tools.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/tools.js +700 -54
- package/runtime/packages/agenticros-claude-code/dist/tools.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/transport.d.ts +28 -8
- package/runtime/packages/agenticros-claude-code/dist/transport.d.ts.map +1 -1
- package/runtime/packages/agenticros-claude-code/dist/transport.js +37 -34
- package/runtime/packages/agenticros-claude-code/dist/transport.js.map +1 -1
- package/runtime/packages/agenticros-claude-code/src/__tests__/capabilities-mcp.test.ts +2 -1
- package/runtime/packages/core/LICENSE +192 -0
- package/runtime/packages/core/README.md +88 -0
- package/runtime/packages/core/package.json +36 -3
- package/runtime/packages/core/src/__tests__/capabilities.test.ts +49 -44
- package/runtime/packages/core/src/capabilities.ts +19 -45
- package/runtime/packages/core/src/config.ts +1 -1
- package/runtime/scripts/configure_agenticros.sh +0 -0
- package/runtime/scripts/configure_for_sim.sh +0 -0
- package/runtime/scripts/fix-openclaw-control-ui-path.sh +0 -0
- package/runtime/scripts/install_cli.sh +0 -0
- package/runtime/scripts/install_rosbridge_from_source.sh +0 -0
- package/runtime/scripts/onboard_robot.sh +0 -0
- package/runtime/scripts/pack-runtime.mjs +0 -0
- package/runtime/scripts/refresh-skill-deps.mjs +0 -0
- package/runtime/scripts/run_demo_native.sh +0 -0
- package/runtime/scripts/run_nemoclaw_host_stack.sh +0 -0
- package/runtime/scripts/run_robot_rosbridge.sh +0 -0
- package/runtime/scripts/setup_gateway_plugin.sh +0 -0
- package/runtime/scripts/setup_robot.sh +0 -0
- package/runtime/scripts/setup_workspace.sh +0 -0
- package/runtime/scripts/sim/run_sim.sh +0 -0
- package/runtime/scripts/smoke_test_nemoclaw.sh +0 -0
- package/runtime/scripts/start_demo.sh +0 -0
- package/runtime/scripts/sync-skill-tools.mjs +2 -2
- package/runtime/scripts/use-openclaw-2026.2.26.sh +0 -0
- package/runtime/scripts/use-openclaw-2026.3.11.sh +0 -0
package/dist/util/skills.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skill discovery, validation, and config-file mutation primitives.
|
|
3
3
|
*
|
|
4
|
-
* An AgenticROS skill is a Node package whose `package.json` carries
|
|
5
|
-
* `
|
|
6
|
-
* function from its `main` entry. The OpenClaw AgenticROS plugin loads them
|
|
4
|
+
* An AgenticROS skill is a Node package whose `package.json` carries an
|
|
5
|
+
* `agenticros` block (with at least an `id`) and exports a
|
|
6
|
+
* `registerSkill(api, config, context)` function from its `main` entry. The OpenClaw AgenticROS plugin loads them
|
|
7
7
|
* at gateway start by walking two arrays in its config:
|
|
8
8
|
*
|
|
9
9
|
* - `skillPaths[]` — absolute directories to scan (validate `package.json`)
|
|
@@ -35,8 +35,8 @@ export function deriveSkillId(packageName) {
|
|
|
35
35
|
/**
|
|
36
36
|
* Inspect a directory and decide whether it's a valid AgenticROS skill clone.
|
|
37
37
|
* Returns a partial `SkillRef` (no `registeredAs`) or `undefined` when the
|
|
38
|
-
* directory is missing, lacks `package.json`, or doesn't
|
|
39
|
-
* `
|
|
38
|
+
* directory is missing, lacks `package.json`, or doesn't declare a valid
|
|
39
|
+
* `agenticros` block (with at least `id`).
|
|
40
40
|
*/
|
|
41
41
|
export function inspectSkillDir(dir) {
|
|
42
42
|
const absDir = isAbsolute(dir) ? dir : resolve(dir);
|
|
@@ -61,13 +61,18 @@ export function inspectSkillDir(dir) {
|
|
|
61
61
|
catch {
|
|
62
62
|
return undefined;
|
|
63
63
|
}
|
|
64
|
-
|
|
64
|
+
const block = pkg.agenticros;
|
|
65
|
+
if (!block || typeof block !== "object" || typeof block.id !== "string") {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const id = block.id;
|
|
69
|
+
if (!/^[a-z0-9][a-z0-9-]*$/.test(id))
|
|
65
70
|
return undefined;
|
|
66
71
|
const packageName = (pkg.name ?? "unknown").toString();
|
|
67
72
|
const mainRel = pkg.main ?? "index.js";
|
|
68
73
|
const entry = join(absDir, mainRel);
|
|
69
74
|
return {
|
|
70
|
-
id
|
|
75
|
+
id,
|
|
71
76
|
packageName,
|
|
72
77
|
dir: absDir,
|
|
73
78
|
entry,
|
|
@@ -212,14 +217,14 @@ export function listSkills() {
|
|
|
212
217
|
* Add a skill to the OpenClaw plugin config by absolute directory path.
|
|
213
218
|
* Idempotent: re-adding an existing entry is a no-op and returns `ok: true`
|
|
214
219
|
* with an explanatory message. The directory must contain a valid
|
|
215
|
-
* `package.json` with `
|
|
220
|
+
* `package.json` with an `agenticros` block (with at least `id`).
|
|
216
221
|
*/
|
|
217
222
|
export function addSkillByPath(dir) {
|
|
218
223
|
const info = inspectSkillDir(dir);
|
|
219
224
|
if (!info) {
|
|
220
225
|
return {
|
|
221
226
|
ok: false,
|
|
222
|
-
message: `Not an AgenticROS skill directory: ${dir} (need package.json with "
|
|
227
|
+
message: `Not an AgenticROS skill directory: ${dir} (need package.json with an "agenticros": { "id": "..." } block)`,
|
|
223
228
|
};
|
|
224
229
|
}
|
|
225
230
|
if (!openclawConfigExists()) {
|
package/dist/util/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/util/skills.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/util/skills.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agenticros",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AgenticROS - agentic AI for ROS-powered robots. Single CLI to launch real-robot or simulated demos, manage configuration, and inspect status.",
|
|
6
6
|
"keywords": [
|
|
@@ -31,6 +31,16 @@
|
|
|
31
31
|
"engines": {
|
|
32
32
|
"node": ">=20.0.0"
|
|
33
33
|
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
37
|
+
"test": "node --test --test-force-exit \"dist/__tests__/*.test.js\"",
|
|
38
|
+
"clean": "rm -rf dist runtime tsconfig.tsbuildinfo",
|
|
39
|
+
"pack:runtime": "node ../../scripts/pack-runtime.mjs",
|
|
40
|
+
"size:check": "node ../../scripts/check-cli-tarball-size.mjs",
|
|
41
|
+
"tarball:check": "node ../../scripts/check-cli-tarball-install.mjs",
|
|
42
|
+
"prepublishOnly": "pnpm run clean && pnpm run build && pnpm run pack:runtime && pnpm run size:check && pnpm run tarball:check"
|
|
43
|
+
},
|
|
34
44
|
"dependencies": {
|
|
35
45
|
"@inquirer/prompts": "^7.0.0",
|
|
36
46
|
"commander": "^12.1.0",
|
|
@@ -49,14 +59,5 @@
|
|
|
49
59
|
"type": "git",
|
|
50
60
|
"url": "git+https://github.com/agenticros/agenticros.git",
|
|
51
61
|
"directory": "packages/agenticros-cli"
|
|
52
|
-
},
|
|
53
|
-
"scripts": {
|
|
54
|
-
"build": "tsc",
|
|
55
|
-
"typecheck": "tsc --noEmit",
|
|
56
|
-
"test": "node --test --test-force-exit \"dist/__tests__/*.test.js\"",
|
|
57
|
-
"clean": "rm -rf dist runtime tsconfig.tsbuildinfo",
|
|
58
|
-
"pack:runtime": "node ../../scripts/pack-runtime.mjs",
|
|
59
|
-
"size:check": "node ../../scripts/check-cli-tarball-size.mjs",
|
|
60
|
-
"tarball:check": "node ../../scripts/check-cli-tarball-install.mjs"
|
|
61
62
|
}
|
|
62
|
-
}
|
|
63
|
+
}
|
package/runtime/BUNDLE.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packedAt": "2026-06-
|
|
2
|
+
"packedAt": "2026-06-12T01:46:30.373Z",
|
|
3
3
|
"repo": "https://github.com/PlaiPin/agenticros",
|
|
4
4
|
"note": "This directory is a snapshot of the agenticros monorepo source. `agenticros init` will copy it to ~/agenticros and run pnpm install + colcon build there.",
|
|
5
5
|
"layout": {
|
package/runtime/README.md
CHANGED
|
@@ -25,6 +25,7 @@ With AgenticROS, your robot can describe what it sees, follow intent ("go check
|
|
|
25
25
|
- **[OpenClaw](https://openclaw.ai)** — Native gateway plugin with ROS 2 tools, commands, a config UI, a teleop web app, and a skill loader. The flagship integration.
|
|
26
26
|
- **[NVIDIA NemoClaw](https://github.com/NVIDIA/NemoClaw)** — Run AgenticROS inside NemoClaw's OpenShell sandbox with policy-enforced egress and managed NVIDIA inference; ROS 2, RealSense, and rosbridge stay on the host while the plugin runs sandboxed.
|
|
27
27
|
- **[Anthropic Claude](https://www.anthropic.com/claude)** — A single MCP server powers **Claude Code** (terminal), **Claude Desktop** (macOS / Windows), and **Claude Dispatch** (iOS, paired to your Mac). Ask Claude what your robot sees, and it answers with a live camera snapshot and depth reading.
|
|
28
|
+
- **[OpenAI Codex CLI](https://developers.openai.com/codex/)** — The same MCP server registers cleanly via `codex mcp add agenticros — node …/packages/agenticros-claude-code/dist/index.js`, or via a `[mcp_servers.agenticros]` entry in `~/.codex/config.toml`. Same 15 tools, same JSON shapes. Setup: [packages/agenticros-claude-code/README.md#codex-cli-openai](packages/agenticros-claude-code/README.md#codex-cli-openai).
|
|
28
29
|
- **[Google Gemini](https://ai.google.dev/)** — Standalone CLI that uses Gemini function calling against the same ROS 2 tools (no MCP required) — ideal for scripting and headless agents.
|
|
29
30
|
|
|
30
31
|
AgenticROS is built so that new adapters (LangGraph, OpenAI, local models, voice stacks, etc.) can be added without touching the ROS 2 layer. The core transport and tool contract are platform-agnostic; adapters are thin shims that surface those tools to each agent runtime.
|
|
@@ -44,6 +45,61 @@ Claude (Code / desktop / Dispatch) → agenticros MCP server → Core → ROS2 r
|
|
|
44
45
|
Gemini CLI → @agenticros/gemini (function calling) → Core → ROS2 robots
|
|
45
46
|
```
|
|
46
47
|
|
|
48
|
+
## A shared mission language for robots
|
|
49
|
+
|
|
50
|
+
The same tool surface across every adapter — Claude Code, Codex, Gemini, OpenClaw — so two different agents on two different stacks can both speak the same dialect when controlling the same robot. Built around five capabilities.
|
|
51
|
+
|
|
52
|
+
### Capability manifests — robots advertise *verbs*
|
|
53
|
+
|
|
54
|
+
Every AgenticROS-enabled robot exposes a typed list of named verbs through `ros2_list_capabilities`: `drive_base`, `take_snapshot`, `measure_depth`, `find_object`, `follow_person`, plus whatever a [skill package](#skills) contributes. The agent plans against the verbs instead of raw ROS 2 topics — and the manifest is shaped to double as an ACP / A2A agent card.
|
|
55
|
+
|
|
56
|
+
### Mission chaining — `run_mission`
|
|
57
|
+
|
|
58
|
+
One MCP tool, `run_mission`, executes a declarative step graph. Each step is `{ id, capability, inputs, on_fail }`. Outputs from any step flow into later steps via `{{stepId.outputs.field}}` template references — so a detection wires straight into the next motion command with no glue code:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"steps": [
|
|
63
|
+
{ "id": "find", "capability": "find_object", "inputs": { "target": "chair" } },
|
|
64
|
+
{ "id": "approach", "capability": "drive_base",
|
|
65
|
+
"inputs": {
|
|
66
|
+
"linear_x": 0.2,
|
|
67
|
+
"angular_z": "{{find.outputs.horizontal_offset}}"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Natural-language goals
|
|
75
|
+
|
|
76
|
+
`run_mission` also accepts a `goal` field — plain English. A rule-based, deterministic planner in `@agenticros/core` compiles it into a runnable mission against the robot's capability registry:
|
|
77
|
+
|
|
78
|
+
- `"take a picture"` → `take_snapshot`
|
|
79
|
+
- `"follow me"` → `follow_person`
|
|
80
|
+
- `"drive forward at 0.3 m/s"` → `drive_base { linear_x: 0.3 }`
|
|
81
|
+
- `"find a chair and drive toward it"` → the two-step compound plan above
|
|
82
|
+
|
|
83
|
+
No LLM dependency (the planner is a few hundred lines of pattern matching, so the runtime doesn't require Ollama) and no fabricated calls (it only emits capabilities actually in the registry). Uncompilable goals return a clean error with the recognised-verb list so the agent can self-correct.
|
|
84
|
+
|
|
85
|
+
### Multi-robot fleets
|
|
86
|
+
|
|
87
|
+
`ros2_list_robots`, `ros2_discover_robots`, and `ros2_find_robots_for({ capability, kind?, online? })` let an agent ask *"give me an AMR that can `follow_person` and is currently online"* and get back a ranked list. The CLI keeps fleet metadata in sync without hand-editing JSON:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
agenticros robots add my-amr \
|
|
91
|
+
--kind=amr --sensors=has_realsense,!has_arm \
|
|
92
|
+
--capabilities=drive_base,take_snapshot,follow_person
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
On the ROS side, every robot publishes a 1 Hz heartbeat on `<ns>/agenticros/robot_info` so the online filter reflects what's actually reachable. A single mission can route different steps to different robots — *"the AMR finds the box, the arm picks it up"* runs as one mission.
|
|
96
|
+
|
|
97
|
+
### Cancel + shared transcripts
|
|
98
|
+
|
|
99
|
+
`mission_cancel({ mission_id })` flips an in-process cancellation token; the runner stops at the next step boundary and marks remaining steps `cancelled`. When the [shared memory backend](#memory-optional) is on, every step is also written to `mission:<id>` in long-term memory, tagged with `step:<status>` and `capability:<id>`. A different agent — different process, different vendor — can `memory_recall` later and reconstruct exactly what happened, so two agents can collaborate on or hand off a mission.
|
|
100
|
+
|
|
101
|
+
Full architecture + design trade-offs: **[docs/strategy-ai-agents-plus-ros.md](docs/strategy-ai-agents-plus-ros.md)**.
|
|
102
|
+
|
|
47
103
|
## Repository layout
|
|
48
104
|
|
|
49
105
|
- `**packages/core**` — Transport, types, config (Zod). Used by all adapters.
|
|
@@ -107,6 +163,7 @@ agenticros up real # real robot stack
|
|
|
107
163
|
agenticros up sim-amr # simulated AMR (Gazebo + RViz, headless on Jetson)
|
|
108
164
|
agenticros up sim-arm # simulated 6-DOF arm
|
|
109
165
|
agenticros mode <real|sim> # swap the active config profile (namespace, transport)
|
|
166
|
+
agenticros robots # list / add / remove robots in the fleet (kind, sensors, capabilities)
|
|
110
167
|
agenticros skills # list / add / remove AgenticROS skills (see below)
|
|
111
168
|
agenticros doctor # coloured health check
|
|
112
169
|
agenticros down # stop everything we started
|
|
@@ -382,11 +439,11 @@ Per-skill behaviour lives under `config.skills.<skillId>` (e.g. `config.skills.f
|
|
|
382
439
|
|
|
383
440
|
### Contract & writing your own skill
|
|
384
441
|
|
|
385
|
-
A skill is a Node package with `"
|
|
442
|
+
A skill is a Node package with an `"agenticros": { "id": "..." }` block in `package.json` and a `registerSkill(api, config, context)` export from `main`. Publish it to **[skills.agenticros.com](https://skills.agenticros.com)** so others can install it with `npx agenticros skills install <slug>`. See **[docs/skills.md](docs/skills.md)** for the full contract and **[agenticros-skill-followme](https://github.com/agenticros/agenticros-skill-followme)** as a reference template.
|
|
386
443
|
|
|
387
444
|
## Strategy & vision
|
|
388
445
|
|
|
389
|
-
Where AgenticROS is going next — the
|
|
446
|
+
Where AgenticROS is going next — beyond the shared mission language above, the roadmap covers turning capability manifests into agent cards on the wire (WebRTC / A2A so a robot can register itself as an agent in a mesh), an LLM-backed planner behind the existing `compileGoalToMission` contract, the `skills.agenticros.com` marketplace with declarative auto-fetch and in-agent installs, spatial memory, and cross-vendor agent collaboration via ACP / A2A: **[docs/strategy-ai-agents-plus-ros.md](docs/strategy-ai-agents-plus-ros.md)**.
|
|
390
447
|
|
|
391
448
|
## License
|
|
392
449
|
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
},
|
|
374
374
|
"skillPaths": {
|
|
375
375
|
"type": "array",
|
|
376
|
-
"description": "Directories to scan for skill packages (package.json with
|
|
376
|
+
"description": "Directories to scan for skill packages (package.json with an `agenticros` block).",
|
|
377
377
|
"items": {
|
|
378
378
|
"type": "string"
|
|
379
379
|
},
|
|
@@ -125,7 +125,7 @@ export function getConfigPageHtml(): string {
|
|
|
125
125
|
<div class="field">
|
|
126
126
|
<label for="skillPaths">Skill paths (comma-separated)</label>
|
|
127
127
|
<input type="text" id="skillPaths" name="skillPaths" placeholder="e.g. /path/to/skills" />
|
|
128
|
-
<div class="field-hint">Directories to scan for skill packages (package.json with
|
|
128
|
+
<div class="field-hint">Directories to scan for skill packages (package.json with an "agenticros" block).</div>
|
|
129
129
|
</div>
|
|
130
130
|
</section>
|
|
131
131
|
<section>
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
|
|
21
21
|
import { createRequire } from "node:module";
|
|
22
22
|
import { pathToFileURL } from "node:url";
|
|
23
|
-
import { readFileSync,
|
|
24
|
-
import { join } from "node:path";
|
|
23
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
24
|
+
import { dirname, join } from "node:path";
|
|
25
25
|
import type { OpenClawPluginApi } from "./plugin-api.js";
|
|
26
26
|
import type { AgenticROSConfig } from "@agenticros/core";
|
|
27
27
|
import type { RegisterSkill, SkillContext } from "./skill-api.js";
|
|
@@ -41,12 +41,40 @@ export function getLoadedSkillIds(): string[] {
|
|
|
41
41
|
return [...loadedSkillIds];
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
/**
|
|
45
|
+
* Read the `agenticros` block from a skill's package.json. The block is now
|
|
46
|
+
* the single source of truth for the skill id, display name, and capability
|
|
47
|
+
* manifest. The legacy `agenticrosSkill: true | { capabilities }` form is
|
|
48
|
+
* NOT supported — every skill must declare a fully-formed `agenticros` block.
|
|
49
|
+
*/
|
|
50
|
+
interface AgenticROSBlock {
|
|
51
|
+
id: string;
|
|
52
|
+
displayName?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
categories?: string[];
|
|
55
|
+
screenshots?: string[];
|
|
56
|
+
demoVideoUrl?: string;
|
|
57
|
+
capabilities?: unknown[];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
interface SkillManifest {
|
|
61
|
+
name?: string;
|
|
62
|
+
main?: string;
|
|
63
|
+
agenticros?: AgenticROSBlock;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function readSkillManifest(pkgJsonPath: string): SkillManifest | null {
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(readFileSync(pkgJsonPath, "utf-8")) as SkillManifest;
|
|
69
|
+
} catch {
|
|
70
|
+
return null;
|
|
48
71
|
}
|
|
49
|
-
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function isValidBlock(block: unknown): block is AgenticROSBlock {
|
|
75
|
+
if (!block || typeof block !== "object") return false;
|
|
76
|
+
const b = block as { id?: unknown };
|
|
77
|
+
return typeof b.id === "string" && /^[a-z0-9][a-z0-9-]*$/.test(b.id);
|
|
50
78
|
}
|
|
51
79
|
|
|
52
80
|
/**
|
|
@@ -56,7 +84,7 @@ function deriveSkillId(packageName: string): string {
|
|
|
56
84
|
* — including any `api.registerTool(...)` the skill makes — completes before
|
|
57
85
|
* we return, and therefore before the OpenClaw host snapshots `captured.tools`.
|
|
58
86
|
*
|
|
59
|
-
* Returns the
|
|
87
|
+
* Returns the declared skill id on success, or `null` (with a logged warning /
|
|
60
88
|
* error) on any failure mode: missing export, top-level await (which surfaces
|
|
61
89
|
* as `ERR_REQUIRE_ASYNC_MODULE`), or thrown initialization error.
|
|
62
90
|
*/
|
|
@@ -66,8 +94,8 @@ function loadSkillModuleSync(
|
|
|
66
94
|
context: SkillContext,
|
|
67
95
|
entryPath: string,
|
|
68
96
|
packageName: string,
|
|
97
|
+
skillId: string,
|
|
69
98
|
): string | null {
|
|
70
|
-
const skillId = deriveSkillId(packageName);
|
|
71
99
|
let mod: unknown;
|
|
72
100
|
try {
|
|
73
101
|
mod = require(entryPath);
|
|
@@ -110,44 +138,80 @@ function loadSkillModuleSync(
|
|
|
110
138
|
}
|
|
111
139
|
}
|
|
112
140
|
|
|
141
|
+
interface ResolvedSkill {
|
|
142
|
+
entry: string;
|
|
143
|
+
packageName: string;
|
|
144
|
+
skillId: string;
|
|
145
|
+
}
|
|
146
|
+
|
|
113
147
|
/**
|
|
114
|
-
* Resolve
|
|
148
|
+
* Resolve an npm package name to a `ResolvedSkill` (entry + name + skill id).
|
|
149
|
+
* Reads the package's package.json to extract `pkg.agenticros.id`; refuses
|
|
150
|
+
* to register the skill if the block is missing or malformed.
|
|
115
151
|
*/
|
|
116
|
-
function
|
|
152
|
+
function resolveSkillByPackage(
|
|
153
|
+
api: OpenClawPluginApi,
|
|
154
|
+
packageName: string,
|
|
155
|
+
): ResolvedSkill | null {
|
|
156
|
+
let entry: string;
|
|
117
157
|
try {
|
|
118
|
-
|
|
119
|
-
return pkgPath;
|
|
158
|
+
entry = require.resolve(packageName, { paths: [process.cwd()] });
|
|
120
159
|
} catch {
|
|
160
|
+
api.logger.warn(`Skill package not found: ${packageName}`);
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
// Walk up from the resolved entry to find the package.json.
|
|
164
|
+
const pkgJsonPath = findPackageJsonForEntry(entry);
|
|
165
|
+
if (!pkgJsonPath) {
|
|
166
|
+
api.logger.warn(`Skill ${packageName}: cannot locate package.json next to ${entry}`);
|
|
121
167
|
return null;
|
|
122
168
|
}
|
|
169
|
+
const manifest = readSkillManifest(pkgJsonPath);
|
|
170
|
+
if (!manifest || !isValidBlock(manifest.agenticros)) {
|
|
171
|
+
api.logger.warn(
|
|
172
|
+
`Skill ${packageName}: missing or invalid \`agenticros\` block in package.json. ` +
|
|
173
|
+
"Declare an `agenticros.id` (kebab-case) to register as a skill.",
|
|
174
|
+
);
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
entry,
|
|
179
|
+
packageName: manifest.name ?? packageName,
|
|
180
|
+
skillId: manifest.agenticros!.id,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Walk up from `entry` (a file inside the package) to find its package.json. */
|
|
185
|
+
function findPackageJsonForEntry(entry: string): string | null {
|
|
186
|
+
let dir = dirname(entry);
|
|
187
|
+
for (let i = 0; i < 6; i++) {
|
|
188
|
+
const candidate = join(dir, "package.json");
|
|
189
|
+
if (existsSync(candidate)) return candidate;
|
|
190
|
+
const parent = dirname(dir);
|
|
191
|
+
if (parent === dir) return null;
|
|
192
|
+
dir = parent;
|
|
193
|
+
}
|
|
194
|
+
return null;
|
|
123
195
|
}
|
|
124
196
|
|
|
125
197
|
/**
|
|
126
|
-
* Scan a directory for package.json with
|
|
198
|
+
* Scan a directory for a package.json with a valid `agenticros` block and
|
|
199
|
+
* return its entry path + declared id.
|
|
127
200
|
*/
|
|
128
|
-
function findSkillInPath(dirPath: string):
|
|
201
|
+
function findSkillInPath(dirPath: string): ResolvedSkill | null {
|
|
129
202
|
if (!existsSync(dirPath)) return null;
|
|
130
203
|
const pkgPath = join(dirPath, "package.json");
|
|
131
204
|
if (!existsSync(pkgPath)) return null;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
main?: string;
|
|
135
|
-
name?: string;
|
|
136
|
-
};
|
|
137
|
-
try {
|
|
138
|
-
pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
139
|
-
} catch {
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
// Accept either the legacy boolean (`"agenticrosSkill": true`) or the
|
|
143
|
-
// Phase-1 object form (`"agenticrosSkill": { capabilities: [...] }`).
|
|
144
|
-
// Anything truthy registers the package as a skill; the capability
|
|
145
|
-
// schema is read separately by @agenticros/core.
|
|
146
|
-
if (!pkg.agenticrosSkill) return null;
|
|
205
|
+
const pkg = readSkillManifest(pkgPath);
|
|
206
|
+
if (!pkg || !isValidBlock(pkg.agenticros)) return null;
|
|
147
207
|
const main = pkg.main ?? "index.js";
|
|
148
208
|
const entry = join(dirPath, main);
|
|
149
209
|
if (!existsSync(entry)) return null;
|
|
150
|
-
return {
|
|
210
|
+
return {
|
|
211
|
+
entry,
|
|
212
|
+
packageName: pkg.name ?? "unknown",
|
|
213
|
+
skillId: pkg.agenticros!.id,
|
|
214
|
+
};
|
|
151
215
|
}
|
|
152
216
|
|
|
153
217
|
/**
|
|
@@ -174,19 +238,25 @@ export function loadSkills(
|
|
|
174
238
|
loadedSkillIds.length = 0;
|
|
175
239
|
|
|
176
240
|
for (const pkgName of packages) {
|
|
177
|
-
const
|
|
178
|
-
if (!
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
241
|
+
const resolved = resolveSkillByPackage(api, pkgName);
|
|
242
|
+
if (!resolved) continue;
|
|
243
|
+
const skillId = loadSkillModuleSync(
|
|
244
|
+
api,
|
|
245
|
+
config,
|
|
246
|
+
context,
|
|
247
|
+
resolved.entry,
|
|
248
|
+
resolved.packageName,
|
|
249
|
+
resolved.skillId,
|
|
250
|
+
);
|
|
183
251
|
if (skillId) loadedSkillIds.push(skillId);
|
|
184
252
|
}
|
|
185
253
|
|
|
186
254
|
for (const dir of paths) {
|
|
187
255
|
const resolved = findSkillInPath(dir);
|
|
188
256
|
if (!resolved) {
|
|
189
|
-
api.logger.warn(
|
|
257
|
+
api.logger.warn(
|
|
258
|
+
`No agenticros skill in path: ${dir} (missing \`agenticros\` block in package.json).`,
|
|
259
|
+
);
|
|
190
260
|
continue;
|
|
191
261
|
}
|
|
192
262
|
const skillId = loadSkillModuleSync(
|
|
@@ -195,6 +265,7 @@ export function loadSkills(
|
|
|
195
265
|
context,
|
|
196
266
|
resolved.entry,
|
|
197
267
|
resolved.packageName,
|
|
268
|
+
resolved.skillId,
|
|
198
269
|
);
|
|
199
270
|
if (skillId && !loadedSkillIds.includes(skillId)) loadedSkillIds.push(skillId);
|
|
200
271
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AgenticROS Claude Code adapter
|
|
2
2
|
|
|
3
|
-
MCP (Model Context Protocol) server that exposes AgenticROS ROS2 tools to **Claude Code CLI** and to the **Claude desktop app** on macOS (including **Claude Dispatch** on iPhone when paired to Claude on your Mac). Use natural language to control and query your ROS2 robot (e.g. "what do you see?"
|
|
3
|
+
MCP (Model Context Protocol) server that exposes AgenticROS ROS2 tools to **Claude Code CLI** and to the **Claude desktop app** on macOS (including **Claude Dispatch** on iPhone when paired to Claude on your Mac). Use natural language to control and query your ROS2 robot (e.g. *"what do you see?"*, *"find a chair and drive toward it"*, *"list every robot that can follow a person"*).
|
|
4
4
|
|
|
5
5
|
This adapter does **not** provide the config or teleop web UI; use the [OpenClaw plugin](../../packages/agenticros) for that, or run the gateway for the browser-based teleop page.
|
|
6
6
|
|
|
@@ -94,6 +94,38 @@ claude
|
|
|
94
94
|
|
|
95
95
|
Scope options: `--scope user` (default), `--scope project` (shared via `.mcp.json`).
|
|
96
96
|
|
|
97
|
+
## Codex CLI (OpenAI)
|
|
98
|
+
|
|
99
|
+
The same MCP server works unmodified with the **OpenAI Codex CLI** — Codex is a vanilla MCP client, and our server speaks the standard `2024-11-05` MCP protocol that every MCP-compatible client uses. Two ways to register it:
|
|
100
|
+
|
|
101
|
+
**Option A — `codex mcp add` (recommended)**
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
cd /path/to/agenticros
|
|
105
|
+
codex mcp add agenticros \
|
|
106
|
+
-- node "$(pwd)/packages/agenticros-claude-code/dist/index.js"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Option B — direct edit of `~/.codex/config.toml`**
|
|
110
|
+
|
|
111
|
+
```toml
|
|
112
|
+
[mcp_servers.agenticros]
|
|
113
|
+
command = "node"
|
|
114
|
+
args = ["/ABSOLUTE/PATH/TO/agenticros/packages/agenticros-claude-code/dist/index.js"]
|
|
115
|
+
enabled = true
|
|
116
|
+
startup_timeout_sec = 30
|
|
117
|
+
|
|
118
|
+
[mcp_servers.agenticros.env]
|
|
119
|
+
AGENTICROS_ROBOT_NAMESPACE = "robotYOUR_NAMESPACE_NO_DASHES"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Then start a Codex session and run `/mcp` to verify — you should see `agenticros` connected with **15 tools** (more if you have skills like `agenticros-skill-followme` or `agenticros-skill-find` registered). Same tools, same tool names, same JSON shapes as in Claude Code; everything in the **Tools** section below applies identically.
|
|
123
|
+
|
|
124
|
+
Two Codex-specific notes:
|
|
125
|
+
|
|
126
|
+
- **Absolute path required.** Codex's working directory at server-spawn time is not the AgenticROS repo root, so `args = ["packages/agenticros-claude-code/dist/index.js"]` will fail. Use the full absolute path.
|
|
127
|
+
- **Project-scoped config.** Codex also supports a `.codex/config.toml` in a project directory (and a `mcp.json` in cwd on recent builds) — handy for per-repo MCP setups when you don't want `agenticros` enabled globally. See OpenAI's [Codex config reference](https://developers.openai.com/codex/config-reference) for the precedence rules.
|
|
128
|
+
|
|
97
129
|
## Claude desktop app + Claude Dispatch (iOS)
|
|
98
130
|
|
|
99
131
|
The Claude **desktop** app uses a different MCP config file than Claude Code:
|
|
@@ -134,18 +166,29 @@ The server exposes the same ROS2 tools as the OpenClaw plugin:
|
|
|
134
166
|
|
|
135
167
|
| Tool | Description |
|
|
136
168
|
|------|-------------|
|
|
169
|
+
| **Inspection** | |
|
|
137
170
|
| `ros2_list_topics` | List topics and types |
|
|
138
|
-
| `
|
|
171
|
+
| `ros2_list_capabilities` | Typed verb manifest (built-in + skill-declared) — the planning surface for agents |
|
|
172
|
+
| **Fleet** | |
|
|
173
|
+
| `ros2_list_robots` | List configured robots — id, name, kind, capabilities, online status |
|
|
174
|
+
| `ros2_discover_robots` | Online discovery: detect `/<ns>/cmd_vel` namespaces + classify reachability |
|
|
175
|
+
| `ros2_find_robots_for` | Ranked filter by capability + kind + online — *"who can `follow_person` right now?"* |
|
|
176
|
+
| **Missions** | |
|
|
177
|
+
| `run_mission` | Execute a multi-step mission **or** compile a natural-language `goal` into one. Chains capabilities via `{{stepId.outputs.field}}` template refs; returns a `mission_id` |
|
|
178
|
+
| `mission_cancel` | Cancel an in-flight mission by `mission_id` at the next step boundary (idempotent, safe on unknown ids) |
|
|
179
|
+
| **Direct ROS** | |
|
|
180
|
+
| `ros2_publish` | Publish to a topic (e.g. cmd_vel) — safety-clamped |
|
|
139
181
|
| `ros2_subscribe_once` | Get next message from a topic |
|
|
140
182
|
| `ros2_service_call` | Call a ROS2 service |
|
|
141
183
|
| `ros2_action_goal` | Send goal to an action server |
|
|
142
184
|
| `ros2_param_get` / `ros2_param_set` | Get/set node parameters |
|
|
143
|
-
| `ros2_camera_snapshot` | "What do you see" — one frame from camera topic |
|
|
185
|
+
| `ros2_camera_snapshot` | *"What do you see"* — one frame from camera topic |
|
|
144
186
|
| `ros2_depth_distance` | Distance in meters from depth camera |
|
|
145
|
-
|
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
187
|
+
| **Memory** *(only when enabled)* | |
|
|
188
|
+
| `memory_remember` | Store a durable fact for the robot — shared with OpenClaw, Claude Desktop, Gemini |
|
|
189
|
+
| `memory_recall` | Semantic search across long-term memory (also reads `mission:<id>` step transcripts) |
|
|
190
|
+
| `memory_forget` | Delete by id, query, or whole namespace |
|
|
191
|
+
| `memory_status` | Health check + record count + embedder info |
|
|
149
192
|
|
|
150
193
|
Safety limits (max linear/angular velocity) from config are applied before `ros2_publish`.
|
|
151
194
|
|
|
@@ -255,6 +298,6 @@ If `ros2_publish` runs but the robot doesn’t move:
|
|
|
255
298
|
|
|
256
299
|
In the chat you can type `/mcp` to see MCP server status. If the transport isn’t running (e.g. no Zenoh router), tool calls will fail with connection errors until the ROS2 side is up.
|
|
257
300
|
|
|
258
|
-
##
|
|
301
|
+
## Skills
|
|
259
302
|
|
|
260
|
-
|
|
303
|
+
Skill packages (e.g. `agenticros-skill-followme`, `agenticros-skill-find`) extend the capability registry with new verbs like `follow_person` and `find_object`. The MCP server reads each skill's `package.json` `agenticros` block (`id`, `capabilities[]`) at startup and surfaces those verbs through `ros2_list_capabilities` and `run_mission` — no per-skill MCP tool needed. To register a skill for this adapter, install it with `agenticros skills install <slug>` from the marketplace, or add its path under `skillPaths[]` in `~/.agenticros/config.json` (or use the `agenticros skills add <path>` CLI). See [docs/skills.md](../../docs/skills.md) for the full skill contract.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities-mcp.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/capabilities-mcp.test.ts"],"names":[],"mappings":""}
|