People who asked to join without an invite. Approving adds them as members.
{{with pendingRequests .Requests}}| person | reason | asked | |
|---|---|---|---|
| {{template "nostrName" $pk}} | {{with str (index $r "reason")}}{{.}}{{else}}no reason given{{end}} |
No pending requests.
{{end}} {{with decidedRequests .Requests}}Agents are members with their own keys. Each one acts under a grant you sign, and stays the author of everything it does.
{{template "alert" .Error}}| agent | scope | owner | state |
|---|---|---|---|
| {{agentLabel $a}} | {{agentScope $a}} | {{template "nostrName" (str (index $a "owner"))}} | {{agentState $a}}{{with agentSince $a}} | {{.}}{{end}} |
| No agents yet. Sign a grant below to add one. | |||
| key | |
|---|---|
| rooms | {{or (scopeList $a "rooms") "none"}} |
| repositories | {{range $i, $r := index $scope "repos"}}{{$repo := asMap $r}}{{if $i}} {{end}} {{str (index $repo "identifier")}} {{str (index $repo "level")}}, owner {{template "nostrName" (str (index $repo "owner"))}}{{else}}none{{end}} |
| wiki | {{or (str (index $scope "wiki")) "none"}} |
| sites | {{range $i, $s := index $scope "sites"}}{{$site := asMap $s}}{{if $i}} {{end}} {{str (index $site "label")}}{{with index $site "ttl"}} {{str .}} days{{end}}{{if index $site "encrypted"}} encrypted{{end}}{{else}}none{{end}} |
| kinds | {{or (scopeList $a "kinds") "profile and relay list only"}} |
| rate | {{str (index $scope "rate")}} events per minute |
| expires | |
| owner | {{template "nostrName" (str (index $a "owner"))}} |
| last event | |
| callbacks | {{range $c := callbacksFor $.Callbacks $pk}}{{$cm := asMap $c}}{{$cs := callbackState $c}}{{$cid := str (index $cm "id")}}{{str (index $cm "host")}} kinds {{callbackKinds $c}} | {{$cs}}{{with index $cm "lastDelivery"}}{{if when .}} | delivered {{end}}{{end}} {{if eq $cs "paused"}} |
{{if eq $state "paused"}}
No events from this agent yet.
{{end}}{{end}} {{$edit := agentByKey .Feed (.Query.Get "edit")}}{{$es := asMap (index (asMap $edit) "scope")}}{{if $edit}}The form holds the current grant. Signing it publishes a new kind 30392 event for the same key, which replaces the old grant at once.{{else}}The grant is a kind 30392 event signed by your key. The agent's own key signs everything it publishes.{{end}}
This private relay requires current membership. Connect a signer to sign in.
{{end}}The cards on the home page, in order. Remove what you will not use; add more from the catalog. Cards whose feature is off stay hidden.
| card | app | audience | |
|---|---|---|---|
| Loading… | |||
These actions open the configured signer and publish owner-authored Nostr records.
GRASP-08 stores private relay URLs in your encrypted kind 10318 list. The relay URLs and any list entries are encrypted to your signer with NIP-44.
| Job status is idle. |
Block transforms render fenced code as images. Choose the event kinds and languages to send to your rendering service.
{{if .CustomViews}}| name | kinds | languages | trigger | audience | state | last run | |
|---|---|---|---|---|---|---|---|
{{str (index $v "name")}} |
{{viewKinds $v}} | {{viewLanguages $v}} | {{str (index $v "trigger")}} | {{str (index $v "audience")}} | {{viewState $v}}{{with str (index $v "lastStatus")}} | {{.}}{{end}} | {{with index $v "lastRun"}}{{when .}}{{else}}never{{end}} | {{if eq (viewState $v) "paused"}} |
No custom views yet.
{{end}}| relay | {{or .Version "dev"}}{{with .Revision}} {{.}}{{end}} |
|---|---|
| scripts | {{scriptsVersion}} |
| browser tools | Needs JavaScript to report. |
Browser agents use WebMCP tools registered on every page; Chrome's Application panel lists them and their calls. In Chrome, open chrome://flags/#enable-webmcp-testing, enable WebMCP for testing and relaunch. Your usual pages and signed forms work in other browsers.
Jobs and delivery | Storage and backups
Destructive actions ask the signer. The browser never receives or submits a private key.
Every retained NIP-86 method remains callable through the signed form bridge. Dedicated tabs supply guided fields for the common ones.