Skip to main content
Glama
README.md
# Line-us, revived

Software for the [Line-us](https://www.line-us.com) robot drawing arm: a small pen
plotter that started on Kickstarter, a three-servo arm that speaks G-code over TCP on the
local network.

<p align="center">
  <img src="docs/line-us-drawing.webp" width="360"
       alt="Claude Code on a monitor answers 'Yes, I can draw', and below it the Line-us arm writes Yes! in cursive, then draws a harmonograph and a flower">
  <br>
  <em>Asked to draw, the agent answers “Yes, I can draw” — and does, through lineus-mcp (2× speed).</em>
</p>

There are two ways to drive it here, for two different hands on the pen:

```
an AI agent   ──▶  lineus-mcp  ──┐
                                 ├──▶  lineus-core  ──▶  TCP 1337  ──▶  Line-us
a person      ──▶  lineus-jog  ──┘
```

| Package | For | What it is |
|---|---|---|
| [lineus-mcp](packages/lineus-mcp) | agents | An MCP server: a scene language, single-stroke handwriting, doodles, and a preview that simulates what the pen will really do |
| [lineus-jog](packages/lineus-jog) | people | A window that moves the arm live from the keyboard, mouse or a gamepad, and calibrates the pen depth while you draw |
| [lineus-core](packages/lineus-core) | both | The arm as measured: its reach, pen model, coordinate mapping and connection |

<p align="center">
  <img src="docs/line-us-drawing.jpg" width="640"
       alt="A Line-us arm with a blue pen on white paper, under the handwritten word Yes!, a star, a looping harmonograph and flowers">
  <br>
  <em>The same page later, from above, the arm still at work on the last flower.</em>
</p>

The arm takes one connection at a time. Both tools let go of it when they are not using
it, so you can draw with an agent and jog by hand without restarting either.

## Install

Each tool installs on its own, straight from GitHub; neither pulls in the other's
dependencies.

```sh
uvx --from 'git+https://github.com/BenTeoNeb/lineus-mcp#subdirectory=packages/lineus-mcp' lineus-mcp
```

```sh
uvx --from 'git+https://github.com/BenTeoNeb/lineus-mcp#subdirectory=packages/lineus-jog' lineus-jog
```

How to register the MCP server with Claude Code, Claude Desktop or another client is in
[its README](packages/lineus-mcp/README.md#install). Both read the same `LINEUS_*`
environment variables, so set `LINEUS_HOST` (and any pen calibration) once for both.

## Development

A [uv workspace](https://docs.astral.sh/uv/concepts/projects/workspaces/): one lockfile,
one environment, one test run.

```sh
uv sync --all-packages      # every package, with pytest and ruff
uv run pytest               # all three packages: no robot, no network, a few seconds
uv run ruff check packages
```

## Safety

- Preview before drawing.
- Never expose port 1337 to the internet. There is no authentication.

## Licence

MIT — see [LICENSE](LICENSE).

TDQS

B3.4/5.0

Scored across 17 tools

Disambiguation4/5

The preview_*/draw_* pairing gives each tool a clear render-vs-execute role, and distinct modalities (paths, svg, text, scene) separate the rest. Some overlap remains: preview_scene explicitly supersedes preview_paths and its text producer overlaps preview_text/draw_text, but the descriptions steer the agent well.

Naming Consistency4/5

The dominant pattern is verb_noun (get_status, get_job, preview_paths, draw_scene, plan_scene, list_fonts, get_example). A few deviate (bare 'abort', 'home', and the noun 'doodles'), but overall it is predictable and readable.

Tool Count4/5

17 tools is on the heavier side but each preview/draw pair and helper (plan_scene, list_fonts, get_example, doodles) earns its place. Nothing feels redundant or padded.

Completeness4/5

Strong lifecycle coverage: status/job monitoring, abort/home, orientation calibration, four input modalities with preview and execute, plus cost planning, font enumeration, examples, and doodle sourcing. Minor gaps like explicit queue management or pen/feed control are easy to work around.

Maintenance

ActivityMaintained
ResponsivenessSyncing