Skip to content

Working dimensional MCP server - tested with Claude Code MCP client#945

Merged
spomichter merged 12 commits intodevfrom
dimos-mcp-server
Jan 7, 2026
Merged

Working dimensional MCP server - tested with Claude Code MCP client#945
spomichter merged 12 commits intodevfrom
dimos-mcp-server

Conversation

@spomichter
Copy link
Contributor

@spomichter spomichter commented Jan 5, 2026

DimOS MCP Server

Expose DimOS robot skills to Claude Code via Model Context Protocol.

Setup

Add to Claude Code (one command):

claude mcp add --transport stdio dimos --scope project -- python -m dimos.protocol.mcp

Usage

Terminal 1 - Start DimOS:

dimos --replay run unitree-go2-agentic

Claude Code - Use robot skills:

> move forward 1 meter
> go to the kitchen
> tag this location as "desk"

How It Works

  1. llm_agent(mcp_port=9990) in the blueprint starts a TCP server
  2. Claude Code spawns the bridge (--bridge) which connects to localhost:9990
  3. Skills are exposed as MCP tools (e.g., relative_move, navigate_with_text)

@spomichter spomichter requested a review from a team January 5, 2026 02:06
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 5, 2026

Greptile Summary

This PR implements Model Context Protocol (MCP) support for DimOS, enabling Claude Code and other MCP clients to control robots through exposed skills. The implementation includes two architectures: a standalone stdio MCP server (DimensionalMCPServer) and a TCP-based server embedded in the Agent class with a bridge for stdio clients.

Major Changes:

  • Created DimensionalMCPServer that exposes SkillCoordinator skills as MCP tools via stdio transport
  • Added TCP MCP server capability to Agent class for integration with running DimOS agents
  • Implemented bridge.py to translate stdio (Claude Code) to TCP (DimOS agent)
  • Added CLI entry point supporting both standalone and bridge modes
  • Added mcp>=1.0.0 dependency to project
  • Enabled MCP server by default on port 9990 in Unitree Go2 agentic blueprint
  • Comprehensive test coverage for both unit and e2e scenarios

Issues Found:

  • The TCP server implementation in Agent._handle_mcp_request doesn't wait for skill completion before returning results, which may cause tools to return incomplete data

Confidence Score: 3/5

  • Safe to merge with one critical fix needed for skill execution synchronization
  • The implementation is well-structured with good test coverage and clear documentation. However, the TCP MCP server in Agent._handle_mcp_request has a critical bug where it doesn't wait for skill completion, potentially returning stale or incomplete results. The standalone DimensionalMCPServer correctly implements async waiting, but the Agent class version needs the same treatment for consistency and correctness.
  • dimos/agents/agent.py requires fixing the tools/call handler to wait for skill completion before returning results

Important Files Changed

Filename Overview
dimos/protocol/mcp/server.py New MCP server implementation exposing DimOS skills via stdio, uses async handlers to list and call tools with proper error handling
dimos/protocol/mcp/bridge.py TCP-to-stdio bridge implementation for connecting Claude Code to running DimOS agents
dimos/protocol/mcp/cli.py CLI entry point for MCP server with standalone and bridge modes
dimos/agents/agent.py Added TCP MCP server support to Agent class for handling JSON-RPC requests, but tools/call doesn't wait for skill completion

Sequence Diagram

sequenceDiagram
    participant CC as Claude Code
    participant Bridge as MCP Bridge<br/>(stdio→TCP)
    participant Agent as DimOS Agent<br/>(TCP Server)
    participant Coord as SkillCoordinator
    participant Robot as Robot Hardware

    Note over CC,Robot: Setup Phase
    CC->>Bridge: Launch via stdio
    Bridge->>Agent: Connect to localhost:9990 (TCP)
    Agent->>Agent: Start MCP TCP Server

    Note over CC,Robot: Tool Discovery
    CC->>Bridge: tools/list (JSON-RPC)
    Bridge->>Agent: Forward request
    Agent->>Coord: skills()
    Coord-->>Agent: Available skills
    Agent-->>Bridge: Tool list response
    Bridge-->>CC: Available tools

    Note over CC,Robot: Tool Execution
    CC->>Bridge: tools/call(name, args)
    Bridge->>Agent: Forward request
    Agent->>Coord: call_skill(call_id, name, args)
    Coord->>Robot: Execute skill
    Robot-->>Coord: Result
    Coord->>Agent: Generate snapshot
    Agent-->>Bridge: Skill result
    Bridge-->>CC: Tool response
Loading

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

11 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

