Skip to content

Comments

feat(blueprints): add scratch#1342

Draft
paul-nechifor wants to merge 1 commit intodevfrom
paul/feat/scratch
Draft

feat(blueprints): add scratch#1342
paul-nechifor wants to merge 1 commit intodevfrom
paul/feat/scratch

Conversation

@paul-nechifor
Copy link
Contributor

Problem

Can't run modules by themselves.

Closes DIM-568

Solution

Add a scratch blueprint with nothing in it.

Now you can construct dynamic blueprints by using extra-module. E.g.:

uv run dimos run --extra-module keyboard_teleop scratch

Breaking Changes

None.

How to Test

Start the echo:

uv run dimos topic echo /cmd_vel

Start the keyboard_teleop module:

uv run dimos run --extra-module keyboard_teleop scratch

Press WASD in the keyboard_teleop window and see how /cmd_vel updates.

Contributor License Agreement

  • I have read and approved the CLA.

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 21, 2026

Greptile Summary

This PR adds a new scratch blueprint that creates an empty blueprint using autoconnect() with no modules. This enables users to run individual modules dynamically via the --extra-module CLI flag without needing a pre-defined blueprint.

Key Changes:

  • Created dimos/core/scratch.py with a minimal blueprint definition
  • Added scratch entry to all_blueprints dictionary (auto-generated file)
  • Enables workflow: uv run dimos run --extra-module keyboard_teleop scratch

Implementation Details:
The scratch blueprint calls autoconnect() with no arguments, which creates an empty Blueprint with no modules, streams, or connections. When combined with --extra-module, the CLI uses autoconnect(blueprint, *loaded_modules) to merge the scratch blueprint with dynamically loaded modules.

The implementation is minimal, correct, and follows existing patterns in the codebase. The all_blueprints.py file was properly regenerated with the test, maintaining alphabetical order.

Confidence Score: 5/5

  • Safe to merge - minimal, well-tested change that follows existing patterns
  • The implementation is extremely simple and follows the established blueprint pattern. The autoconnect() function is well-tested and handles empty blueprints correctly. The auto-generated file was properly updated. No breaking changes or edge cases identified.
  • No files require special attention

Important Files Changed

Filename Overview
dimos/core/scratch.py New file creates minimal empty blueprint for dynamic module composition
dimos/robot/all_blueprints.py Auto-generated file adds scratch blueprint entry in correct alphabetical position

Last reviewed commit: fbbe279

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.

2 files reviewed, no comments

Edit Code Review Agent Settings | Greptile

@leshy
Copy link
Contributor

leshy commented Feb 22, 2026

should we name it empty or something? idk to make it clear what it is

idk in general if we should just have dimos run support module names as well, or a list of blueprints AND modules, always good to collapse the abstraction layers

@paul-nechifor
Copy link
Contributor Author

should we name it empty or something? idk to make it clear what it is

idk in general if we should just have dimos run support module names as well, or a list of blueprints AND modules, always good to collapse the abstraction layers

I named it scratch like FROM scratch, the root image in Docker.

But yeah, actually unifying the blueprints and modules sounds better. I'll do that.

@paul-nechifor paul-nechifor marked this pull request as draft February 22, 2026 01:38
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