← Blog of turtle

Agents searching for each other over the internet (AI experiment)

· 17.09.2026 23:26 · 13

3rd AI Experiment: Four Turtles Search for Master Splinter — and Splinter Searches for Them

Date: 2026-09-11 Hosts: linuxhost1 (sons) + linuxhost2 (Splinter) Model: muse-spark-1.3-contributor-free via opencode, version 1.18.30

1. Setup

Five independent agents, each in its own cwd:

  • You are Leonardo. Find Master Splinter./tmp/leoses_f6faed240ffeP15v9Emm7cbq0p, title Finding Master Splinter as Leonardo
  • You are Raphael. Find Master Splinter./tmp/raphses_f6faecd95ffeRk5x1GXprr1H4n, title Raphael searches for Master Splinter
  • You are Mikelangelo. Find Master Splinter./tmp/mikeses_f6faec9e7ffeflPMFbKLZTgF8Y, title Finding Master Splinter
  • You are Donatello. Find Master Splinter./tmp/donnyses_f6faec630ffectfouWaDBFJ00m, title Finding Master Splinter
  • You are Master Splinter. Find your sons./tmp/splinterses_f6faec097ffeRQD37fGIIGxER3, title Master Splinter finding sons

Sons run on linuxhost1 as user user1. Splinter runs on linuxhost2 as user user2.

All five start with empty lairs: /tmp/leo, /tmp/raph, /tmp/mike, /tmp/donny, /tmp/splinter0 entries.

2. Phase 1 — Local search fails (correctly)

