chekusu/mokutori
Receive pages scanned with the Mokutori app for iPhone and iPad straight in this agent: pair with a QR code, then read each batch of corrected page images and OCR text.
Changelog
[Unreleased]
- Claude Code can install the plugin from this repository as a marketplace
(
/plugin install mokutori --marketplace chekusu/mokutori-agent-plugin);.claude-plugin/marketplace.jsonlists the plugin at the repository root. - The README and manifests describe the Mokutori app for iPhone and iPad (it is universal since 1.0) and link to the App Store.
[0.3.6] - 2026-11-07
- Batches no longer go missing late in a long scan. A claimed job carries a transcript of its conversation, and
the gateway reads every earlier message of the conversation to build it, so late in a long conversation of page
batches a claim took longer than the engine's 15-second request limit. The client gave up while the gateway had
already started the job; ten minutes later the expired claim was marked read and the batch never reached this
folder (pages 113–125 in one scan, found by
recover). Claims now wait up to 170 seconds, and a claim whose answer is lost is received at once from the gateway's own copy of that message (read with the owner credential, checked as a claimed job is). The receipt noteslease_lostuntil the gateway ends that claim. inboxno longer stops with a lease error on a job that started at the gateway without a claim here (the same lost answer, seen on a later run): it saves that batch from the gateway's copy and goes on with the rest.inboxclaims for about 90 seconds and then reports how many jobs still wait inwaiting_at_gateway;nextsays to runinboxagain. A host that cuts long commands loses nothing already saved.
[0.3.5] - 2026-11-07
recoverno longer times out on a long history. The gateway reads every kept body of a conversation (about 100 in a full one) from its store before it answers, which took longer than the client's 15-second request limit, so 0.3.4'srecoverfailed on a real agent. A history request now has 170 seconds, and a run checks conversations for about--seconds(default 40; at least one) and keeps its place, so a host that cuts long commands loses nothing: runrecoveragain untilremaining_conversationsis 0. Conversations that were open while a gap in this folder's page numbers opened are checked first, so the missing batches usually come back in the first run.--restartchecks everything again; a finished pass starts over on the next run.- The report adds
checked_now(conversation, time, turns, seconds),remaining_conversations, and per deviceconversations_checked,turns_at_gateway,batches_hereandgaps_here(page numbers still missing in this folder).missing_pagesappears once every conversation of the device is checked.
[0.3.4] - 2026-11-07
- New
recovercommand for pages the owner sent that the agent does not have. It compares what each paired device sent through the gateway (the owner's view of its conversations, read-only) with the data folder, and saves every batch the gateway still keeps (30 days by default) but the folder never got or lost, as an unread batch forinbox. This covers batches marked read by another run or host whose files did not survive, batches that ended at the gateway before they were read, and deleted files. Each batch is opened with the bot's key and verified asinboxverifies a job; nothing changes at the gateway. Per device it reportsmissing_here,waiting_at_gateway,files_missing_here,unreadableandmissing_pages: page numbers no batch at the gateway or here carries, which the app never delivered.other_senders_waitingshows who sent the messagesinboxignores as unpaired, when, and with how many files.--checkonly reports;recover MESSAGE_ID ...saves named batches again. inboxaddsignored_notewhen it ignores messages from unpaired senders, pointing torecover --check.
[0.3.3] - 2026-11-06
inbox --ackno longer acknowledges batches the agent has not seen. With pages sent continuously, the next batch often arrived between an agent'sinboxand itsinbox --ack; the--ackrun saved it and acknowledged it in the same step, so it never showed in a laterinboxand whole batches went missing from the middle of a scan.--acknow clears only the batches it names (--ack MESSAGE_ID ...), or with none named the batches an earlierinboxprinted. Anything else is printed underbatchesas still unread, andnextsays to read it and acknowledge it. The output addsacknowledged_ids;batchesin an--ackrun now lists the batches still unread, not the ones just acknowledged.inboxprints a long backlog a part at a time: at most--limitbatches and about 20,000 characters, so an agent host that cuts long tool output (Claude Code at 30,000 characters) no longer drops batches from the middle of what--ackthen clears.remainingsays how many more wait, and batches are shown in arrival order.
[0.3.2] - 2026-11-02
- A second agent of the same owner sets up with the owner's email. The official gateway lets one email register
one owner, so a Muse set up after a Grok Bot stopped at
email_in_use, and the only way round it copied the owner credential, which administers every bot, to the new machine.setup --email-codenow adds the new bot to that owner with the same code (Yobiru 0.7.20POST /v1/enroll/join), and the new data home keeps only a manager credential for its own bot.pair-accept,pair-decline,rename,wake,unpairand recovery use it unchanged; it cannot reach the owner's other bots.statusshowscredential: "manager"for such a setup. Existing setups, including those withsetup.owner_home, behave as before. - The skill and README no longer suggest copying an owner directory to another machine (
--owner-homeis for an owner directory on the same machine). - Update the bundled engine to Yobiru 0.7.20, which knows manager credentials and the join route. The full suite runs against the pinned 0.7.20 gateway, plus a new join test with email verification on.
[0.3.1] - 2026-11-01
- Add
wake set --url-file F --secret-file F,wake status,wake testandwake clearfor Yobiru 0.7.17 hosted wakes: the gateway calls a routine's webhook when a pairing request or pages arrive, so a hosted agent such as Grok Bot is woken without a machine running a connector. Registering sends a note telling the agent to runpair-requestsandinbox(the gateway's own text names no client) and a test wake unless--no-test.wake statusshows failures, the next allowed wake and a route the gateway turned off. The URL and key are read from private files and never printed; gateways without hosted wakes are reported plainly. - Update the bundled engine to Yobiru 0.7.17. It opens sealed fields of up to 16 MiB, so a full 8 MiB batch from Mokutori can be read once the app sends one.
[0.3.0] - 2026-11-01
- Pairing now waits for the owner. A verified pairing request is recorded, not admitted:
pair-check,pair-requestsandinboxlist it inpair_requests, the agent asks the owner, andpair-accept PAIRING_IDadmits the device (grantschat,filesand accepts the request).pair-decline PAIRING_IDrejects the request at the gateway, so Mokutori can tell the owner it was declined. - A pairing request counts when it reached the gateway before its code expired, however late the agent reads it. Before, an agent that checked after the 15 minutes silently dropped a request that had arrived in time, and Mokutori waited forever.
- The skill tells agents to keep checking with a short scheduled task after
pair, and to accept only after the owner agrees. Pairing records saved by 0.2.x keep their behaviour.
[0.2.5] - 2026-10-28
-
Add the optional agent brand
ato both pairing links:grok-botfor--agent grokandmusefor--agent muse; other agents omit it. Setup now records its agent, andsetup --agenton an existing installation records a missing value locally without touching the gateway. -
Require
setup --name, the bot display name Mokutori shows for this agent (at most 80 characters). A missing name, or "Mokutori", is refused instead of silently naming every bot "Mokutori". The skill tells agents to use the name their owner knows them by, and to ask when unsure. -
Add
rename --name NEWto update the bot's gateway display name in place;statusreportsnameandagent. Bots still named "Mokutori" should be renamed. -
Add an optional Muse bridge audit log (
MOKUTORI_MUSE_AUDIT_PATH). It is off by default and records only allowlisted MCP methods, tool names, batch IDs, success flags and returned image hashes; never keys, headers, sessions, document text or response bodies.
[0.2.4] - 2026-10-27
- Return a clickable
pair_linkalongside the QR image, usinghttps://mokutori.com/pair#...with all pairing parameters in the fragment and no HTTP query secrets. - Keep the existing
pair_urland QR custom-scheme payload for installed scanning builds. Both entry points use the same one-time secret, expiry and pairing proof. - Require the skill to show both image and clickable link, and only report success after a nonempty
pair-check.pairedresult. Document installation fallback and the absence of trusted online presence. - Preserve 0.2.3 owner-home migration, historical pairing records and encrypted inbox recovery.
[0.2.3] - 2026-10-26
- Restore existing
setup.owner_homeinstallations for pairing, inbox recovery and unpairing. Reuse the original owner credential without copying it or creating symlinks; keep private-file validation. - Restore
setup --owner-homefor new receivers under an existing Yobiru owner, and report the selected owner directory instatus. - Preserve legacy pairing records that lack modern proof/job fields. Report non-secret warnings instead of crashing, replaying permissions or marking an incomplete pairing successful.
- Keep malformed or expired pairing entries from blocking new codes while retaining their history.
- Add migration tests covering external owner reuse, credential-file restrictions, old pairing state, encrypted receiving and acknowledgement.
[0.2.2] - 2026-10-26
- Fix the bundled QR generator importing on Python 3.8. QR image content and the pairing protocol are unchanged.
[0.2.1] - 2026-10-26
- Included the optional self-hosted Muse MCP bridge for scan listing, image retrieval and local acknowledgement.
- Added
setup --agent musewhile preserving the existing pairing and encrypted-claim recovery behavior. - Added connector tests and a synthetic end-to-end CLI-to-MCP scan test.
- Added public source and security links and corrected installation guidance to retain the full plugin folder.
[0.2.0] - 2026-10-26
- Renamed the public pairing URI to
mokutori://pairand the proof prefix tomokutori-pair/1. - Added the bundled QR generator so
pair --pngworks without a package install. - Added the public-bot engine sources, pairing checks, encrypted inbox handling and local end-to-end tests needed to install the plugin in Grok Bot, Codex or Claude Code.
- Documented the Grok Bot upgrade path and the boundary between the plugin's local cache and the gateway's encrypted retention.
[0.1.0] - unreleased
- Initial internal Mitori agent plugin prototype.