pi-rngit-work-document-skill
Pi skill for creating and updating rngit work documents over the Reticulum mesh, built on reticulum-js.
Package details
Install pi-rngit-work-document-skill from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-rngit-work-document-skill- Package
pi-rngit-work-document-skill- Version
0.4.0- Published
- Jul 23, 2026
- Downloads
- 449/mo · 449/wk
- Author
- bergie
- License
- EUPL-1.2
- Types
- skill
- Size
- 48.2 KB
- Dependencies
- 3 dependencies · 0 peers
Pi manifest JSON
{
"skills": [
"./skills"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-rngit-work-document-skill
A Pi skill (also usable as a plain Node library) for creating
and updating rngit work documents over the Reticulum mesh — without the
interactive editor that the rngit work CLI requires.
It speaks the exact same /mgmt/work request/response protocol as the Python
rngit work tooling (see RNS/Utilities/rngit/server.py).
Built on reticulum-js.
What it does
| Operation | Permission needed | Notes |
|---|---|---|
list |
read | active (default) / completed / proposed / all |
view |
read | document body + update history |
create |
write + interact | lands in active, signed by your identity |
propose |
propose | lands in proposed |
edit |
write + interact | only the original author |
update |
interact | adds a signed update (comment) |
complete |
write + interact | moves a doc to completed |
activate |
write + interact | reactivates a doc into active |
Install as a Pi skill
pi install npm:pi-rngit-work-document-skill
# or from a local checkout:
pi install ./packages/pi-rngit-work-document-skill
Configuration
The client connects to a local rnsd by default and needs to know which rngit
node/repository to talk to.
Target discovery
The target rns://<hash>/<group>/<repo> is resolved automatically, in order:
- Auto-discovery from project files in the current directory:
- a
rns://git remote in.git/config(set bygit clone rns://...), then - a
package.jsonfield (rngit,rngit.url,reticulum.rngit, or anrns://repository/repository.url), then - the first
rns://URL inAGENTS.md,README.md, orCONTRIBUTING.md.
- a
- The
RNGIT_URL/RNGIT_TARGETenv var, which overrides discovery.
Environment variables
| Variable | Meaning | Default |
|---|---|---|
RNGIT_TARGET_HASH + RNGIT_GROUP + RNGIT_REPO |
alternative to RNGIT_URL |
— |
RNS_HOST / RNS_PORT |
local rnsd TCP interface | 127.0.0.1:42424 |
RNGIT_IDENTITY |
path to the client identity key | ~/.pi-rngit-work/identity.key |
RNGIT_PATH_TIMEOUT_MS |
time to learn the remote identity | 30000 |
RNGIT_REQUEST_TIMEOUT_MS |
per-request response timeout | 300000 |
Bootstrapping permissions
Pi keeps its own identity (separate from the human's rngit client
identity), so the node admin can grant different permissions to humans and
machines. The identity key is generated on first use; print its hash (no network)
and hand it to the admin:
node skills/rngit-work/scripts/work.js identity
The admin then grants that hash permissions on the rngit server, e.g. in
~/.rngit/config:
[access]
public = r:all, w:<pi-hash>, i:<pi-hash>
…or per repository in a <repo>.allowed file. Flags: r=read, w=write,
i=interact, p=propose, adm=admin. create/edit/update need w+i;
propose needs p; list/view need r.
CLI usage
work.js list [--scope active|completed|proposed|all]
work.js view <id> [--scope ...]
work.js create <title...> --file <path|-> [--propose]
work.js edit <id> --file <path|-> [--title <t>] [--scope ...]
work.js update <id> --file <path|-> [--scope ...]
work.js complete <id>
work.js activate <id>
work.js identity # print pi's identity hash (no network)
Content is read with --file <path>, or from stdin via --file -. Add --json
for structured output. Flags --url, --host, --port, --identity override
the environment for a single run.
echo "# Heading\nBody text" | node scripts/work.js create "My first doc" --file -
node scripts/work.js list --scope all
As a library
import { WorkClient, loadConfig } from "pi-rngit-work-document-skill";
const client = new WorkClient(loadConfig());
await client.connect();
const created = await client.create("Plan something", "# Plan\nLet's …");
console.log(`Created #${created.id}`);
await client.update(created.id, "Update: started on this.");
console.log(await client.view(created.id));
await client.close();
Protocol notes
- Destination aspect:
git.repositories; request path:/mgmt/work. - Requests are msgpack maps keyed by the integer
0(IDX_REPOSITORY) plus string fields. A plain JS object would coerce key0to"0"and be rejected, so the client builds payloads as aMap. - Responses are a status byte (
0= OK) followed by a msgpack payload. create/propose/editinclude a 64-byte Ed25519 signature over the content.
License
EUPL-1.2