Agent skill · Audited from source
nostr-vpn
skill · mmalmi/nostr-vpnMIT licenceAudited 28 Oct 2026 · source f7bc0cde64aa
Is it safe? Yes — SAFE, grade B (89/100). We read this skill's source at commit f7bc0cde64aa and found no filesystem, network or shell access and no hard-coded secrets. What it does: Connect an authorized machine to a Nostr VPN private mesh, review device join requests, and verify access with the nvpn CLI. Use for account-free private networking between agent hosts, people, and servers.
Cite
Cite this page
ModelsAtlas. “nostr-vpn (mmalmi/nostr-vpn)”. Retrieved 28 Oct 2026. https://modelsatlas.com/skills/mmalmi/nostr-vpn
Trust audit
Audit 0.4.1 · source read 28 Oct 2026
SAFE means nothing in the source contradicts what the skill says it does. Grade B is shared by 13,985 of 14,816 audited skills.
What the source does
- FilesystemNone observedNo reads or writes in the source
- NetworkNone observedNo outbound calls in the source
- ShellNone observedNo commands run in the source
- DependenciesPinnedNothing floats
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 0 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | NA | 0 |
L2 Instructions | Prompt injection, authority framing, hidden directives | PASS | 0 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (0)
No findings at any severity. We re-audit when the source changes.
Audit 0.4.1 · source sha f7bc0cde64aa · 28 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publishermmalmi GitHub userOwner of the repository this skill is read from
- Source foldermmalmi/nostr-vpn/plugins/nostr-vpn/skills/nostr-vpnThe exact folder we audited
- LicenceMITAs the repository states it
- Commit pinned for this verdictf7bc0cde64aaA new audit runs when the source changes
- Repository statusNot archivedPushed today
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Connect an authorized machine to a Nostr VPN private mesh, review device join requests, and verify access with the nvpn CLI. Use for account-free private networking between agent hosts, people, and servers.
--- name: nostr-vpn description: Connect an authorized machine to a Nostr VPN private mesh, review device join requests, and verify access with the nvpn CLI. Use for account-free private networking between agent hosts, people, and servers. --- # Nostr VPN Use the `nvpn` CLI for private networking without a VPN provider account. Every device retains its own identity; network membership still needs an administrator's approval. This workflow does not require paid exits. ## Establish the execution context - Run `nvpn --version`, `nvpn join-requests --help`, and `nvpn join-request --help`. CLI approval and JSON join-request output are currently source-only and have not yet shipped in a release. Install a matching binary from https://github.com/mmalmi/nostr-vpn/releases/latest or use `cargo install nvpn`. Check the release's supported architecture. - Choose an explicit, persistent absolute config path and pass `--config` on every command, including elevated ones. Reuse a designated profile; never overwrite an existing one with `init --force`. - A Linux tunnel needs network privileges, `/dev/net/tun`, and `iproute2`; containers need `NET_ADMIN` and the TUN device. macOS/Windows need elevated platform networking setup. A cloud terminal or plugin does not confer this access. If unavailable, report that specific limitation and use an authorized machine with those capabilities. - Persist config and key sidecars privately. Give separate devices separate keys. Do not print private keys, copy the admin identity to a joining device, or put join links into public output. ## Create or join On a new admin host, run `nvpn init --config "$NVPN_CONFIG"`, then use the printed public `nostr_pubkey` with `nvpn set --config "$NVPN_CONFIG" --device "$ADMIN_DEVICE_ID"`. Start it with `nvpn start --config "$NVPN_CONFIG" --daemon --connect`. On the joining host, initialize its own config and start its daemon the same way, then run `nvpn join-request --config "$NVPN_CONFIG" --json`. The `join_request` field contains the link to share with the intended admin through the user's selected channel. JSON output returns immediately and does not resume a paused daemon. Keep the daemon connected; obtain a fresh link if a macOS/Linux joining daemon restarts. On the admin host, save the received link in a private file and run: ```sh nvpn join-requests inspect --request-file "$REQUEST_FILE" --json ``` Inspection is read-only. Check the returned device ID with the intended joiner; the supplied name alone is not proof. When admission of that device to the config's active network is authorized, run: ```sh nvpn join-requests approve --config "$NVPN_CONFIG" \ --request-file "$REQUEST_FILE" --json ``` This signs the roster, queues delivery, and resumes an already-running paused admin daemon. If it is stopped, start it. `delivery: queued` is not a delivery receipt. Keep both daemons connected until the joiner receives approval. For inbound manual-join requests, use `nvpn join-requests list --config "$NVPN_CONFIG" --json`, then approve exactly the selected pending ID with `join-requests approve --device "$DEVICE_ID"` and the same config. Shared links need not appear in that list. If the installed CLI lacks `join-requests` or `join-request --json`, use the interactive `join-request` and the native admin app's **Devices → Add Join Request**, or build current source with `cargo install --locked --path crates/nostr-vpn-cli` from its checkout. Do not substitute private-key sharing or manual signed-roster edits. ## Verify the requested result Run `nvpn status --config "$NVPN_CONFIG" --json`. Interpret readiness only when `status_source` is `daemon`; config-only readiness is unknown. Use `nvpn ip --config "$NVPN_CONFIG" --peer --json` and `nvpn ping --config "$NVPN_CONFIG" "$PEER_TUNNEL_IP"`, then access the actual service the user requested using its normal authentication. Report queued approval, mesh reachability, DNS, and service access separately when they differ. Avoid changing default routes, selecting paid exits, or spending funds unless that is part of the user's request. Stop only a daemon started for a temporary task with `nvpn stop --config "$NVPN_CONFIG"`; preserve existing services. Detailed guide: https://github.com/mmalmi/nostr-vpn/blob/master/docs/agents.md
Excerpt, first 4,340 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit f7bc0cd
git clone https://github.com/mmalmi/nostr-vpn git -C nostr-vpn checkout f7bc0cde64aa
The author documents no install command, so this uses the repository directly. Our verdict covers commit f7bc0cde64aa only.
Works in
The author has not said which agents this skill supports, and we have not tested it in any.
Audit history
Every audit, every source change
- ✓SAFE B 89 / 100
first audit · source
f7bc0cde64aa
README badge
For maintainers · shows the latest audit
[](https://modelsatlas.com/skills/mmalmi/nostr-vpn/)
The badge shows our verdict and grade for this skill, and links back to this page. It changes when the audit does.
Similar skills
dietrichgebert/ponytail
Lazy senior dev mode: the smallest change that fully solves the task, and a reply a busy human understands in one read. Use on any coding task (writing, fixing, refactoring, reviewing, choosing dependencies) and when…
ComposioHQ/awesome-claude-skills
Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.
ComposioHQ/awesome-claude-skills
Automate 2chat tasks via Rube MCP (Composio). Always search tools first for current schemas.
ComposioHQ/awesome-claude-skills
Automate Ably tasks via Rube MCP (Composio). Always search tools first for current schemas.
ComposioHQ/awesome-claude-skills
Automate Abstract tasks via Rube MCP (Composio). Always search tools first for current schemas.
ComposioHQ/awesome-claude-skills
Automate Abuselpdb tasks via Rube MCP (Composio). Always search tools first for current schemas.
Add this badge to your README
[](https://modelsatlas.com/skills/mmalmi/nostr-vpn/)
<a href="https://modelsatlas.com/skills/mmalmi/nostr-vpn/"><img src="https://modelsatlas.com/skills/mmalmi/nostr-vpn/badge.svg" alt="ModelsAtlas: SAFE B"></a>
Questions about nostr-vpn
What does the nostr-vpn skill do?
Is nostr-vpn safe to install?
What can nostr-vpn access on my machine?
What do I need installed to use nostr-vpn?
How current is this page?
Sources
- github.com/mmalmi/nostr-vpn/tree/master/plugins/nostr-vpn/skills — the audited source at commit f7bc0cde64aa and every finding aboveObserved · 28 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the nostr-vpn skill do?
- Is nostr-vpn safe to install?
- What can nostr-vpn access on my machine?