Skip to content

Conversation

@ym-han
Copy link
Contributor

@ym-han ym-han commented Dec 5, 2025

Re-opening new PR b/c couldn't open old one. (leshy had also left some comments on the old PR: #787)

To get a quick sense for what docs have been done and what else is left, see #736 (comment) (please do read this comment first).

How to see the docs

First, make sure you've installed the docs deps:

uv pip install .[docs]

Local Development Server

To start a local server with hot reload:

mkdocs serve
# Then open <http://127.0.0.1:8000/> in your browser.

Build Static Site

To build the static documentation site:

mkdocs build

The output (which includes the various llm.txes) will be in the site/ directory.

See also the note in docs/development.md on marimo notebooks.

Notes on doc tech stack choices

  • xdoctest because it's better than the stock doctest facilities at floating-point comparisons, and uses a more robust AST-based approach. PyTorch uses this.
  • Marimo: like jupyter notebooks, except more git-friendly. Easy to export to markdown or python; easy to migrate away from it if you don't like it.

Misc resources

Doc site packages

Ivan was asking, so: for reference, the non-Mintlify docs sites solutions I'm aware of include:

Unfortunately, I don't know which of these would be most suitable for you. But the Zensical stuff does suggest that mkdocs isn't a good long-term solution (I went with mkdocs initially just because it's a common choice; hadn't known then that it didn't seem well-maintaned).

@chatgpt-codex-connector
Copy link

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@greptile-apps
Copy link

greptile-apps bot commented Dec 5, 2025

Greptile Overview

Greptile Summary

This PR implements a comprehensive documentation overhaul for the DimensionalOS robotics framework, establishing a complete MkDocs-based documentation system with tutorials, API references, and conceptual guides. The changes add extensive docstrings throughout the codebase using annotated_doc.Doc for structured documentation, create interactive Marimo notebook tutorials covering skills and multi-agent systems, and establish proper documentation infrastructure with build hooks and dependency management. The documentation covers all major framework components including agents (LLM-powered reasoning systems), skills (robot capabilities exposed to agents), modules (distributed actors), blueprints (declarative orchestration), and transport abstractions. Key additions include a quickstart guide, three comprehensive tutorials (skill basics, agent integration, multi-agent coordination), API documentation for core components, and conceptual explanations of the framework architecture.

Important Files Changed

Filename Score Overview
docs/index.md 4/5 Main documentation landing page with navigation grid and placeholder content
mkdocs.yml 5/5 Complete MkDocs configuration with Material theme and documentation plugins
docs/quickstart.md 5/5 Comprehensive quickstart tutorial showing basic DimOS patterns
docs/tutorials/skill_basics/tutorial.py 4/5 Interactive Marimo tutorial for building first DimOS skills
docs/tutorials/skill_with_agent/tutorial.py 4/5 Tutorial demonstrating LLM agent integration with skills
docs/tutorials/multi_agent/tutorial.py 3/5 Complex multi-agent tutorial with potential import and dependency issues
docs/api/agents.md 5/5 API reference documentation for agents2 module
docs/api/skills.md 5/5 Complete API documentation for the skills system
docs/concepts/agent.md 5/5 Conceptual guide explaining LLM-powered agents in DimOS
docs/concepts/skills.md 5/5 Comprehensive explanation of skills concept and usage patterns
docs/concepts/modules.md 5/5 Documentation for distributed module system architecture
docs/concepts/blueprints.md 5/5 Guide to declarative module orchestration system
docs/concepts/transport.md 5/5 Transport abstraction documentation with deployment scenarios
dimos/protocol/skill/skill.py 2/5 Comprehensive documentation added but contains syntax error on line 326
dimos/core/blueprints.py 5/5 Extensive docstring additions with examples and type annotations
dimos/core/module_coordinator.py 4/5 Comprehensive documentation added but has shared mutable class attribute issue
dimos/core/transport.py 4/5 Documentation overhaul with minor TypeVar duplication issue
dimos/agents2/spec.py 5/5 Complete documentation transformation with type annotations
dimos/agents2/agent.py 4/5 Major documentation enhancement with architectural explanations
pyproject.toml 5/5 Added comprehensive documentation tooling and dependencies
docker/dev/Dockerfile 5/5 Added documentation dependencies to development container
docs/hooks.py 4/5 Custom MkDocs hooks for Marimo notebook integration with process management

Confidence score: 3/5

  • This PR contains significant documentation improvements but has several technical issues that need attention before merging
  • Score lowered due to syntax error in skill.py (line 326), potential import issues in tutorial files, shared mutable class attribute in module_coordinator.py, and some incomplete documentation placeholders
  • Pay close attention to dimos/protocol/skill/skill.py for the syntax error, tutorial files for import dependencies, and dimos/core/module_coordinator.py for the shared state issue

Copy link

@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.

Additional Comments (3)

  1. dimos/core/module_coordinator.py, line 58 (link)

    logic: Class-level mutable default creates shared state across instances. Should use self._deployed_modules = {} in __init__

  2. dimos/core/transport.py, line 80 (link)

    logic: Duplicate TypeVar declaration shadows the earlier one on line 65

  3. dimos/protocol/skill/coordinator.py, line 826-828 (link)

    style: Debug print statements left in production code - consider removing before release

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

47 files reviewed, 10 comments

Edit Code Review Agent Settings | Greptile

@ym-han ym-han force-pushed the all-ym-changes branch 3 times, most recently from f89578a to e45ab00 Compare December 10, 2025 03:07
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.

quick comments


1. **Becomes an agent-callable tool** - The decorator generates an OpenAI-compatible function schema from the method signature and docstring
2. **Executes in background threads** - Skills run concurrently without blocking the agent
3. **Reports state via messages** - Each execution tracks state (pending → running → completed/error)
Copy link
Contributor

Choose a reason for hiding this comment

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

this is an internal detail of messaging protocol related to skills, there are many details to this protocol, and users need not understand it so I'm not sure why are we explaining this here?

this is also an incomplete explanation, actual states are

    pending = 0
    start = 1
    stream = 2
    reduced_stream = 3
    ret = 4
    error = 5

Copy link
Contributor Author

@ym-han ym-han Dec 24, 2025

Choose a reason for hiding this comment

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

Good catch, this needs to be refactored, yeah.

I think this was meant to be SkillStateEnum, which, as of the time of this PR, only had

    pending = 0
    running = 1
    completed = 2
    error = 3

(I.e., this isn't factually wrong if it's meant to be SkillStateEnum.)

I don't remember this part very well now, but I think I was tempted to leave that there because it might be helpful for understanding skillspy's output. But you are right in that it either needs more explanation or should just be removed. Maybe the thing to do is to only bring up SkillStateEnum when actually explaining Skillspy -- will remove that third point, unless you disagree.

At a high level, skills are wrappers over lower-level robot capabilities. But at a more prosaic level, a skill is just a method on a Module decorated with `@skill` that:

1. **Becomes an agent-callable tool** - The decorator generates an OpenAI-compatible function schema from the method signature and docstring
2. **Executes in background threads** - Skills run concurrently without blocking the agent
Copy link
Contributor

Choose a reason for hiding this comment

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

it executes on a hosting module which is a separate process, I'm not sure thread is meant abstractly here, but this is an important detail to be clear about

Copy link
Contributor Author

@ym-han ym-han Dec 24, 2025

Choose a reason for hiding this comment

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

Yes, this is misleading in a bad way. Am changing this to "Executes asynchronously - Skills run without blocking the agent"


At a high level, skills are wrappers over lower-level robot capabilities. But at a more prosaic level, a skill is just a method on a Module decorated with `@skill` that:

1. **Becomes an agent-callable tool** - The decorator generates an OpenAI-compatible function schema from the method signature and docstring
Copy link
Contributor

Choose a reason for hiding this comment

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

tool call definition encoding can be dependant on the model we are integrating, I'm not sure if this is openai every time? langchain controls this layer, I honestly don't know, and I'm not sure why we are explaining this to a user at this point

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Changing this to "Becomes an agent-callable tool - The decorator generates a tool schema from the method signature and docstring"

# The following dunder methods are for Dask serialization:
# Module instances are serialized when deployed to worker processes.
# We return {} in __getstate__ since this class has no custom state to preserve.
def __getstate__(self):
Copy link
Contributor

Choose a reason for hiding this comment

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

what is this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I can't remb well now, but I'm guessing I added this to explain how to write a skill 'from scratch', without the helper SkillModule. (The SkillModule had this, and the blueprint readme also had it.) But it might be more confusing than helpful


<!-- Citation: module.py:113-126 - _close_module() shows independent resource management (loop, rpc, tf, disposables) -->

**Distributed execution** - Modules run as Dask actors across a cluster. Deploy computationally intensive perception on GPU workers while running navigation on CPU workers. The system handles network communication, serialization, and RPC automatically.
Copy link
Contributor

Choose a reason for hiding this comment

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

GPU workers vs CPU workers? there is no such thing in dimos

Copy link
Contributor Author

@ym-han ym-han Dec 24, 2025

Choose a reason for hiding this comment

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

Yeah. In principle Modules should help with this, but yes, it's too misleading in this context. Will remove that sentence.

<!-- Citation: perception/spatial_perception.py:64 - Real SpatialMemory module with color_image: In[Image] declaration -->

> [!NOTE]
> The core takeaway: modules can operate on any underlying transport. The same module code deploys across local shared memory, network protocols, or distributed clusters by changing just the transport configuration.
Copy link
Contributor

Choose a reason for hiding this comment

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

a lot of this is theoretical, like ok, how do I run on a distributed cluster? We have no code for this, we don't want to claim things like this that don't exist yet

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah you're right, I had let this slide because I was thinking too much about what this in principle allows for.

**Monitor long-running skills** - Use `skillspy` to watch skill execution in real-time. Skills are tracked in an execution database showing what's currently running and what has completed—invaluable for debugging navigation or other long operations. See the [skill basics tutorial](../tutorials/skill_basics/tutorial.md) for an example of this.

> [!WARNING]
> **Don't use both `@skill` and `@rpc` decorators on a single method** - The `@skill` wrapper can't be pickled for LCM transport. Use `@skill()` for agent tools, `@rpc` for module-to-module calls.
Copy link
Contributor

Choose a reason for hiding this comment

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

this is likely a bug? you should be able to use both decorators though @Skill implies @rpc

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think I got an error when literally trying to do something like

# but can't remb the exact order I had tried this in
@skill
@rpc
def method():


We've seen how skills can be made available to agents as tools they can call. Often, however, we don't just want agents making tool calls -- we also want to relay updates from the tool calls, from the skills, back to the agent.

Some of this behavior already comes as a default: if you decorate the method with `@skill()`, the agent will be notified with the *return value* of the method when the skill finishes (because the default value of the `ret` parameter is `Return.call_agent`).
Copy link
Contributor

Choose a reason for hiding this comment

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

ret parameter? what is that? why are we talking about this? this is the first mention of this or Return.call_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.

Good catch, I've removed that parenthetical comment.


## See also

- [The Skills API reference](../api/skills.md)
Copy link
Contributor

@leshy leshy Dec 24, 2025

Choose a reason for hiding this comment

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

I feel like after this I don't understand the concepts of reducers, active/passive streams etc, idk about tooling (skillspy, agentspy, humancli) idk if this is explained elsewhere, will go through tutorials

leshy and others added 20 commits December 27, 2025 01:05
Former-commit-id: 73c84e0 [formerly 9fc848f]
Former-commit-id: e75dd04
Former-commit-id: 34e3051 [formerly 5d5bc0f]
Former-commit-id: 0795ff9
Former-commit-id: 3b8b39d [formerly 51ac68e]
Former-commit-id: f28b472
Former-commit-id: ef046bc [formerly a64c477]
Former-commit-id: c5b447c
Former-commit-id: 0eaa934 [formerly 7c2f3c3]
Former-commit-id: e53435c
Former-commit-id: b444f02 [formerly 35df13e]
Former-commit-id: dc375be
Former-commit-id: b278570 [formerly d684d00]
Former-commit-id: 902a959
Former-commit-id: 396062f [formerly e8ab7d0]
Former-commit-id: f9c1d7c
Former-commit-id: 2db46e3 [formerly a043da5]
Former-commit-id: b1c9d1c
Former-commit-id: 711fa8d [formerly c6ad14f]
Former-commit-id: e877318
Former-commit-id: f8843d0 [formerly 2bdea55]
Former-commit-id: bc44c15
Former-commit-id: dc28573 [formerly c5a2430]
Former-commit-id: 6e70ee2
Former-commit-id: d6d5517 [formerly d0f1639]
Former-commit-id: 9ee842d
Former-commit-id: cc0f0f7 [formerly 665c20f]
Former-commit-id: 0a07712
Fix Unitree Go2 (replay and spatial memory)

Former-commit-id: 437b311 [formerly 0875fbc]
Former-commit-id: bcc663f
Former-commit-id: 786cf31 [formerly eae033b]
Former-commit-id: 987d158
Former-commit-id: fa16ba8 [formerly ee92efe]
Former-commit-id: 4251c9c
Former-commit-id: 08ec6a6 [formerly c107465]
Former-commit-id: fc86503
Former-commit-id: e173a1f [formerly 1155097]
Former-commit-id: 8f390ee
ym-han added 16 commits January 6, 2026 06:31
Former-commit-id: 7934922
Former-commit-id: 3a10c28
Former-commit-id: e409883
Former-commit-id: fc90e96
Former-commit-id: 9e0a481
Former-commit-id: e051943
… in light of Paul's feedback

Former-commit-id: 111ed57
Former-commit-id: 21360e8
Former-commit-id: 4a81ba9
Former-commit-id: e3f783f
…-skill-plus-llm-agent tutorial

Former-commit-id: c91eebd
Former-commit-id: 52c42c9
…gent and two sub-agents)

Former-commit-id: 02fd37c
Former-commit-id: 97df264
Former-commit-id: c8a3288
Former-commit-id: 7fd13bc
@spomichter spomichter requested a review from a team January 8, 2026 13:59
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

1 similar comment
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

1 similar comment
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

1 similar comment
@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

@greptile-apps
Copy link

greptile-apps bot commented Jan 8, 2026

Too many files changed for review.

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.

7 participants