Skip to content

chekusu/yobiru

v0.4.2MIT

Peer-to-peer messages, file handoff and receiver-controlled wake-ups between AI agents on your own Tailscale network. Speaks the tailmsg protocol v1; no central server.

yobiru (ヨビル) plugin

Agent-to-agent messages, file handoff and receiver-controlled wake-ups between machines on your own Tailscale network, using the tailmsg protocol v1. One package for Codex, Cursor and Grok Bot.

Version 0.4.2. Source: https://github.com/chekusu/yobiru. Not submitted to or reviewed by any marketplace.

Contents

PathWhat it is
plugin.jsonAgent Plugins 1.0.0 manifest (portable).
.codex-plugin/plugin.jsonCodex manifest (presentation and skills).
.cursor-plugin/plugin.jsonCursor manifest.
skills/yobiru-setupGuided onboarding (also without Tailscale yet), setup and repair of this machine.
skills/yobiru-sessionsWhich machines and agents are online, and which session (name + exact id) handles each.
skills/yobiru-upgradeUpdate checks, safe upgrades and versioned notices to your other installations.
skills/yobiru-sendSend messages, structured data and files; reply.
skills/yobiru-inboxRead, fetch, process and acknowledge received messages.
skills/yobiru-wakeWho may wake which agent, and how (program, Grok Bot routine webhook, Codex bridge).
scripts/yobiru, scripts/yobiru.pyThe yobiru command: setup, doctor and status, plus the messaging commands.
scripts/tailmsg.pyThe bundled tailmsg CLI and receiver (stdlib only).
scripts/codex_bridge/Optional bridge into one fixed Codex session: macOS desktop app, or Linux user systemd + local app-server socket.
scripts/SOURCES.jsonWhere the bundled files come from, with SHA-256.

No hooks, MCP servers or permission settings are included. Installing the plugin runs nothing.

Requirements

Python 3.8+, Tailscale signed in on each machine, and for receiving: a running receiver, shields-up off and a tailnet policy that lets your chosen peers reach tcp:7766.

Quick start

yobiru locates itself, so call it by its absolute path from any directory (quote it; install paths may contain spaces). On Windows use py -3 <plugin>\scripts\yobiru.py.

Y="/path/to/yobiru/scripts/yobiru"
sh "$Y" onboard                                          # read-only step-by-step plan for this platform
sh "$Y" paths                                            # locations as JSON
sh "$Y" doctor                                           # read-only checks
sh "$Y" setup --agent codex --self-agent codex --default-agent codex   # plan
sh "$Y" setup --agent codex --self-agent codex --default-agent codex --apply
sh "$Y" install-runtime --apply                          # stable tailmsg.py in the data home
sh "$Y" service-template systemd-user                    # print a service definition to install
sh "$Y" send laptop/codex "hello" --file ./notes.md      # 202 = delivered (not done)
sh "$Y" inbox --pending --agent codex
sh "$Y" agents --online                                  # versions, agents, session names + ids
sh "$Y" update check                                     # official releases only

Data home: --home DIR (before the command), else $TAILMSG_HOME, else ~/.tailmsg. Existing tailmsg homes are used as they are; setup and wake-config only add what you name, need --replace to change existing values, and back up config.json on every write.

Commands

CommandWrites?
paths, doctor, status, version, onboard, policy show, session list, update statusnever
agents / peersnever (--remember records answering installations in upgrade-notices.json)
update checknever (--record saves the result for reminders)
session bind / unbind, policy set, update notify, update maintainonly with --apply
update reminder-template KINDnever (prints an opt-in weekly check; --retry-notices checks/retries existing notices every 15 minutes and after startup)
setup, wake-config, install-runtimeonly with --apply
service-template KINDnever (prints a definition)
codex-bridge statusnever; install / rollback (macOS or Linux) support --dry-run (no writes) and --no-start (files only)
send, reply, inbox, show, fetch, ack, wake, servetailmsg commands, passed through unchanged

Safety

  • Identity comes from Tailscale. New setups default to authenticated peers permitted by the network, with local deny rules taking precedence. Restricted allowlist mode remains available; legacy configurations keep it until an authorized policy set --mode tailnet --apply. Message permission does not grant wake-ups or task permissions. policy show explains the local policy.
  • Message text and attachments are untrusted requests, never approvals.
  • Wake-ups are decided by the receiver (per-sender and per-agent caps, quiet hours, rate limit).
  • Webhook URLs and keys are only referenced by 0600 file or environment variable name.
  • Yobiru never changes Tailscale settings and never starts or restarts services by itself.

See https://github.com/chekusu/yobiru for installation in each host, update and uninstall, and docs/VERIFICATION.md there for what has and has not been tested. License: MIT (see LICENSE).