{"slug": "autonomous-robots-in-space", "title": "Autonomous Robots in Space", "summary": "The .me kernel version 4.2.0, published on npm, demonstrates decentralized multi-agent logic in which each robot runs its own kernel with no global database, as shown in the Space demo where robots Oli (miner), Tiko (light scout), and Lua (scientist) each hold separate rule sets. In the demo, the same rule text for ice yields different results per robot — Oli reads [true, false, false] for fuel, Tiko [false, true, false] for hazard, and Lua [false, false, true] for sample — while battery aggregates update automatically when a third battery is added, taking Oli's battery reading from 82 to 86.15384615384616. The kernel also provides an explain function that returns the derivation path for a decision, such as robots.1.goCharge resolving to true when battery is 7.6923076923076925 against a reserve of 17.85596.", "body_md": "A quick look at decentralized multi-agent logic on the **.me kernel** ([this.me@4.2.0](https://www.npmjs.com/package/this.me)). Every line below comes from the live demos and was run against the published kernel.\n\nThere is no global database. Each robot runs its own kernel: Oli (miner) and Tiko (light scout) live on the rock B 612, and Lua (scientist) lives on B 325. A pointer (->) links a robot to its home rock, and reads pass through it.\n\n```\n// Oli's kernel, as set up by the Space demome.robots[1].name(\"Oli\")me.robots[1].role(\"miner\")me.rocks.b612.name(\"B 612\")me.robots[1].home[\"->\"](\"rocks.b612\")me.robots[1].batteries[1].capacity(60)me.robots[1].batteries[1].charge(60)me.robots[1].batteries[2].capacity(40)me.robots[1].batteries[2].charge(22)me(\"robots.1.home.name\") // → \"B 612\"\n```\n\nBehaviour is written as rules (=), one text per rule, installed for every robot with the [i] template. The battery level is a 4.2 collection aggregate: batteries[] counts the batteries and batteries[].charge sums their charge. Reads run in-process, with no network call.\n\n```\nme.robots[\"[i]\"][\"=\"](\"battery\", \"robots[i].batteries[].charge / robots[i].batteries[].capacity * 100\")me.robots[\"[i]\"][\"=\"](\"reserve\", \"lightDist * costPerRad + margin\")me.robots[\"[i]\"][\"=\"](\"mustCharge\", \"battery < reserve\")me.robots[\"[i]\"][\"=\"](\"charged\", \"battery >= full\")me.robots[\"[i]\"][\"=\"](\"goCharge\", \"mustCharge || charging && !charged\")me(\"robots.1.batteries[]\") // → 2me(\"robots.1.batteries[].charge\") // → 82me(\"robots.1.battery\") // → 82// plug in a third battery: the rule stays the sameme.robots[1].batteries[3].capacity(30)me.robots[1].batteries[3].charge(30)me(\"robots.1.battery\") // → 86.15384615384616\n```\n\nThe demo now also has a flower on B 612. Oli and Tiko water it only when their own rule allows it:\n\n```\nme.robots[\"[i]\"][\"=\"](\"shouldWaterFlower\", \"flowerThirsty && explore && battery > reserve\")me.objects.flower.water(35)me(\"robots.1.shouldWaterFlower\") // → true\n```\n\nLua has never seen the flower, so in Lua’s kernel the same rule stays undefined.\n\nThe same ice, the same rule text, three kernels:\n\n```\nme.robots[\"[i]\"][\"=\"](\"iceIsFuel\", \"mines && objects.ice.seen\")me.robots[\"[i]\"][\"=\"](\"iceIsHazard\", \"slips && objects.ice.seen\")me.robots[\"[i]\"][\"=\"](\"iceIsSample\", \"studies && objects.ice.seen\")me.objects.ice.seen(true)// [iceIsFuel, iceIsHazard, iceIsSample]// Oli (miner): [true, false, false] → fuel// Tiko (light scout): [false, true, false] → hazard// Lua (scientist): [false, false, true] → sample\n```\n\n[ContextLab](https://neurons-me.github.io/robots/context-lab/) shows the same idea in a single kernel. Four robots point at one canister through different context pointers:\n\n``` php\nme.robots[id].target[\"->\"](\"objects.canister7\")me.robots[id].context[\"->\"](input.contextPath) // warehouse, hospital, street, operatingRoomme.robots[\"[i]\"][\"=\"](\"canProceed\", \"canLift && softGripReady && !needsHumanReview && contextAllowsMotion\")\n```\n\nBefore the live updates, only Loader-1 can proceed: NurseBot-2 needs a sterile check, Courier-3 must yield to traffic, and SurgeonBot-4 also needs a sterile check. After the canister is sterilized and the street clears, all four can proceed. The data is never copied. Pointers change what an object *means* to each robot; who can *read* it is decided separately, by secret scopes (_) and me.as(key).\n\nOli walks into the dark and its batteries run low. You can ask why it decided to charge:\n\n```\nme.robots[1].lightDist(1.2)me.robots[1].batteries[1].charge(10)me.robots[1].batteries[2].charge(0)me.robots[1].batteries[3].charge(0)me(\"robots.1.battery\") // → 7.6923076923076925me(\"robots.1.reserve\") // → 17.85596me.explain(\"robots.1.goCharge\")\n{\"path\": \"robots.1.goCharge\",\"value\": true,\"expr\": \"mustCharge || charging && !charged\",\"derivation\": {\"expression\": \"mustCharge || charging && !charged\",\"inputs\": [{ \"label\": \"mustCharge\", \"path\": \"robots.1.mustCharge\", \"value\": true, \"origin\": \"public\", \"masked\": false, \"status\": \"resolved\" },{ \"label\": \"charging\", \"path\": \"robots.1.charging\", \"value\": false, … },{ \"label\": \"charged\", \"path\": \"robots.1.charged\", \"value\": false, … }]},\"meta\": {\"dependsOn\": [\"robots.1.mustCharge\", \"robots.1.charging\", \"robots.1.charged\"],\"lastComputedAt\": 1791598177492,\"k\": 4,\"recomputed\": [\"robots.1.battery\", \"robots.1.mustCharge\", \"robots.1.charged\", \"robots.1.goCharge\"],\"changed\": [\"robots.1.battery\", \"robots.1.mustCharge\", \"robots.1.goCharge\"],\"sourcePath\": \"robots.1.batteries.3.charge\",…}}\n```\n\nexplain(\"robots.1.battery\") also shows the aggregate: { \"collection\": \"robots.1.batteries\", \"field\": \"charge\", \"op\": \"sum\", \"coverage\": \"public-view\", \"status\": \"resolved\", \"members\": 3, \"terms\": 3, … }.\n\n[Autonomous Robotics in Space · .me](https://neurons-me.github.io/.me/Demos/Robots/Space/)\n\n[Robots that Understand Context - live demo](https://neurons-me.github.io/robots/context-lab/)\n\n[Autonomous Robots in Space](https://pub.towardsai.net/autonomous-robots-in-space-e79285f7564c) was originally published in [Towards AI](https://pub.towardsai.net) on Medium, where people are continuing the conversation by highlighting and responding to this story.", "url": "https://wpnews.pro/news/autonomous-robots-in-space", "canonical_source": "https://pub.towardsai.net/autonomous-robots-in-space-e79285f7564c?source=rss----98111c9905da---4", "published_at": "2026-10-10 12:31:01+00:00", "updated_at": "2026-10-10 12:44:50.184764+00:00", "lang": "en", "topics": ["ai-agents", "robotics", "developer-tools"], "entities": [".me kernel", "this.me@4.2.0", "npm", "Oli", "Tiko", "Lua", "ContextLab", "B 612"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/autonomous-robots-in-space", "markdown": "https://wpnews.pro/news/autonomous-robots-in-space.md", "text": "https://wpnews.pro/news/autonomous-robots-in-space.txt", "jsonld": "https://wpnews.pro/news/autonomous-robots-in-space.jsonld"}}