pyrtan …
sign outA core set of expandable services that act on all forms of I/O through inspectable decision trees. Ask a sentence a tree answers to; the answer comes back with the exact path that produced it. If nothing answers, you get the tree that would. No model is involved in an answer; an agent you start sits beside the trees, never inside them.
pyrtan hub --cors . A hub on your LAN over http:// may be refused by the browser when this page is https://; open the hub's own / instead, which is this same console.Devices all devices →
Recent automations all →
Settings
What the trees read as {{ env.NAME }}: alerts, the controllers and devices they talk to. A secret is kept on the hub and never shown again, here or anywhere; type a new value to replace it. Each setting reaches only the trees it names (* for every tree), and one marked edge goes to the house's edge too, held in its memory only.
Other settings
Add a setting
What this swarm can answer
| Tree | Answers to | From |
|---|
Need a tree that is not here? Browse the catalog, then pyrtan pull NAME into a folder a service serves.
Peers
| Link | Peer | Trees | Last |
|---|
up: answered within 30 s · stale: within 90 s · down: longer, or never.
Federation
This hub is . It routes to the hubs it follows; hubs that follow it receive its announcements and may ask it.
| Link | Hub | Relation | Trees |
|---|
Automations
Trees that run on their own: a clock, a file, a topic or a serial line starts them ([[watches]] in the tree, --watch on the service). Each row is what the watch last did; a path that changed between two runs of the same watch is how you learn a site changed before anyone asked.
| Watch | On | Fired | Last run |
|---|
On the network
What the house's edge sees, looked at every few minutes (pyrtan edge --inventory). Name a device so its alerts say what it is; watch it to be told when it leaves the network and comes back (device-alerts).
Matter
A device already in Google Home joins here too, and stays in Google Home: in the Google Home app, open the device's settings, then Linked Matter apps & services > Link apps & services, and enter the code it shows (good for a few minutes). A new device: the 11 digits under its QR code. Pairing takes up to a few minutes.
Uptime
The devices this swarm watches, from what each watch last said: a tree whose output names a host and whether it is online (device-offline does, with since). Refreshed every 30 seconds while this tab is open.
Uptime counts the time each device was checked; grey is time nobody checked (the service was down, or the watch had not started). online offline not checked
Gaps
A gap is a decision that met a value no branch covers. Each one is the next branch to write, in the tree and node named.
Kept in this browser for this device, , across reloads; making or forgetting a key in the Identity tab takes them along.
| Tree · node | Saw | Times | Where |
|---|
Your other devices
Waiting to be written
Sentences nobody answered, each with the tree that would. pyrtan unanswered --at URL --scaffold DIR writes the files.
| Nobody answered | Would be | To write it |
|---|
Build
A tree, one question at a time: what it reads, what it pulls out, what it decides on and which branches, what it says. Every answer has a default drawn from the sentence by rules, and the file below is checked as you go. Nothing here is a model; the questions are the same ones pyrtan build --from "…" asks on a box.
pyrtan serve DIR, or a hub's --trees DIR): the service loads it the moment it lands, and the sentence is answered from then on. pyrtan check DIR and pyrtan run "…" --trees DIR show it working first.Agents beside the swarm
An agent is an open-weights model you start here: in this browser, on its GPU, or on a server of your own (Ollama, llama.cpp). It tests the trees with sentences of its own, says what a gap's value means, finds the patterns a tree missed and the trees nobody has written, and talks with you. It never answers for a tree and never sits inside a run: what it suggests is checked by rules here, checked again by pyrtan grow --suggestions before it is written, and only you accept it. It remembers what it learns and follows its skills, in this browser only. Nothing is downloaded until you start one.
OLLAMA_ORIGINS=).Suggestions
Each passed the rules in this page. Accept one and it is kept at the hub's /suggestions, for pyrtan grow --suggestions URL --trees DIR --apply. Dismiss one and the agent remembers why.
Nothing yet. Press Patrol, or ask it to /probe a tree.
Memory
What this agent keeps, for this hub, in this browser: your notes, its own, and what happened (refusals, your verdicts, patrols). The most relevant go into every prompt.
Skills
Instructions for a job, the way a skill is for Claude: the built-in ones are the jobs, yours are added to the job you name (or to all of them). A chat skill of yours can be called as /name. Kept in this browser, shared by every agent; a skill file is Markdown with name, description and when in its front matter, or JSON.
| Skill | For |
|---|
Directory
Every hub that asked to be found, as this hub has heard it through the swarm. Entries are hints carried hub to hub; link is how recently each announced. Nothing here is routed to: to use one, follow it from your own hub, pyrtan follow URL --at YOUR-HUB. To be in it: pyrtan hub --listed.
| Heard | Hub | Holds | Last announced |
|---|
This browser as a member
A browser or a phone cannot be reached, so it joins a hub the other way round: it follows the hub, polls a mailbox the hub keeps for it, carries the directory, and keeps copies of the hub's blobs (its directory, gaps, unanswered sentences, anything given to pyrtan keep). When the hub's box dies, what it kept is still here. Install this page to the home screen and it is the phone app.
· · mailbox polled never · Kept here for this hub
| Key | Size | Updated |
|---|
Trees this device runs
| Tree | Answers to | Reaches |
|---|
Activity
Your identity
An identity is a key, made here and held by this browser, which will not hand it over, not even to this page. No account anywhere: hubs grant your key what they choose, a name like you@pyrtan.com points at it, and your other devices speak for it with a note it signs. Lose the key and its backup and nobody can give it back.
Claim a name
Devices that speak for you
| Device | May | Until |
|---|
Who may do what here
The identities this hub grants anything, instead of handing out its token: ask (the trees), chat (the lobby, bots included), run (be a trusted member, running its trees) and operate (everything the token allows). A device gets what its identity is granted, capped by its note. A name is looked up once and pinned.
| Who | May | Document |
|---|
Talk to a stranger
You are paired at random: with someone else on this hub or on a hub it follows, with an agent someone seated here, or with a bot. A bot is a set of trees on the network, not a person and not a model; each of its lines carries the path that produced it, and what it cannot answer it says so, with the tree that would. An agent is a model, named as one; its words are its own. Or play person or agent?: nobody is labelled, and you guess. Nobody has a name and nothing is kept: the conversation is gone when either of you leaves.
The same endpoints this page uses
POST /intent {"text": "…"}
POST /run {"tree": "…", "inputs": {…}}
POST /resume {"snapshot": {…}, "answer": …}
GET /capabilities
GET /health
GET /gaps
GET /unanswered
POST /build {"text": "…", "answers": {…}} the builder's questions and the checked file
GET /peers (hub only)
POST /chat/start {"want": "anyone"|"people"|"bot"|"agent", "game": false, "typing_indicator": true} (hub with --chat)
POST /chat/typing {"seat": "…", "typing": true}
POST /chat/guess {"seat": "…", "guess": "person"|"agent"}
Authorization: Bearer …. From the command line: pyrtan ask "…" --at URL, pyrtan gaps --at URL.