{"id":13638448,"url":"https://github.com/sigilante/emissary","last_synced_at":"2026-02-22T20:05:24.389Z","repository":{"id":198779348,"uuid":"701525100","full_name":"sigilante/emissary","owner":"sigilante","description":"%emissary allows a star to designate a planet as its representative.","archived":false,"fork":false,"pushed_at":"2024-10-29T20:19:10.000Z","size":455,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-27T09:40:01.587Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"hoon","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sigilante.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-06T20:38:26.000Z","updated_at":"2025-10-11T21:42:59.000Z","dependencies_parsed_at":"2023-10-12T05:44:26.794Z","dependency_job_id":"0ea41fff-a93a-4065-a39b-2b8c54467e94","html_url":"https://github.com/sigilante/emissary","commit_stats":null,"previous_names":["sigilante/emissary"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sigilante/emissary","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sigilante%2Femissary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sigilante%2Femissary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sigilante%2Femissary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sigilante%2Femissary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sigilante","download_url":"https://codeload.github.com/sigilante/emissary/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sigilante%2Femissary/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29725302,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T19:57:12.410Z","status":"ssl_error","status_checked_at":"2026-02-22T19:54:50.710Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:00:46.019Z","updated_at":"2026-02-22T20:05:24.360Z","avatar_url":"https://github.com/sigilante.png","language":"hoon","funding_links":[],"categories":["Applications"],"sub_categories":[],"readme":"#   `%emissary`\n\n**Status ~2024.10.29.  `%emissary` works for most applications but has occasional connectivity bugs via remote scry that have proven difficult to diagnose.**\n\n`%emissary` allows a running star to designate a planet as its representative.  (This is tied to operation not merely to ownership.)  The app is served at `/app/emissary`.\n\n`%emissary` allows app developers to permit delegate planets to exercise star-related powers and privileges.  It can be used for arrangements beyond this, however.\n\n![](https://raw.githubusercontent.com/sigilante/emissary/master/img/emissary-icon.png)\n\nThere are three roles one can play with respect to `%emissary`:\n\n1. **Patron**.  A point (typically a point on a tier heavier in the address space, such as a galaxy or star) will designate a delegate (commonly a star or planet).  A patron exposes a public attestation of the delegation to remote scry.\n2.  **Delegate**.  A point (typically a point lighter in the address space, such as a star or planet) will act as a delegae of a patron (commonly a galaxy or star).  A delegate exposes a public attestaion of the delegation to remote scry.\n3.  **Observer**.  A third-party app or point wishes to verify whether two points are in a patronage relationship.  This observer must periodically remote scry **both** points for agreement.\n\n#### Prior Art\n\n- [`~hanfel-dovned/bless`](https://github.com/hanfel-dovned/Bless)\n- [`~paldev/pals`](https://github.com/fang-/suite/)\n\nSpecial thanks to ~paldev for `/lib/rudder` and to ~midden-fabler for `%ahoy` (code from which was coopted here for breach detection).\n\n`%emissary` is available under the MIT License.\n\n\n##  Usage\n\n### Installation\n\nInstall over the wire from ~magbel.\n\n```hoon\n|install ~magbel %emissary\n```\n\nInstall from source by cloning this repository then copying the contents of the `desk/` directory into your ship as usual.\n\n```sh\ngit clone https://github.com/sigilante/emissary.git\nyes | cp -r emissary/desk/* zod/emissary\n```\n\n### Patron\n\nThe patron is responsible to send a request to another point for \nthat point to act as its delegate.\n\nDelegation may be managed through the patron portal online or \nusing CLI generators:\n\n```hoon\n:emissary|designate ~sampel-palnet\n:emissary|revoke ~sampel-palnet\n```\n\nServed at `/app/emissary/patron`.\n\n![](./img/screenshot-patron.png)\n\n### Delegate\n\nThe delegate-designee may review and either accept or reject \nrequests from other points to serve as their delegate.\n\nDelegation may be managed through the delegate portal online or \nusing CLI generators:\n\n```hoon\n:emissary|accept ~sampel\n:emissary|reject ~sampel\n```\n\nServed at `/app/emissary/delegate`.\n\n![](./img/screenshot-delegate.png)\n\n### Observer\n\nAn observer may query whether a point has any delegates or any patrons.\n\nServed at `/app/emissary/observer`.\n\n#### Local Scries\n\n```hoon\n:: Get set of all confirmed delegates.\n.^((set @p) %gy /=emissary=/delegates)\n:: Get set of all pending outgoing requests.\n.^((set @p) %gy /=emissary=/outgoing)\n:: Get set of all pending incoming requests.\n.^((set @p) %gy /=emissary=/incoming)\n:: Get set of all confirmed patrons.\n.^((set @p) %gy /=emissary=/patrons)\n\n:: Check status of single delegate claim.\n.^(? %gx /=emissary=/delegate/~sampel-palnet/emissary-demand)\n:: Check status of single patron claim.\n.^(? %gx /=emissary=/patron/~sampel-palnet/emissary-demand)\n```\n\n#### Remote Scries\n\nThe following scry endpoints are bound (with appropriate revision\nnumber and the same types as above):\n\n```hoon\n:: Get set of all confirmed delegates.\n/g/x/0/emissary//delegates\n:: Get set of all pending outgoing requests.\n/g/x/0/emissary//outgoing\n:: Get set of all pending incoming requests.\n/g/x/0/emissary//incoming\n:: Get set of all confirmed patrons.\n/g/x/0/emissary//patrons\n\n:: Check status of single delegate claim.\n/g/x/0/emissary//delegate/~sampel-palnet\n:: Check status of single patron claim.\n/g/x/0/emissary//patron/~sampel-palnet\n```\n\nYou can request one of these values at the current time using a \n`%keen` task (without the double `//`):\n\n```hoon\n[%pass /emissary/fine %arvo %a %keen ~sampel-palnet /g/x/0/emissary/delegate/~sampel]\n```\n\nIf the target ship has participated in `%emissary`, then that task\nwill trigger the return of a `%tune` gift of the form:\n\n```hoon\n[%tune [~sampel-palnet /emissary/fine] `roar]\n```\n\nThe `+$roar` will contain the remote scry path and the value in \nits head.  (The tail is the signature.)  That head:\n\n```hoon\n[/g/x/0/emissary/delegate/~sampel [~ %.y]]\n```\n\nYou can (locally) check currently bound scry paths thus:\n\n```hoon\n\u003e .^(* %gx /=emissary=//patron/~zod)\n0\n\n\u003e ;;([%patron ?] .^(* %gx /=emissary=//patron/~zod))\n[%patron %.n]\n\n\u003e .^((set @p) %gy /=emissary=/incoming)\n{~zod}\n\n\u003e .^((list path) %gt /=emissary=//patron)\n~[/patron/~zod]\n\n\u003e .^([%ud @ud] %gw /=emissary=//patrons)\n[%ud 11]\n```\n\nA third-party agent should be careful to use the latest revision \nof the delegation.  It remains to decide what is a good interval \nfor this attestation to remain valid (i.e. if a star is taken \noffline).  We also need to produce a library core to facilitate \nchecking both points easily.\n\n\n##  Code\n\n### `/sur/emissary`\n\nThe major data structures include:\n\n- `+$  trigger` for a patron to decide about a delegate.\n- `+$  request` for a parton to send to a delegate.\n- `+$  decide` for a delegate to decide about a patron.\n- `+$  response` for a delegate to reply to a patron.\n- `+$  demand` represents responses to scries (local and remote).\n\nCanonically, `trigger` → `request` → `decide` → `response`.\n\nYou may use the `/mar/emissary/demand` file to properly process\na response to a marked scry.\n\n### `/gen/emissary/*`\n\n- `+accept` for a delegate to accept a patron.\n- `+designate` for a patron to request a delegate.\n- `+reject` for a delegate to refuse a patron.\n- `+revoke` for a patron to unrequest a delegate.\n\n### `/app/emissary/webui/*`\n\n`%emissary` uses `/lib/rudder` to present its browser interface.\n\n\n##  Changelog\n\n- `[1 0 0]` initial release, local scry only\n- `[1 1 0]` add support for remote scry; reorganize actions; adjust scry paths; add observer page\n- `[1 1 1]` adjust CSS\n- `[1 2 0]` hotfix remote scry on livenet; rework query data structure\n- `[1 3 0]` tombstone stale remote scry endpoints\n- `[1 4 0]` remove patrons and delegates on breach notification\n- `[1 4 1]` bump to 411 K; modify remote scry task signatures\n- `[1 4 2]` modify remote scries for 411K\n\n### Planned Work\n\n- add observer library\n- add QR code status check\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsigilante%2Femissary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsigilante%2Femissary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsigilante%2Femissary/lists"}