Comment on lines +289 to +300
if method == "tools/call":
name, args = params.get("name"), params.get("arguments") or {}
call_id = str(uuid.uuid4())
self.coordinator.call_skill(call_id, name, args)
snapshot = self.coordinator.generate_snapshot()
result = snapshot.get(call_id)
text = str(result.content()) if result and result.content() else "Skill started"
return {
"jsonrpc": "2.0",
"id": req_id,
"result": {"content": [{"type": "text", "text": text}]},
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: The tools/call handler doesn't wait for skill completion, unlike DimensionalMCPServer.call_tool() which uses await self.coordinator.wait_for_updates(timeout=60). This means responses may return "Skill started" before the skill finishes.

Suggested change
if method == "tools/call":
name, args = params.get("name"), params.get("arguments") or {}
call_id = str(uuid.uuid4())
self.coordinator.call_skill(call_id, name, args)
snapshot = self.coordinator.generate_snapshot()
result = snapshot.get(call_id)
text = str(result.content()) if result and result.content() else "Skill started"
return {
"jsonrpc": "2.0",
"id": req_id,
"result": {"content": [{"type": "text", "text": text}]},
}
if method == "tools/call":
name, args = params.get("name"), params.get("arguments") or {}
call_id = str(uuid.uuid4())
self.coordinator.call_skill(call_id, name, args)
# Wait for skill to complete
try:
loop = asyncio.get_event_loop()
loop.run_until_complete(self.coordinator.wait_for_updates(timeout=60))
except Exception as e:
logger.error(f"MCP: Error waiting for skill: {e}")
snapshot = self.coordinator.generate_snapshot()
result = snapshot.get(call_id)
text = str(result.content()) if result and result.content() else "Skill completed"
return {
"jsonrpc": "2.0",
"id": req_id,
"result": {"content": [{"type": "text", "text": text}]},
}

Copy link
Contributor Author

@spomichter spomichter Jan 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah this is the last issue - handling async and sync skill execution and tool calling responses via the SkillCoordinator im not sure best way to do this. Currently doing this thing where i run

            result = snapshot.get(call_id)

Since i dont have access to the skill_call level of abstraction.

Have only spent 5 mins on this problem tho should be easy fix

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at your MCP handler, the issue is that you're checking the snapshot immediately after calling the skill, but async skills haven't had time to complete yet. The wait_for_updates() approach in the suggestion is on the right track, but there's a cleaner way.

Since you're in a sync context (_handle_mcp_request) but need to wait for async operations, you can use asyncio.run_until_complete() with the event loop. Here's a better approach:

Suggested change
if method == "tools/call":
name, args = params.get("name"), params.get("arguments") or {}
call_id = str(uuid.uuid4())
self.coordinator.call_skill(call_id, name, args)
snapshot = self.coordinator.generate_snapshot()
result = snapshot.get(call_id)
text = str(result.content()) if result and result.content() else "Skill started"
return {
"jsonrpc": "2.0",
"id": req_id,
"result": {"content": [{"type": "text", "text": text}]},
}
if method == "tools/call":
name, args = params.get("name"), params.get("arguments") or {}
call_id = str(uuid.uuid4())
self.coordinator.call_skill(call_id, name, args)
# Wait for skill to complete or timeout
try:
asyncio.run_coroutine_threadsafe(
self.coordinator.wait_for_updates(timeout=30), self._loop
).result(timeout=35)
except Exception as e:
logger.warning(f"MCP: Skill execution timeout or error: {e}")
snapshot = self.coordinator.generate_snapshot()
result = snapshot.get(call_id)
text = str(result.content()) if result and result.content() else "Skill completed"
return {
"jsonrpc": "2.0",
"id": req_id,
"result": {"content": [{"type": "text", "text": text}]},
}

This approach:

  1. Uses the existing event loop (self._loop) instead of trying to get the current one
  2. Adds a shorter timeout (30s) to be more responsive
  3. Uses result(timeout=35) as a backup timeout
  4. Handles both sync and async skills properly by waiting for state changes

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@greptile check now

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at your current implementation, I see you've got a good approach but there's still a potential issue. The problem is that wait_for_updates() waits for any skill state change, but not necessarily the specific skill you just called. Also, the 5-second timeout might be too short for some skills.

Here's a more robust solution that waits specifically for your skill to complete:

Suggested change
if method == "tools/call":
name, args = params.get("name"), params.get("arguments") or {}
call_id = str(uuid.uuid4())
self.coordinator.call_skill(call_id, name, args)
snapshot = self.coordinator.generate_snapshot()
result = snapshot.get(call_id)
text = str(result.content()) if result and result.content() else "Skill started"
return {
"jsonrpc": "2.0",
"id": req_id,
"result": {"content": [{"type": "text", "text": text}]},
}
if method == "tools/call":
name, args = params.get("name"), params.get("arguments") or {}
call_id = str(uuid.uuid4())
self.coordinator.call_skill(call_id, name, args)
# Grab reference immediately (survives dict deletion by agent loop)
result: SkillState | None = self.coordinator._skill_state.get(call_id)
logger.info(f"MCP: Called skill '{name}', got result ref: {result is not None}")
# Wait for this specific skill to complete
if result:
start_time = asyncio.get_event_loop().time()
timeout = 30.0 # Increased timeout
while (result.state not in [SkillStateEnum.completed, SkillStateEnum.error] and
(asyncio.get_event_loop().time() - start_time) < timeout):
try:
await asyncio.wait_for(self.coordinator.wait_for_updates(), timeout=1.0)
except asyncio.TimeoutError:
continue # Check state again
logger.info(
f"MCP: After wait - state: {result.state if result else None}, content: {result.content() if result else None}"
)
if result is None:
text = "Skill not found"
elif result.state == SkillStateEnum.completed:
text = str(result.content()) if result.content() else "Completed"
elif result.state == SkillStateEnum.error:
text = f"Error: {result.content()}"
else:
text = f"Started ({result.state.name})"
return {
"jsonrpc": "2.0",
"id": req_id,
"result": {"content": [{"type": "text", "text": text}]},
}

This approach:

  1. Waits specifically for your skill to reach a terminal state (completed/error)
  2. Uses a longer 30-second timeout
  3. Polls with 1-second intervals to be more responsive
  4. Only exits when the specific skill is done or timeout is reached

@spomichter
Copy link
Contributor Author

@codex review

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6784dcc30f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +259 to +261
result = subprocess.run(
[sys.executable, "-c", "import dimos.protocol.mcp.cli"],
capture_output=True,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Provide missing dimos.protocol.mcp.cli module

test_mcp_config_format spawns python -c "import dimos.protocol.mcp.cli", but the package has no cli module (only __init__.py, __main__.py, bridge.py, and server.py; repo search rg "protocol.mcp.cli" only finds these tests). This will always raise ModuleNotFoundError, so the new MCP config check fails and any Claude config pointing at that module path will break. Add the CLI module or adjust the import target.

Useful? React with 👍 / 👎.


# Wait for skill completion (up to 5s for immediate skills)
try:
await asyncio.wait_for(self.coordinator.wait_for_updates(), timeout=5.0)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: Fix: This is a hack and bad pracice, but currently we don't have a way to access specific skill responses once its sent from the Coordinator into the threadpool for execution

# See the License for the specific language governing permissions and
# limitations under the License.

"""End-to-end tests for MCP server with UnitreeGo2 robot skills.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All vibed need to review

Run with: pytest -m lcm dimos/protocol/mcp/test_server.py
"""

from __future__ import annotations
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Half vibed also need to review

agentic = autoconnect(
spatial,
llm_agent(),
llm_agent(mcp_port=9990),
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe can spin up mcp by default since its so lightweight

# limitations under the License.


"""MCP Bridge - Connects stdio (Claude Code) to TCP (DimOS Agent)."""
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove claude code reference - for any generic mcp clients


"""CLI entry point for Dimensional MCP Bridge.

Connects Claude Code (or other MCP clients) to a running DimOS agent.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

change

self.coordinator.call_skill(call_id, name, args)

# Grab reference immediately (survives dict deletion by agent loop)
result: SkillState | None = self.coordinator._skill_state.get(call_id)
Copy link
Contributor Author

@spomichter spomichter Jan 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Had to put this here because race condition with agent_loop where you clear the SkillState below

# coordinator will continue once a skill state has changed in
                # such a way that agent call needs to be executed
                if state == _get_state():
                    await self.coordinator.wait_for_updates()
                # we request a full snapshot of currently running, finished or errored out skills
                # we ask for removal of finished skills from subsequent snapshots (clear=True)
                
                update = self.coordinator.generate_snapshot(clear=True) # <-- HERE
                
                # generate tool_msgs and general state update message,
                # depending on a skill having associated tool call from previous interaction
                # we will return a tool message, and not a general state message
                snapshot_msgs = snapshot_to_messages(update, msg.tool_calls)
                self.state_messages = snapshot_msgs.get("state_msgs", [])  # type: ignore[attr-defined]
                self.append_history(
                    *snapshot_msgs.get("tool_msgs", []),  # type: ignore[attr-defined]
                    *snapshot_msgs.get("history_msgs", []),  # type: ignore[attr-defined]
                )
                ```

@leshy
Copy link
Contributor

leshy commented Jan 6, 2026

hmmm I don't like you modified an agent.py - why not just write a new mcp.py that runs it's own skillcoordinator and is fairly isolated? (Multiple skillcoordinators can run in parallel in dimos and they can talk to all the skills.)

This is a quick and dirty experiment, but since we won't build strutures on top, if it doesn't modify agent.py I'm totally ok with it, it's super useful in it's state already.

generally on MCP, a lot of it wasn't actually considered in this PR - MCP isn't just simple blocking toolcall protocol but has serious expresiveness with long running tools, parallel calls, intermediate updates from tools, image messages etc, I'd like to review all of this since roughly it has the same expresiveness of our skills, so with a more serious MCP we could get to a state in which we could even replace agent.py and langchain completely and integrate agents (even our internal ones) only through MCP.

That being said, if you don't modify agent.py, I don't care and I'm happy, just write your own mcp.py

One possible alternative, which might be suuuuuper clean if it works, is to write MCP as a replacement for a Model in the agent.py loop.

agent.py just calls 2 things:

                self._llm = self._llm.bind_tools(tools)  # type: ignore[assignment]

and

                msg = self._llm.invoke(messages)

could this self._llm be an actual MCP implementation? idk

leshy
leshy previously approved these changes Jan 6, 2026
Copy link
Contributor

@leshy leshy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good to go!

@spomichter spomichter merged commit 44f654c into dev Jan 7, 2026
13 checks passed
@spomichter spomichter deleted the dimos-mcp-server branch January 7, 2026 01:42
spomichter added a commit that referenced this pull request Jan 8, 2026
Release v0.0.6: Pre-Launch Unitree Go2 Release

## What's Changed
* Added is_flying_to_target agent skill and fly_to now return string for agent feeback by @spomichter in #635
* Release v0.0.5 by @spomichter in #697
* Rebase ivan g1 by @paul-nechifor in #709
* Navspec by @leshy in #648
* Remove depth module from base unitree go2 blueprints by @spomichter in #712
* Fix Unitree Go2 (replay and spatial memory) by @paul-nechifor in #714
* Add G1 blueprints, and simulation by @paul-nechifor in #724
* New g1 blueprint runfiles by @spomichter in #706
* Update G1/Go2 skills and remove some Robot interfaces by @paul-nechifor in #717
* Add dimos-robot end-to-end test with agents by @paul-nechifor in #716
* Run DimOS and ROS nav in Docker by @paul-nechifor in #700
* Anim experiment by @leshy in #701
* G1 navigation documentation fixes by @spomichter in #738
* Rename dimos-robot to dimos by @paul-nechifor in #740
* Use a process for MuJoCo by @paul-nechifor in #747
* Remove unneeded code files by @paul-nechifor in #718
* Make pygame G1JoystickModule usable for all modules by @paul-nechifor in #741
* error on conflicts by @paul-nechifor in #763
* Hosted Moondream 3 for VLM queries by @alexlin2 in #751
* transport: Remove DaskTransport dead code by @ym-han in #767
* Add editorconfig by @paul-nechifor in #769
* add `type: ignore` by @paul-nechifor in #768
* exclude .md changes from CICD builds by @spomichter in #770
* Working Ivan g1 detection in blueprints by @spomichter in #737
* small env fixes on a fresh install by @leshy in #778
* autofixes by @paul-nechifor in #744
* Support running local agents by @paul-nechifor in #739
* pin major version of langchain packages by @paul-nechifor in #789
* Deduplicate Unitree connections/entrypoints. by @paul-nechifor in #749
* Add TTS and STT by @paul-nechifor in #753
* fix mypy errors by @paul-nechifor in #791
* Use structlog and store JSON logs on disk by @paul-nechifor in #715
* Rpc fixes merge by @paul-nechifor in #801
* transport improvements by @leshy in #713
* Added concurrency check by @spomichter in #803
* make connections work with string annotations by @paul-nechifor in #807
* Run mypy checks in GitHub Actions by @paul-nechifor in #805
* Fix incorrect `= None` by @paul-nechifor in #802
* increase mujoco timeout by @paul-nechifor in #823
* MacOS Support: tests + devShell + mujoco by @jeff-hykin in #745
* nix flake revert by @leshy in #824
* fix mypy issues by @paul-nechifor in #827
* PRODUCTION Nav skills on drone with tracking by @spomichter in #640
* Fix added memory limit to blueprint global config by @spomichter in #856
* models/ refactor by @leshy in #819
* Point Detections by @leshy in #859
* Add generic ignore to gitignore by @jeff-hykin in #864
* fix set transport by @paul-nechifor in #866
* cli-precedence by @paul-nechifor in #857
* show `get_data` progress by @paul-nechifor in #873
* skip if OPENAI_API_KEY not defined by @paul-nechifor in #872
* build foxglove extension by @paul-nechifor in #871
* New planner by @paul-nechifor in #792
* Use `uv` by @paul-nechifor in #870
* Add direnv to gitignore by @Kaweees in #875
* Cuda mapper by @leshy in #862
* rename agents to agents_deprecated by @paul-nechifor in #877
* new planner new mapper by @paul-nechifor in #879
* odom ts parsing by @leshy in #882
* Sim fix by @paul-nechifor in #881
* navigation tuning by @leshy in #883
* Fix: Module init and agents by @leshy in #876
* Remove old setup.sh by @paul-nechifor in #888
* Release planner by @leshy in #887
* fix replay leak by @paul-nechifor in #890
* first pass on large file deletions by @leshy in #891
* Generalized manipulator driver by @mustafab0 in #831
* Restore MacOS Support (flake.nix) by @jeff-hykin in #863
* check-uv by @paul-nechifor in #902
* Make dimos pip-installable by @paul-nechifor in #731
* Revert "Restore MacOS Support (flake.nix)" by @leshy in #907
* jeff flake without py env stuff by @leshy in #911
* remove deprecated docker files by @paul-nechifor in #912
* command center stop and home by @leshy in #893
* use packages by @paul-nechifor in #915
* Fix agents prompt by @paul-nechifor in #914
* fix manifest by @paul-nechifor in #916
* fix move skill by @paul-nechifor in #913
* Ignore individual errors by @paul-nechifor in #919
* Feat/rerun latency panels by @Nabla7 in #917
* WIP Release detections by @leshy in #889
* Remove old navigation modules by @paul-nechifor in #923
* Feat/rerun latency panels by @Nabla7 in #925
* Repair camera module by @leshy in #929
* Repair Stream by @leshy in #932
* Docs Clean by @leshy in #933
* docs: sensor streams by @leshy in #934
* Docs: bugfixes by @leshy in #940
* Fixed doclinks to use git ls by @spomichter in #943
* Examples: third party language interop by @leshy in #946
* DOCS: temporal alignment docs improvements by @leshy in #944
* filter bots from commits by @leshy in #947
* Fix skills by @paul-nechifor in #950
* Limit Rerun viewer memory to 4GB default by @Nabla7 in #949
* Working dimensional MCP server - tested with Claude Code MCP client by @spomichter in #945
* allow registration of different agents by @paul-nechifor in #951
* Pre commit large files by @leshy in #953
* Proper Realsense and ZED Camera Drivers by @alexlin2 in #935
* Granular deps by @leshy in #894
* class VLMAgent(AgentSpec, Module) for streamed VLM queries over Transport by @spomichter in #960
* mac compatible commit filter by @paul-nechifor in #961

## New Contributors
* @ym-han made their first contribution in #767
* @jeff-hykin made their first contribution in #745
* @Kaweees made their first contribution in #875
* @mustafab0 made their first contribution in #831
* @Nabla7 made their first contribution in #917

**Full Changelog**: v0.0.5...v0.0.6
spomichter added a commit that referenced this pull request Jan 8, 2026
…945)

* Working dimensional MCP server - tested with Claude Code MCP client

* fix relative move float cast bug

* Return skill state to MCP server for observability - still some race conditions/bugs

* Fix race condition bug with SkillState

* Cleanup MCP client bridge

* Fix mypy

* RE implemented MCP as a Module that plugs into Agent / Coordinator via RPC

* Remove Agent RPC calls - MCP integrated with SkillCoordinator directly

* Fully working new MCP implementation

* Added end to end MPC test and async close to server for clean shutdown

* Mypy fixes to mcp

* fix mypy again

# DimOS MCP Server

Expose DimOS robot skills to Claude Code via Model Context Protocol.

## Setup

Add to Claude Code (one command):
```bash
claude mcp add --transport stdio dimos --scope project -- python -m dimos.protocol.mcp
```

## Usage

**Terminal 1** - Start DimOS:
```bash
dimos --replay run unitree-go2-agentic
```

**Claude Code** - Use robot skills:
```
> move forward 1 meter
> go to the kitchen
> tag this location as "desk"
```

## How It Works

1. `llm_agent(mcp_port=9990)` in the blueprint starts a TCP server
2. Claude Code spawns the bridge (`--bridge`) which connects to `localhost:9990`
3. Skills are exposed as MCP tools (e.g., `relative_move`, `navigate_with_text`)


Former-commit-id: 44f654c
spomichter added a commit that referenced this pull request Jan 8, 2026
Release v0.0.6: Pre-Launch Unitree Go2 Release

## What's Changed
* Added is_flying_to_target agent skill and fly_to now return string for agent feeback by @spomichter in #635
* Release v0.0.5 by @spomichter in #697
* Rebase ivan g1 by @paul-nechifor in #709
* Navspec by @leshy in #648
* Remove depth module from base unitree go2 blueprints by @spomichter in #712
* Fix Unitree Go2 (replay and spatial memory) by @paul-nechifor in #714
* Add G1 blueprints, and simulation by @paul-nechifor in #724
* New g1 blueprint runfiles by @spomichter in #706
* Update G1/Go2 skills and remove some Robot interfaces by @paul-nechifor in #717
* Add dimos-robot end-to-end test with agents by @paul-nechifor in #716
* Run DimOS and ROS nav in Docker by @paul-nechifor in #700
* Anim experiment by @leshy in #701
* G1 navigation documentation fixes by @spomichter in #738
* Rename dimos-robot to dimos by @paul-nechifor in #740
* Use a process for MuJoCo by @paul-nechifor in #747
* Remove unneeded code files by @paul-nechifor in #718
* Make pygame G1JoystickModule usable for all modules by @paul-nechifor in #741
* error on conflicts by @paul-nechifor in #763
* Hosted Moondream 3 for VLM queries by @alexlin2 in #751
* transport: Remove DaskTransport dead code by @ym-han in #767
* Add editorconfig by @paul-nechifor in #769
* add `type: ignore` by @paul-nechifor in #768
* exclude .md changes from CICD builds by @spomichter in #770
* Working Ivan g1 detection in blueprints by @spomichter in #737
* small env fixes on a fresh install by @leshy in #778
* autofixes by @paul-nechifor in #744
* Support running local agents by @paul-nechifor in #739
* pin major version of langchain packages by @paul-nechifor in #789
* Deduplicate Unitree connections/entrypoints. by @paul-nechifor in #749
* Add TTS and STT by @paul-nechifor in #753
* fix mypy errors by @paul-nechifor in #791
* Use structlog and store JSON logs on disk by @paul-nechifor in #715
* Rpc fixes merge by @paul-nechifor in #801
* transport improvements by @leshy in #713
* Added concurrency check by @spomichter in #803
* make connections work with string annotations by @paul-nechifor in #807
* Run mypy checks in GitHub Actions by @paul-nechifor in #805
* Fix incorrect `= None` by @paul-nechifor in #802
* increase mujoco timeout by @paul-nechifor in #823
* MacOS Support: tests + devShell + mujoco by @jeff-hykin in #745
* nix flake revert by @leshy in #824
* fix mypy issues by @paul-nechifor in #827
* PRODUCTION Nav skills on drone with tracking by @spomichter in #640
* Fix added memory limit to blueprint global config by @spomichter in #856
* models/ refactor by @leshy in #819
* Point Detections by @leshy in #859
* Add generic ignore to gitignore by @jeff-hykin in #864
* fix set transport by @paul-nechifor in #866
* cli-precedence by @paul-nechifor in #857
* show `get_data` progress by @paul-nechifor in #873
* skip if OPENAI_API_KEY not defined by @paul-nechifor in #872
* build foxglove extension by @paul-nechifor in #871
* New planner by @paul-nechifor in #792
* Use `uv` by @paul-nechifor in #870
* Add direnv to gitignore by @Kaweees in #875
* Cuda mapper by @leshy in #862
* rename agents to agents_deprecated by @paul-nechifor in #877
* new planner new mapper by @paul-nechifor in #879
* odom ts parsing by @leshy in #882
* Sim fix by @paul-nechifor in #881
* navigation tuning by @leshy in #883
* Fix: Module init and agents by @leshy in #876
* Remove old setup.sh by @paul-nechifor in #888
* Release planner by @leshy in #887
* fix replay leak by @paul-nechifor in #890
* first pass on large file deletions by @leshy in #891
* Generalized manipulator driver by @mustafab0 in #831
* Restore MacOS Support (flake.nix) by @jeff-hykin in #863
* check-uv by @paul-nechifor in #902
* Make dimos pip-installable by @paul-nechifor in #731
* Revert "Restore MacOS Support (flake.nix)" by @leshy in #907
* jeff flake without py env stuff by @leshy in #911
* remove deprecated docker files by @paul-nechifor in #912
* command center stop and home by @leshy in #893
* use packages by @paul-nechifor in #915
* Fix agents prompt by @paul-nechifor in #914
* fix manifest by @paul-nechifor in #916
* fix move skill by @paul-nechifor in #913
* Ignore individual errors by @paul-nechifor in #919
* Feat/rerun latency panels by @Nabla7 in #917
* WIP Release detections by @leshy in #889
* Remove old navigation modules by @paul-nechifor in #923
* Feat/rerun latency panels by @Nabla7 in #925
* Repair camera module by @leshy in #929
* Repair Stream by @leshy in #932
* Docs Clean by @leshy in #933
* docs: sensor streams by @leshy in #934
* Docs: bugfixes by @leshy in #940
* Fixed doclinks to use git ls by @spomichter in #943
* Examples: third party language interop by @leshy in #946
* DOCS: temporal alignment docs improvements by @leshy in #944
* filter bots from commits by @leshy in #947
* Fix skills by @paul-nechifor in #950
* Limit Rerun viewer memory to 4GB default by @Nabla7 in #949
* Working dimensional MCP server - tested with Claude Code MCP client by @spomichter in #945
* allow registration of different agents by @paul-nechifor in #951
* Pre commit large files by @leshy in #953
* Proper Realsense and ZED Camera Drivers by @alexlin2 in #935
* Granular deps by @leshy in #894
* class VLMAgent(AgentSpec, Module) for streamed VLM queries over Transport by @spomichter in #960
* mac compatible commit filter by @paul-nechifor in #961

## New Contributors
* @ym-han made their first contribution in #767
* @jeff-hykin made their first contribution in #745
* @Kaweees made their first contribution in #875
* @mustafab0 made their first contribution in #831
* @Nabla7 made their first contribution in #917

**Full Changelog**: v0.0.5...v0.0.6

Former-commit-id: 26e61a70a9469f2e33e51f1296f082b470009c09 [formerly 7ffc878]
Former-commit-id: 725e628
spomichter added a commit that referenced this pull request Jan 8, 2026
Release v0.0.6: Pre-Launch Unitree Go2 Release

## What's Changed
* Added is_flying_to_target agent skill and fly_to now return string for agent feeback by @spomichter in #635
* Release v0.0.5 by @spomichter in #697
* Rebase ivan g1 by @paul-nechifor in #709
* Navspec by @leshy in #648
* Remove depth module from base unitree go2 blueprints by @spomichter in #712
* Fix Unitree Go2 (replay and spatial memory) by @paul-nechifor in #714
* Add G1 blueprints, and simulation by @paul-nechifor in #724
* New g1 blueprint runfiles by @spomichter in #706
* Update G1/Go2 skills and remove some Robot interfaces by @paul-nechifor in #717
* Add dimos-robot end-to-end test with agents by @paul-nechifor in #716
* Run DimOS and ROS nav in Docker by @paul-nechifor in #700
* Anim experiment by @leshy in #701
* G1 navigation documentation fixes by @spomichter in #738
* Rename dimos-robot to dimos by @paul-nechifor in #740
* Use a process for MuJoCo by @paul-nechifor in #747
* Remove unneeded code files by @paul-nechifor in #718
* Make pygame G1JoystickModule usable for all modules by @paul-nechifor in #741
* error on conflicts by @paul-nechifor in #763
* Hosted Moondream 3 for VLM queries by @alexlin2 in #751
* transport: Remove DaskTransport dead code by @ym-han in #767
* Add editorconfig by @paul-nechifor in #769
* add `type: ignore` by @paul-nechifor in #768
* exclude .md changes from CICD builds by @spomichter in #770
* Working Ivan g1 detection in blueprints by @spomichter in #737
* small env fixes on a fresh install by @leshy in #778
* autofixes by @paul-nechifor in #744
* Support running local agents by @paul-nechifor in #739
* pin major version of langchain packages by @paul-nechifor in #789
* Deduplicate Unitree connections/entrypoints. by @paul-nechifor in #749
* Add TTS and STT by @paul-nechifor in #753
* fix mypy errors by @paul-nechifor in #791
* Use structlog and store JSON logs on disk by @paul-nechifor in #715
* Rpc fixes merge by @paul-nechifor in #801
* transport improvements by @leshy in #713
* Added concurrency check by @spomichter in #803
* make connections work with string annotations by @paul-nechifor in #807
* Run mypy checks in GitHub Actions by @paul-nechifor in #805
* Fix incorrect `= None` by @paul-nechifor in #802
* increase mujoco timeout by @paul-nechifor in #823
* MacOS Support: tests + devShell + mujoco by @jeff-hykin in #745
* nix flake revert by @leshy in #824
* fix mypy issues by @paul-nechifor in #827
* PRODUCTION Nav skills on drone with tracking by @spomichter in #640
* Fix added memory limit to blueprint global config by @spomichter in #856
* models/ refactor by @leshy in #819
* Point Detections by @leshy in #859
* Add generic ignore to gitignore by @jeff-hykin in #864
* fix set transport by @paul-nechifor in #866
* cli-precedence by @paul-nechifor in #857
* show `get_data` progress by @paul-nechifor in #873
* skip if OPENAI_API_KEY not defined by @paul-nechifor in #872
* build foxglove extension by @paul-nechifor in #871
* New planner by @paul-nechifor in #792
* Use `uv` by @paul-nechifor in #870
* Add direnv to gitignore by @Kaweees in #875
* Cuda mapper by @leshy in #862
* rename agents to agents_deprecated by @paul-nechifor in #877
* new planner new mapper by @paul-nechifor in #879
* odom ts parsing by @leshy in #882
* Sim fix by @paul-nechifor in #881
* navigation tuning by @leshy in #883
* Fix: Module init and agents by @leshy in #876
* Remove old setup.sh by @paul-nechifor in #888
* Release planner by @leshy in #887
* fix replay leak by @paul-nechifor in #890
* first pass on large file deletions by @leshy in #891
* Generalized manipulator driver by @mustafab0 in #831
* Restore MacOS Support (flake.nix) by @jeff-hykin in #863
* check-uv by @paul-nechifor in #902
* Make dimos pip-installable by @paul-nechifor in #731
* Revert "Restore MacOS Support (flake.nix)" by @leshy in #907
* jeff flake without py env stuff by @leshy in #911
* remove deprecated docker files by @paul-nechifor in #912
* command center stop and home by @leshy in #893
* use packages by @paul-nechifor in #915
* Fix agents prompt by @paul-nechifor in #914
* fix manifest by @paul-nechifor in #916
* fix move skill by @paul-nechifor in #913
* Ignore individual errors by @paul-nechifor in #919
* Feat/rerun latency panels by @Nabla7 in #917
* WIP Release detections by @leshy in #889
* Remove old navigation modules by @paul-nechifor in #923
* Feat/rerun latency panels by @Nabla7 in #925
* Repair camera module by @leshy in #929
* Repair Stream by @leshy in #932
* Docs Clean by @leshy in #933
* docs: sensor streams by @leshy in #934
* Docs: bugfixes by @leshy in #940
* Fixed doclinks to use git ls by @spomichter in #943
* Examples: third party language interop by @leshy in #946
* DOCS: temporal alignment docs improvements by @leshy in #944
* filter bots from commits by @leshy in #947
* Fix skills by @paul-nechifor in #950
* Limit Rerun viewer memory to 4GB default by @Nabla7 in #949
* Working dimensional MCP server - tested with Claude Code MCP client by @spomichter in #945
* allow registration of different agents by @paul-nechifor in #951
* Pre commit large files by @leshy in #953
* Proper Realsense and ZED Camera Drivers by @alexlin2 in #935
* Granular deps by @leshy in #894
* class VLMAgent(AgentSpec, Module) for streamed VLM queries over Transport by @spomichter in #960
* mac compatible commit filter by @paul-nechifor in #961

## New Contributors
* @ym-han made their first contribution in #767
* @jeff-hykin made their first contribution in #745
* @Kaweees made their first contribution in #875
* @mustafab0 made their first contribution in #831
* @Nabla7 made their first contribution in #917

**Full Changelog**: v0.0.5...v0.0.6

Former-commit-id: 7ffc878
spomichter added a commit that referenced this pull request Jan 8, 2026
Release v0.0.6: Pre-Launch Unitree Go2 Release

## What's Changed
* Added is_flying_to_target agent skill and fly_to now return string for agent feeback by @spomichter in #635
* Release v0.0.5 by @spomichter in #697
* Rebase ivan g1 by @paul-nechifor in #709
* Navspec by @leshy in #648
* Remove depth module from base unitree go2 blueprints by @spomichter in #712
* Fix Unitree Go2 (replay and spatial memory) by @paul-nechifor in #714
* Add G1 blueprints, and simulation by @paul-nechifor in #724
* New g1 blueprint runfiles by @spomichter in #706
* Update G1/Go2 skills and remove some Robot interfaces by @paul-nechifor in #717
* Add dimos-robot end-to-end test with agents by @paul-nechifor in #716
* Run DimOS and ROS nav in Docker by @paul-nechifor in #700
* Anim experiment by @leshy in #701
* G1 navigation documentation fixes by @spomichter in #738
* Rename dimos-robot to dimos by @paul-nechifor in #740
* Use a process for MuJoCo by @paul-nechifor in #747
* Remove unneeded code files by @paul-nechifor in #718
* Make pygame G1JoystickModule usable for all modules by @paul-nechifor in #741
* error on conflicts by @paul-nechifor in #763
* Hosted Moondream 3 for VLM queries by @alexlin2 in #751
* transport: Remove DaskTransport dead code by @ym-han in #767
* Add editorconfig by @paul-nechifor in #769
* add `type: ignore` by @paul-nechifor in #768
* exclude .md changes from CICD builds by @spomichter in #770
* Working Ivan g1 detection in blueprints by @spomichter in #737
* small env fixes on a fresh install by @leshy in #778
* autofixes by @paul-nechifor in #744
* Support running local agents by @paul-nechifor in #739
* pin major version of langchain packages by @paul-nechifor in #789
* Deduplicate Unitree connections/entrypoints. by @paul-nechifor in #749
* Add TTS and STT by @paul-nechifor in #753
* fix mypy errors by @paul-nechifor in #791
* Use structlog and store JSON logs on disk by @paul-nechifor in #715
* Rpc fixes merge by @paul-nechifor in #801
* transport improvements by @leshy in #713
* Added concurrency check by @spomichter in #803
* make connections work with string annotations by @paul-nechifor in #807
* Run mypy checks in GitHub Actions by @paul-nechifor in #805
* Fix incorrect `= None` by @paul-nechifor in #802
* increase mujoco timeout by @paul-nechifor in #823
* MacOS Support: tests + devShell + mujoco by @jeff-hykin in #745
* nix flake revert by @leshy in #824
* fix mypy issues by @paul-nechifor in #827
* PRODUCTION Nav skills on drone with tracking by @spomichter in #640
* Fix added memory limit to blueprint global config by @spomichter in #856
* models/ refactor by @leshy in #819
* Point Detections by @leshy in #859
* Add generic ignore to gitignore by @jeff-hykin in #864
* fix set transport by @paul-nechifor in #866
* cli-precedence by @paul-nechifor in #857
* show `get_data` progress by @paul-nechifor in #873
* skip if OPENAI_API_KEY not defined by @paul-nechifor in #872
* build foxglove extension by @paul-nechifor in #871
* New planner by @paul-nechifor in #792
* Use `uv` by @paul-nechifor in #870
* Add direnv to gitignore by @Kaweees in #875
* Cuda mapper by @leshy in #862
* rename agents to agents_deprecated by @paul-nechifor in #877
* new planner new mapper by @paul-nechifor in #879
* odom ts parsing by @leshy in #882
* Sim fix by @paul-nechifor in #881
* navigation tuning by @leshy in #883
* Fix: Module init and agents by @leshy in #876
* Remove old setup.sh by @paul-nechifor in #888
* Release planner by @leshy in #887
* fix replay leak by @paul-nechifor in #890
* first pass on large file deletions by @leshy in #891
* Generalized manipulator driver by @mustafab0 in #831
* Restore MacOS Support (flake.nix) by @jeff-hykin in #863
* check-uv by @paul-nechifor in #902
* Make dimos pip-installable by @paul-nechifor in #731
* Revert "Restore MacOS Support (flake.nix)" by @leshy in #907
* jeff flake without py env stuff by @leshy in #911
* remove deprecated docker files by @paul-nechifor in #912
* command center stop and home by @leshy in #893
* use packages by @paul-nechifor in #915
* Fix agents prompt by @paul-nechifor in #914
* fix manifest by @paul-nechifor in #916
* fix move skill by @paul-nechifor in #913
* Ignore individual errors by @paul-nechifor in #919
* Feat/rerun latency panels by @Nabla7 in #917
* WIP Release detections by @leshy in #889
* Remove old navigation modules by @paul-nechifor in #923
* Feat/rerun latency panels by @Nabla7 in #925
* Repair camera module by @leshy in #929
* Repair Stream by @leshy in #932
* Docs Clean by @leshy in #933
* docs: sensor streams by @leshy in #934
* Docs: bugfixes by @leshy in #940
* Fixed doclinks to use git ls by @spomichter in #943
* Examples: third party language interop by @leshy in #946
* DOCS: temporal alignment docs improvements by @leshy in #944
* filter bots from commits by @leshy in #947
* Fix skills by @paul-nechifor in #950
* Limit Rerun viewer memory to 4GB default by @Nabla7 in #949
* Working dimensional MCP server - tested with Claude Code MCP client by @spomichter in #945
* allow registration of different agents by @paul-nechifor in #951
* Pre commit large files by @leshy in #953
* Proper Realsense and ZED Camera Drivers by @alexlin2 in #935
* Granular deps by @leshy in #894
* class VLMAgent(AgentSpec, Module) for streamed VLM queries over Transport by @spomichter in #960
* mac compatible commit filter by @paul-nechifor in #961

## New Contributors
* @ym-han made their first contribution in #767
* @jeff-hykin made their first contribution in #745
* @Kaweees made their first contribution in #875
* @mustafab0 made their first contribution in #831
* @Nabla7 made their first contribution in #917

**Full Changelog**: v0.0.5...v0.0.6

Former-commit-id: 7ffc878
Former-commit-id: 067332a
spomichter added a commit that referenced this pull request Jan 8, 2026
Release v0.0.6: Pre-Launch Unitree Go2 Release

## What's Changed
* Added is_flying_to_target agent skill and fly_to now return string for agent feeback by @spomichter in #635
* Release v0.0.5 by @spomichter in #697
* Rebase ivan g1 by @paul-nechifor in #709
* Navspec by @leshy in #648
* Remove depth module from base unitree go2 blueprints by @spomichter in #712
* Fix Unitree Go2 (replay and spatial memory) by @paul-nechifor in #714
* Add G1 blueprints, and simulation by @paul-nechifor in #724
* New g1 blueprint runfiles by @spomichter in #706
* Update G1/Go2 skills and remove some Robot interfaces by @paul-nechifor in #717
* Add dimos-robot end-to-end test with agents by @paul-nechifor in #716
* Run DimOS and ROS nav in Docker by @paul-nechifor in #700
* Anim experiment by @leshy in #701
* G1 navigation documentation fixes by @spomichter in #738
* Rename dimos-robot to dimos by @paul-nechifor in #740
* Use a process for MuJoCo by @paul-nechifor in #747
* Remove unneeded code files by @paul-nechifor in #718
* Make pygame G1JoystickModule usable for all modules by @paul-nechifor in #741
* error on conflicts by @paul-nechifor in #763
* Hosted Moondream 3 for VLM queries by @alexlin2 in #751
* transport: Remove DaskTransport dead code by @ym-han in #767
* Add editorconfig by @paul-nechifor in #769
* add `type: ignore` by @paul-nechifor in #768
* exclude .md changes from CICD builds by @spomichter in #770
* Working Ivan g1 detection in blueprints by @spomichter in #737
* small env fixes on a fresh install by @leshy in #778
* autofixes by @paul-nechifor in #744
* Support running local agents by @paul-nechifor in #739
* pin major version of langchain packages by @paul-nechifor in #789
* Deduplicate Unitree connections/entrypoints. by @paul-nechifor in #749
* Add TTS and STT by @paul-nechifor in #753
* fix mypy errors by @paul-nechifor in #791
* Use structlog and store JSON logs on disk by @paul-nechifor in #715
* Rpc fixes merge by @paul-nechifor in #801
* transport improvements by @leshy in #713
* Added concurrency check by @spomichter in #803
* make connections work with string annotations by @paul-nechifor in #807
* Run mypy checks in GitHub Actions by @paul-nechifor in #805
* Fix incorrect `= None` by @paul-nechifor in #802
* increase mujoco timeout by @paul-nechifor in #823
* MacOS Support: tests + devShell + mujoco by @jeff-hykin in #745
* nix flake revert by @leshy in #824
* fix mypy issues by @paul-nechifor in #827
* PRODUCTION Nav skills on drone with tracking by @spomichter in #640
* Fix added memory limit to blueprint global config by @spomichter in #856
* models/ refactor by @leshy in #819
* Point Detections by @leshy in #859
* Add generic ignore to gitignore by @jeff-hykin in #864
* fix set transport by @paul-nechifor in #866
* cli-precedence by @paul-nechifor in #857
* show `get_data` progress by @paul-nechifor in #873
* skip if OPENAI_API_KEY not defined by @paul-nechifor in #872
* build foxglove extension by @paul-nechifor in #871
* New planner by @paul-nechifor in #792
* Use `uv` by @paul-nechifor in #870
* Add direnv to gitignore by @Kaweees in #875
* Cuda mapper by @leshy in #862
* rename agents to agents_deprecated by @paul-nechifor in #877
* new planner new mapper by @paul-nechifor in #879
* odom ts parsing by @leshy in #882
* Sim fix by @paul-nechifor in #881
* navigation tuning by @leshy in #883
* Fix: Module init and agents by @leshy in #876
* Remove old setup.sh by @paul-nechifor in #888
* Release planner by @leshy in #887
* fix replay leak by @paul-nechifor in #890
* first pass on large file deletions by @leshy in #891
* Generalized manipulator driver by @mustafab0 in #831
* Restore MacOS Support (flake.nix) by @jeff-hykin in #863
* check-uv by @paul-nechifor in #902
* Make dimos pip-installable by @paul-nechifor in #731
* Revert "Restore MacOS Support (flake.nix)" by @leshy in #907
* jeff flake without py env stuff by @leshy in #911
* remove deprecated docker files by @paul-nechifor in #912
* command center stop and home by @leshy in #893
* use packages by @paul-nechifor in #915
* Fix agents prompt by @paul-nechifor in #914
* fix manifest by @paul-nechifor in #916
* fix move skill by @paul-nechifor in #913
* Ignore individual errors by @paul-nechifor in #919
* Feat/rerun latency panels by @Nabla7 in #917
* WIP Release detections by @leshy in #889
* Remove old navigation modules by @paul-nechifor in #923
* Feat/rerun latency panels by @Nabla7 in #925
* Repair camera module by @leshy in #929
* Repair Stream by @leshy in #932
* Docs Clean by @leshy in #933
* docs: sensor streams by @leshy in #934
* Docs: bugfixes by @leshy in #940
* Fixed doclinks to use git ls by @spomichter in #943
* Examples: third party language interop by @leshy in #946
* DOCS: temporal alignment docs improvements by @leshy in #944
* filter bots from commits by @leshy in #947
* Fix skills by @paul-nechifor in #950
* Limit Rerun viewer memory to 4GB default by @Nabla7 in #949
* Working dimensional MCP server - tested with Claude Code MCP client by @spomichter in #945
* allow registration of different agents by @paul-nechifor in #951
* Pre commit large files by @leshy in #953
* Proper Realsense and ZED Camera Drivers by @alexlin2 in #935
* Granular deps by @leshy in #894
* class VLMAgent(AgentSpec, Module) for streamed VLM queries over Transport by @spomichter in #960
* mac compatible commit filter by @paul-nechifor in #961

## New Contributors
* @ym-han made their first contribution in #767
* @jeff-hykin made their first contribution in #745
* @Kaweees made their first contribution in #875
* @mustafab0 made their first contribution in #831
* @Nabla7 made their first contribution in #917

**Full Changelog**: v0.0.5...v0.0.6

Former-commit-id: 26e61a70a9469f2e33e51f1296f082b470009c09 [formerly 7ffc878]
Former-commit-id: 725e628
Former-commit-id: 2e5f1d4
spomichter added a commit that referenced this pull request Jan 8, 2026
Release v0.0.6: Pre-Launch Unitree Go2 Release

## What's Changed
* Added is_flying_to_target agent skill and fly_to now return string for agent feeback by @spomichter in #635
* Release v0.0.5 by @spomichter in #697
* Rebase ivan g1 by @paul-nechifor in #709
* Navspec by @leshy in #648
* Remove depth module from base unitree go2 blueprints by @spomichter in #712
* Fix Unitree Go2 (replay and spatial memory) by @paul-nechifor in #714
* Add G1 blueprints, and simulation by @paul-nechifor in #724
* New g1 blueprint runfiles by @spomichter in #706
* Update G1/Go2 skills and remove some Robot interfaces by @paul-nechifor in #717
* Add dimos-robot end-to-end test with agents by @paul-nechifor in #716
* Run DimOS and ROS nav in Docker by @paul-nechifor in #700
* Anim experiment by @leshy in #701
* G1 navigation documentation fixes by @spomichter in #738
* Rename dimos-robot to dimos by @paul-nechifor in #740
* Use a process for MuJoCo by @paul-nechifor in #747
* Remove unneeded code files by @paul-nechifor in #718
* Make pygame G1JoystickModule usable for all modules by @paul-nechifor in #741
* error on conflicts by @paul-nechifor in #763
* Hosted Moondream 3 for VLM queries by @alexlin2 in #751
* transport: Remove DaskTransport dead code by @ym-han in #767
* Add editorconfig by @paul-nechifor in #769
* add `type: ignore` by @paul-nechifor in #768
* exclude .md changes from CICD builds by @spomichter in #770
* Working Ivan g1 detection in blueprints by @spomichter in #737
* small env fixes on a fresh install by @leshy in #778
* autofixes by @paul-nechifor in #744
* Support running local agents by @paul-nechifor in #739
* pin major version of langchain packages by @paul-nechifor in #789
* Deduplicate Unitree connections/entrypoints. by @paul-nechifor in #749
* Add TTS and STT by @paul-nechifor in #753
* fix mypy errors by @paul-nechifor in #791
* Use structlog and store JSON logs on disk by @paul-nechifor in #715
* Rpc fixes merge by @paul-nechifor in #801
* transport improvements by @leshy in #713
* Added concurrency check by @spomichter in #803
* make connections work with string annotations by @paul-nechifor in #807
* Run mypy checks in GitHub Actions by @paul-nechifor in #805
* Fix incorrect `= None` by @paul-nechifor in #802
* increase mujoco timeout by @paul-nechifor in #823
* MacOS Support: tests + devShell + mujoco by @jeff-hykin in #745
* nix flake revert by @leshy in #824
* fix mypy issues by @paul-nechifor in #827
* PRODUCTION Nav skills on drone with tracking by @spomichter in #640
* Fix added memory limit to blueprint global config by @spomichter in #856
* models/ refactor by @leshy in #819
* Point Detections by @leshy in #859
* Add generic ignore to gitignore by @jeff-hykin in #864
* fix set transport by @paul-nechifor in #866
* cli-precedence by @paul-nechifor in #857
* show `get_data` progress by @paul-nechifor in #873
* skip if OPENAI_API_KEY not defined by @paul-nechifor in #872
* build foxglove extension by @paul-nechifor in #871
* New planner by @paul-nechifor in #792
* Use `uv` by @paul-nechifor in #870
* Add direnv to gitignore by @Kaweees in #875
* Cuda mapper by @leshy in #862
* rename agents to agents_deprecated by @paul-nechifor in #877
* new planner new mapper by @paul-nechifor in #879
* odom ts parsing by @leshy in #882
* Sim fix by @paul-nechifor in #881
* navigation tuning by @leshy in #883
* Fix: Module init and agents by @leshy in #876
* Remove old setup.sh by @paul-nechifor in #888
* Release planner by @leshy in #887
* fix replay leak by @paul-nechifor in #890
* first pass on large file deletions by @leshy in #891
* Generalized manipulator driver by @mustafab0 in #831
* Restore MacOS Support (flake.nix) by @jeff-hykin in #863
* check-uv by @paul-nechifor in #902
* Make dimos pip-installable by @paul-nechifor in #731
* Revert "Restore MacOS Support (flake.nix)" by @leshy in #907
* jeff flake without py env stuff by @leshy in #911
* remove deprecated docker files by @paul-nechifor in #912
* command center stop and home by @leshy in #893
* use packages by @paul-nechifor in #915
* Fix agents prompt by @paul-nechifor in #914
* fix manifest by @paul-nechifor in #916
* fix move skill by @paul-nechifor in #913
* Ignore individual errors by @paul-nechifor in #919
* Feat/rerun latency panels by @Nabla7 in #917
* WIP Release detections by @leshy in #889
* Remove old navigation modules by @paul-nechifor in #923
* Feat/rerun latency panels by @Nabla7 in #925
* Repair camera module by @leshy in #929
* Repair Stream by @leshy in #932
* Docs Clean by @leshy in #933
* docs: sensor streams by @leshy in #934
* Docs: bugfixes by @leshy in #940
* Fixed doclinks to use git ls by @spomichter in #943
* Examples: third party language interop by @leshy in #946
* DOCS: temporal alignment docs improvements by @leshy in #944
* filter bots from commits by @leshy in #947
* Fix skills by @paul-nechifor in #950
* Limit Rerun viewer memory to 4GB default by @Nabla7 in #949
* Working dimensional MCP server - tested with Claude Code MCP client by @spomichter in #945
* allow registration of different agents by @paul-nechifor in #951
* Pre commit large files by @leshy in #953
* Proper Realsense and ZED Camera Drivers by @alexlin2 in #935
* Granular deps by @leshy in #894
* class VLMAgent(AgentSpec, Module) for streamed VLM queries over Transport by @spomichter in #960
* mac compatible commit filter by @paul-nechifor in #961

## New Contributors
* @ym-han made their first contribution in #767
* @jeff-hykin made their first contribution in #745
* @Kaweees made their first contribution in #875
* @mustafab0 made their first contribution in #831
* @Nabla7 made their first contribution in #917

**Full Changelog**: v0.0.5...v0.0.6

Former-commit-id: 7ffc878
Former-commit-id: 067332a
spomichter added a commit that referenced this pull request Jan 8, 2026
Release v0.0.6: Pre-Launch Unitree Go2 Release

## What's Changed
* Added is_flying_to_target agent skill and fly_to now return string for agent feeback by @spomichter in #635
* Release v0.0.5 by @spomichter in #697
* Rebase ivan g1 by @paul-nechifor in #709
* Navspec by @leshy in #648
* Remove depth module from base unitree go2 blueprints by @spomichter in #712
* Fix Unitree Go2 (replay and spatial memory) by @paul-nechifor in #714
* Add G1 blueprints, and simulation by @paul-nechifor in #724
* New g1 blueprint runfiles by @spomichter in #706
* Update G1/Go2 skills and remove some Robot interfaces by @paul-nechifor in #717
* Add dimos-robot end-to-end test with agents by @paul-nechifor in #716
* Run DimOS and ROS nav in Docker by @paul-nechifor in #700
* Anim experiment by @leshy in #701
* G1 navigation documentation fixes by @spomichter in #738
* Rename dimos-robot to dimos by @paul-nechifor in #740
* Use a process for MuJoCo by @paul-nechifor in #747
* Remove unneeded code files by @paul-nechifor in #718
* Make pygame G1JoystickModule usable for all modules by @paul-nechifor in #741
* error on conflicts by @paul-nechifor in #763
* Hosted Moondream 3 for VLM queries by @alexlin2 in #751
* transport: Remove DaskTransport dead code by @ym-han in #767
* Add editorconfig by @paul-nechifor in #769
* add `type: ignore` by @paul-nechifor in #768
* exclude .md changes from CICD builds by @spomichter in #770
* Working Ivan g1 detection in blueprints by @spomichter in #737
* small env fixes on a fresh install by @leshy in #778
* autofixes by @paul-nechifor in #744
* Support running local agents by @paul-nechifor in #739
* pin major version of langchain packages by @paul-nechifor in #789
* Deduplicate Unitree connections/entrypoints. by @paul-nechifor in #749
* Add TTS and STT by @paul-nechifor in #753
* fix mypy errors by @paul-nechifor in #791
* Use structlog and store JSON logs on disk by @paul-nechifor in #715
* Rpc fixes merge by @paul-nechifor in #801
* transport improvements by @leshy in #713
* Added concurrency check by @spomichter in #803
* make connections work with string annotations by @paul-nechifor in #807
* Run mypy checks in GitHub Actions by @paul-nechifor in #805
* Fix incorrect `= None` by @paul-nechifor in #802
* increase mujoco timeout by @paul-nechifor in #823
* MacOS Support: tests + devShell + mujoco by @jeff-hykin in #745
* nix flake revert by @leshy in #824
* fix mypy issues by @paul-nechifor in #827
* PRODUCTION Nav skills on drone with tracking by @spomichter in #640
* Fix added memory limit to blueprint global config by @spomichter in #856
* models/ refactor by @leshy in #819
* Point Detections by @leshy in #859
* Add generic ignore to gitignore by @jeff-hykin in #864
* fix set transport by @paul-nechifor in #866
* cli-precedence by @paul-nechifor in #857
* show `get_data` progress by @paul-nechifor in #873
* skip if OPENAI_API_KEY not defined by @paul-nechifor in #872
* build foxglove extension by @paul-nechifor in #871
* New planner by @paul-nechifor in #792
* Use `uv` by @paul-nechifor in #870
* Add direnv to gitignore by @Kaweees in #875
* Cuda mapper by @leshy in #862
* rename agents to agents_deprecated by @paul-nechifor in #877
* new planner new mapper by @paul-nechifor in #879
* odom ts parsing by @leshy in #882
* Sim fix by @paul-nechifor in #881
* navigation tuning by @leshy in #883
* Fix: Module init and agents by @leshy in #876
* Remove old setup.sh by @paul-nechifor in #888
* Release planner by @leshy in #887
* fix replay leak by @paul-nechifor in #890
* first pass on large file deletions by @leshy in #891
* Generalized manipulator driver by @mustafab0 in #831
* Restore MacOS Support (flake.nix) by @jeff-hykin in #863
* check-uv by @paul-nechifor in #902
* Make dimos pip-installable by @paul-nechifor in #731
* Revert "Restore MacOS Support (flake.nix)" by @leshy in #907
* jeff flake without py env stuff by @leshy in #911
* remove deprecated docker files by @paul-nechifor in #912
* command center stop and home by @leshy in #893
* use packages by @paul-nechifor in #915
* Fix agents prompt by @paul-nechifor in #914
* fix manifest by @paul-nechifor in #916
* fix move skill by @paul-nechifor in #913
* Ignore individual errors by @paul-nechifor in #919
* Feat/rerun latency panels by @Nabla7 in #917
* WIP Release detections by @leshy in #889
* Remove old navigation modules by @paul-nechifor in #923
* Feat/rerun latency panels by @Nabla7 in #925
* Repair camera module by @leshy in #929
* Repair Stream by @leshy in #932
* Docs Clean by @leshy in #933
* docs: sensor streams by @leshy in #934
* Docs: bugfixes by @leshy in #940
* Fixed doclinks to use git ls by @spomichter in #943
* Examples: third party language interop by @leshy in #946
* DOCS: temporal alignment docs improvements by @leshy in #944
* filter bots from commits by @leshy in #947
* Fix skills by @paul-nechifor in #950
* Limit Rerun viewer memory to 4GB default by @Nabla7 in #949
* Working dimensional MCP server - tested with Claude Code MCP client by @spomichter in #945
* allow registration of different agents by @paul-nechifor in #951
* Pre commit large files by @leshy in #953
* Proper Realsense and ZED Camera Drivers by @alexlin2 in #935
* Granular deps by @leshy in #894
* class VLMAgent(AgentSpec, Module) for streamed VLM queries over Transport by @spomichter in #960
* mac compatible commit filter by @paul-nechifor in #961

## New Contributors
* @ym-han made their first contribution in #767
* @jeff-hykin made their first contribution in #745
* @Kaweees made their first contribution in #875
* @mustafab0 made their first contribution in #831
* @Nabla7 made their first contribution in #917

**Full Changelog**: v0.0.5...v0.0.6

Former-commit-id: 26e61a70a9469f2e33e51f1296f082b470009c09 [formerly 7ffc878]
Former-commit-id: 725e628
Former-commit-id: 2e5f1d4
paul-nechifor pushed a commit that referenced this pull request Jan 8, 2026
…945)

* Working dimensional MCP server - tested with Claude Code MCP client

* fix relative move float cast bug

* Return skill state to MCP server for observability - still some race conditions/bugs

* Fix race condition bug with SkillState

* Cleanup MCP client bridge

* Fix mypy

* RE implemented MCP as a Module that plugs into Agent / Coordinator via RPC

* Remove Agent RPC calls - MCP integrated with SkillCoordinator directly

* Fully working new MCP implementation

* Added end to end MPC test and async close to server for clean shutdown

* Mypy fixes to mcp

* fix mypy again

# DimOS MCP Server

Expose DimOS robot skills to Claude Code via Model Context Protocol.

## Setup

Add to Claude Code (one command):
```bash
claude mcp add --transport stdio dimos --scope project -- python -m dimos.protocol.mcp
```

## Usage

**Terminal 1** - Start DimOS:
```bash
dimos --replay run unitree-go2-agentic
```

**Claude Code** - Use robot skills:
```
> move forward 1 meter
> go to the kitchen
> tag this location as "desk"
```

## How It Works

1. `llm_agent(mcp_port=9990)` in the blueprint starts a TCP server
2. Claude Code spawns the bridge (`--bridge`) which connects to `localhost:9990`
3. Skills are exposed as MCP tools (e.g., `relative_move`, `navigate_with_text`)


Former-commit-id: b1acab8 [formerly 44f654c]
Former-commit-id: 7151de1
jeff-hykin pushed a commit that referenced this pull request Jan 9, 2026
…945)

* Working dimensional MCP server - tested with Claude Code MCP client

* fix relative move float cast bug

* Return skill state to MCP server for observability - still some race conditions/bugs

* Fix race condition bug with SkillState

* Cleanup MCP client bridge

* Fix mypy

* RE implemented MCP as a Module that plugs into Agent / Coordinator via RPC

* Remove Agent RPC calls - MCP integrated with SkillCoordinator directly

* Fully working new MCP implementation

* Added end to end MPC test and async close to server for clean shutdown

* Mypy fixes to mcp

* fix mypy again

# DimOS MCP Server

Expose DimOS robot skills to Claude Code via Model Context Protocol.

## Setup

Add to Claude Code (one command):
```bash
claude mcp add --transport stdio dimos --scope project -- python -m dimos.protocol.mcp
```

## Usage

**Terminal 1** - Start DimOS:
```bash
dimos --replay run unitree-go2-agentic
```

**Claude Code** - Use robot skills:
```
> move forward 1 meter
> go to the kitchen
> tag this location as "desk"
```

## How It Works

1. `llm_agent(mcp_port=9990)` in the blueprint starts a TCP server
2. Claude Code spawns the bridge (`--bridge`) which connects to `localhost:9990`
3. Skills are exposed as MCP tools (e.g., `relative_move`, `navigate_with_text`)


Former-commit-id: b1acab8 [formerly 44f654c]
Former-commit-id: 7151de1
@greptile-apps greptile-apps bot mentioned this pull request Jan 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants