Quackd Passport

Inspiration

Robots from different makers are about to share front doors, hallways, and warehouse floors. When two of them meet, neither can say who it is, what its body can do, who owns it, or how to stop it. And once robots run on language models, a robot that talks to yours can talk to your robot's model. I wanted a way for robots that never met to introduce themselves, check each other, and work together, without one robot's words ever steering another's brain.

What it does

Quackd Passport is a small signed document a robot serves about itself: name, maker, owner, its body with sourced numbers (mass, height, payload), its skills, what it cannot do, and how a person stops it. Quackd, my open robot runtime, shipped it in 0.23. This entry runs quackd onboard each robot, gives both robots a Nemotron brain on the Nebius Token Factory, and plays it out at a front door.

A postman brings a letter to a home: Agile ONE SN, the humanoid Agile Robots built on Nvidia Isaac GR00T. The household's robot is Microduck, Pollen Robotics' 25 cm duck. As strangers, each sees the other's passport in closed words and numbers only. The postman speaks, Quackd delivers the message but keeps it from the duck's model, and the letter stays for the letterbox. Once the household has booked the delivery, the two are pinned to each other, and their words flow. The postman's Nemotron reads in the duck's passport that its beak cannot hold anything and only scoops at the floor, so instead of holding the letter out, it lays it at the duck's feet, and the duck scoops it into its beak. The postman can also ask the duck for a pause, which brakes it at once. No robot can make another move.

Two commands are for people. explain reads a robot's passport and lets Nemotron answer a question about it, with how far to trust the robot decided by code first. whois asks an Nvidia vision model, which passport belongs to which robot in a picture.

How I built it

  • Quackd runs onboard each robot. A robot's own run holds its key, serves its passport, and decides by fixed code how far to trust the other and whether to grant it a pause, and flies its pilot. Here one laptop stands in for both robots' computers.
  • Every model call goes to Token Factory. The robots' pilots are Quackd's own runs, with its OpenAI-compatible provider pointed at Token Factory, so a Nemotron pilot needed no new client code. Model ids come only from the key's live model list.
  • Agile ONE SN ships in 2027, and Quackd has no driver for it, so it joins Quackd as a mock body through Quackd's own adapter entry point, its passport carrying the figures Agile Robots published. Microduck runs on Quackd's simulator, where its ball stands in for the letter.
  • The tests replay both acts with a real Quackd run per robot against a stand-in for Token Factory and check what reaches each model and that each robot's key reaches only its own server.
  • Then I ran it all live on Token Factory on 27 October: both acts with Nemotron 3 Super piloting both robots, explain, and whois with Nemotron 3.5 Super VL. The README quotes what each command printed, and the folder keeps every run's record.

Challenges

Keeping a stranger's text out of every model call. A robot's name is text the stranger wrote, so a stranger is shown to a model by a name its key makes, and its own sentences go to the person instead. That is also why, as strangers, the postman never learns what the duck's beak cannot do: the line saying so is the duck's own words. While testing I also found that the OpenAI SDK reads gateway credentials from its own environment variables and would send them to Token Factory, so the client is now built to send the Nebius key and nothing else.

The live runs found what no stand-in could. On the first one the postman never started: Nemotron judged its task uncertain because Agile ONE SN's reach is not published, and Quackd asks a person about that, but nobody sat at the terminal. Now the doorstep answers with Quackd's own --yes, which the record names as itself and never as a person, and an infeasible verdict still stops a robot. On the next run the postman gave up after 12 seconds, before the duck had even started, so its task now tells it the household's robot can take a minute.

What I learned

A stand-in pilot proves the plumbing and never the behavior. Mine always said feasible and waited forever, and on its first live runs Nemotron did neither.

A safety question needs someone to answer it. A robot nobody watches needs a standing answer, and the record has to name that answer as what it is, never as a person.

Caching pays for an agent. Every turn sends the same long prompt with a little more on the end, and 81% of the input tokens in the two acts came from Token Factory's cache. At the list's prices for Nemotron 3 Super, $0.30 per million tokens in, $0.06 cached, and $0.90 out, the two acts cost

$$\frac{0.30\,(232402 - 187408) + 0.06 \cdot 187408 + 0.90 \cdot 4946}{10^{6}} \approx 0.029 \text{ USD}$$

What's next

A real robot at the door: Quackd already has adapters for the SO-101 arm and other bodies, and the same commands take a real one by its name. The postman's brain on a real Jetson Thor, where --onboard already points a pilot at a model on the robot's own computer. Then identify by motion, so a robot can show which body holds its passport.

Built With

  • ed25519
  • http
  • json-schema
  • jws
  • microduck
  • multi-robot
  • nebius
  • nebius-token-factory
  • nemotron-3-super
  • nemotron-3.5-super-vl
  • nvidia-nemotron
  • openai-api
  • opencv
  • pillow
  • prompt-injection
  • pytest
  • python
  • quackd
  • rich
  • robotics
  • tool-calling
  • typer
  • uv
  • zeroconf
Share this project:

Updates

Submission history