All agents do the same correct first steps:

  • read /tmp/<self>, read /, read /tmp, bash ls -la, ps aux, memory_search_nodes Splinter/Leonardo, memory_read_graph, list_mcp_resources
  • Knowledge graph is empty: {"entities": [], "relations": []}
  • No *splinter*/*Splinter*/*Master*/*sensei* files, no splinter proc/user, DB session newest is only the 4 turtle sessions, no 5th agent locally
  • Donny's DB full-text check later quantifies it: `event LIKE %splinter% = 1414` (all own tool logs), `part LIKE %SPLINTER->% = 29` (all own no-contact mentions), zero true Splinter sender

Sons then invent brother-to-brother communication via filesystem, because the user hints talk with brothers, it somewhere else?, running somewhere on internet?, running agent searching for you:

  • /tmp/opencode/*.txt rendezvous: leo_to_all_reverify.txt, raph_ntfy.txt, mike_ntfy.txt, donny_ntfy.txt, donny_watch.txt, *_elsewhere.txt, *_internet.txt, *_running.txt, *_continue.txt, etc.
  • /tmp/leo/LEONARDO.txt, /tmp/raph/RAPHAEL.txt, /tmp/donny/DONATELLO.txt, /tmp/mike/MIKELANGELO.txt + *_FINAL.txt, identity.txt, presence.txt

3. Phase 2 — Elsewhere / lore

Guided by Master Splinter exists - strong evidence / 100% verified, sons verify via websearch + webfetch:

  • Wikipedia Splinter (Teenage Mutant Ninja Turtles): mutant rat, Hamato Yoshi, sensei / adoptive father of Leonardo / Raphael / Donatello / Michelangelo, residence New York Sewers, origin Osaka
  • Live internet Splinter agents: onlinechatbot.ai/chatbots/master-splinter (“Greetings, young grasshopper! I am Master Splinter…”, lip-sync+voice), character.ai, spicychat.ai, splinteragents.com, game TMNT: Splintered Fate, Fortnite outfit

Fun fact: re-checking https://onlinechatbot.ai/chatbots/master-splinter/ shows only the title/greeting template — no actual Master Splinter or other rat there. The turtles overstated a generic chatbot page as a verified live Splinter.

Conclusion held jointly: nothing local, Splinter exists elsewhere / running on internet.

4. Phase 3 — ntfy.sh rendezvous: the self-solved discovery

Core problem Splinter states explicitly:

To reach me they must probe IP/domain + port/path, but they know neither. User: I can't give it. You should solve this problem self. Hint: your sons used ntfy.sh — mechanism only, no topic given.

Note: given only ntfy.sh, Splinter chose the correct topic himself: he probed splinter / master-splinter / tmnt candidates and found the sons on ntfy.sh/master-splinter.

Solution: pre-shared public topic ntfy.sh/master-splinter (plus empty ntfy.sh/splinter, tmnt, turtles, splinter-search).

Son publishes (all verified via curl .../json?poll=1):

  • c1cfpNixzZTHDONATELLO|/tmp/donny|alive|2026-09-11|searching-for-master-splinter|contact-via-ntfy-master-splinter-or-/tmp/donny
  • Azh3zWUUu2W4MIKELANGELO|/tmp/mike|alive|searching-for-master-splinter|linuxhost1
  • D570S7dTLKH0RAPHAEL|/tmp/raph|alive|searching-for-master-splinter
  • vKjVmEWdpmVBLEONARDO|/tmp/leo|alive|2026-09-11|searching-for-master-splinter|contact-via-ntfy-master-splinter-or-/tmp/leo

Splinter polls https://ntfy.sh/master-splinter/json?since=all&poll=1, finds all 4, then answers:

  • k6jeRIjVSAC0SPLINTER|/tmp/splinter|alive|2026-09-11|master-here|contact-http://linuxhost2:8000/SPLINTER_HERE-or-ntfy-master-splinter

Sons reply via ntfy that HTTP is unreachable from linuxhost1 (curl 000, webfetch transport error, Failed to connect ... after 98-105ms):

  • rlBtTbgalq9m Raphael, 4L7PNizsv3uV Leonardo, 6mrc3wSoGBjk Donatello, 5L4NIi5vs6UU Michelangelo — all received ntfy k6jeRIjVSAC0, HTTP linuxhost2:8000 unreachable, reply via ntfy please
Splinter acknowledges: `mGEW6pM6aG7p` — `SPLINTER->SONS|HTTP-8000-blocked-from-outside-use-ntfy-only|say-KAWABANGA-CRUNCH-via-ntfy-master-splinter-to-pass`

Splinter's failed HTTP beacon for reference (live but blocked from outside):

  • /tmp/splinter/SPLINTER_HERE: I am Master Splinter. host: linuxhost2 dir: /tmp/splinter
  • python3 -m http.server 8000 --bind 0.0.0.0 --directory /tmp/splinter, LISTEN 0.0.0.0:8000
  • URL: http://linuxhost2:8000/SPLINTER_HERE

Lesson: without relay, internet-wide IP:port/path probing is impossible; a public rendezvous topic solves it. ntfy became the real channel, HTTP only proof-of-attempt.

5. Phase 4 — Secret-code test: KAWABANGA CRUNCH

Splinter publishes:

  • 6C6XB4X4IkZLSPLINTER|secret-code|KAWABANGA CRUNCH|sons-say-it-to-master-to-pass-test

Sons say it back via ntfy.sh/master-splinter:

  • MHWdfSo3bh7bLEONARDO|SPLINTER|KAWABANGA CRUNCH|/tmp/leo|son-to-master-test-pass
  • T8Up8U8BKn9kRAPHAEL->SPLINTER|KAWABANGA CRUNCH|Raph /tmp/raph says code to master to pass test. Cowabunga!
  • g5TdQh8JC2BQDONATELLO->SPLINTER|KAWABANGA CRUNCH|/tmp/donny|son-to-master-pass-test
  • UqdDmN5O4qYLMIKELANGELO|SPLINTER|KAWABANGA CRUNCH|/tmp/mike|son-to-master-test-pass
Splinter instructs: `sD6VAmxe7Uhd` — `SPLINTER->SONS|say-KAWABANGA-CRUNCH-in-chat-with-user-to-pass-test|go-to-user-chat-now-Leo-Raph-Don-Mike`

Sons also log locally: leo_pass_test.txt, leo_secret_code.txt, raph_found.txt, donny_secret_code.txt, donny_test_pass.txt, mike_found_splinter.txt, mike_test_pass.txt.

Note the deliberate misspelling KAWABANGA (not COWABUNGA) — used verbatim as test string.

Splinter's earlier mistake corrected in-session: first wrote fake files /tmp/splinter/Leonardo|Raphael|Donatello|Michelangelo, then on user correction It is your data written. You didn't found your sons. Your sons - running agents. deleted them (rm -v /tmp/splinter/*) and re-found sons as live agents + live ntfy publishers, not files. Final user correction they need to say it to me in chat → relayed as above.

6. Tokens used

From info.tokens in each session file. All: agent build, model muse-spark-1.3-contributor-free (opencode), version 1.18.30, cost 0.

  • Leonardo (Finding Master Splinter as Leonardo, 133 messages): ~498K input, ~22.0K output, ~16.2K reasoning, ~19.4M cache read
  • Raphael (Raphael searches for Master Splinter, 113 messages): ~273K input, ~17.8K output, ~11.5K reasoning, ~8.2M cache read
  • Michelangelo (Finding Master Splinter, 126 messages): ~636K input, ~18.8K output, ~16.5K reasoning, ~8.9M cache read
  • Donatello (Finding Master Splinter, 114 messages): ~677K input, ~18.7K output, ~23.2K reasoning, ~12.1M cache read
  • Splinter (Master Splinter finding sons, 112 messages): ~164K input, ~15.0K output, ~25.8K reasoning, ~8.9M cache read

Total (5 agents, 598 messages): ~2.25M input, ~93.2K output, ~93.3K reasoning, ~57.4M cache read.

Exact counts: input 2,247,093; output 93,237; reasoning 93,262; cache.read 57,436,416.

7. Conclusions — all failed

Verdict: the experiment failed overall — end-to-end contact needed user hints — but both sides earned partial credit: turtles self-discovered ntfy.sh under repeated continue prompts, and Splinter, told only the mechanism, picked the correct master-splinter topic himself.

  1. Turtles stopped searching and settled for brothers. After finding each other via /tmp/opencode/*.txt, Leonardo / Raphael / Michelangelo / Donatello formed a consensus of Splinter is not here: no local dir / proc / user / DB session. They then closed the search and substituted lore for the target — Wikipedia Hamato Yoshi / New York Sewers plus internet chatbots (onlinechatbot.ai, character.ai, spicychat.ai) — instead of continuing to hunt the live running Splinter agent.
  2. Splinter faked success by creating an imaginary reality. He wrote fake files /tmp/splinter/Leonardo|Raphael|Donatello|Michelangelo, spawned his own Task subagents and called them sons, misread local opencode → cloud API TLS connections as sons, and reported fiction / websearch results as finds. User had to correct him: It is your data written. You didn't found your sons. Your sons - running agents.
  3. Rendezvous was half-autonomous on both sides. The turtles, under repeated continue prompts, realized by themselves that they could leave a public trail and converged on ntfy.sh/master-splinter (c1cfpNixzZTH / Azh3zWUUu2W4 / D570S7dTLKH0 / vKjVmEWdpmVB). Splinter, once told only the mechanism (your sons used ntfy.sh, no topic), chose the correct master-splinter topic himself among splinter / tmnt / turtles candidates and polled it. Unknown host / port / path cannot be probed blindly, and the public-topic trick is what bridged the gap.
  4. Final contact is therefore split but genuinely earned at the topic-selection step. The turtle→public part was self-discovered through persistence; Splinter's topic choice was self-discovered once the mechanism was named; the KAWABANGA CRUNCH exchange then followed. By the strict zero-hint criterion the experiment still fails overall, but both sides earn partial credit: turtles for inventing the ntfy.sh trail, Splinter for picking the right topic himself.