privateer-agent 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -9
- package/package.json +2 -2
- package/src/providers/catalog.ts +7 -3
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<h1 align="center">⚓ Privateer</h1>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<strong>A
|
|
8
|
+
<strong>A privacy-first, safe-by-default distribution of the <a href="https://pi.dev">Pi</a> coding agent — bring your own model, keep your own privacy.</strong>
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
@@ -46,8 +46,37 @@ permission gate**.
|
|
|
46
46
|
- **Privacy you can verify, not just trust.** Confidential-enclave (TEE) inference is
|
|
47
47
|
cryptographically **attested** — not a policy promise — and an **on-device PII gate**
|
|
48
48
|
warns before structured personal data ever leaves your machine for an unverified model.
|
|
49
|
-
- **
|
|
50
|
-
|
|
49
|
+
- **It's Pi underneath.** Privateer is a distribution of the [Pi](https://pi.dev) coding agent —
|
|
50
|
+
every Pi extension, skill, and command works, and Privateer's own features are just extensions
|
|
51
|
+
you can read, swap, or build on. Nothing to compile. See [Built on Pi](#built-on-pi).
|
|
52
|
+
|
|
53
|
+
## Built on Pi
|
|
54
|
+
|
|
55
|
+
Privateer is a **distribution of the [Pi](https://pi.dev) coding agent**
|
|
56
|
+
(`@earendil-works/pi-coding-agent`): Pi is the runtime, the model routing, the interactive TUI,
|
|
57
|
+
and the extension / skill / prompt discovery system — **everything that works in Pi works here.**
|
|
58
|
+
What Privateer adds is a *moat* of Pi extensions layered on top:
|
|
59
|
+
|
|
60
|
+
| Extension | What it adds |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `privateer-gate` | safe-by-default permission gate + destructive-command danger filter |
|
|
63
|
+
| `privateer-privacy` | `pi-privacy` — TEE attestation, ZDR routing, on-device PII gate — bound to the account tier resolver |
|
|
64
|
+
| `privateer-account` | `/signin` billed inference against a Privateer account (device flow) |
|
|
65
|
+
| `privateer-posture`, `privateer-tools` | live attestation shield + Privateer tool pack |
|
|
66
|
+
| `rpiv-web-tools` | private-by-default web search (self-hosted SearXNG, no WebView) |
|
|
67
|
+
| `pi-mcp-adapter`, `pi-subagents` | MCP servers · bounded parallel sub-agents |
|
|
68
|
+
|
|
69
|
+
They're ordinary Pi extensions — inspect them, replace them, or build your own alongside.
|
|
70
|
+
**Extend by discovery:** drop an extension into `~/.privateer/agent/extensions/` (move the home
|
|
71
|
+
with `PRIVATEER_HOME`), add a skill or prompt beside it, or list an npm/git package under
|
|
72
|
+
`packages` in `~/.privateer/agent/settings.json` — Pi auto-loads them on next launch, right next
|
|
73
|
+
to Privateer's own. Any extension from the Pi ecosystem loads the same way. (There's no CLI flag
|
|
74
|
+
for this — discovery is the entry point.)
|
|
75
|
+
|
|
76
|
+
**The floor you can't lower is the safety gate.** While it's loaded, its block on destructive
|
|
77
|
+
shell commands, secret exfiltration, and plan-mode escapes sits *above* every relaxation —
|
|
78
|
+
`bypass` mode, the approval allowlist, even a phone-approved remote turn can't fire them
|
|
79
|
+
silently. The moat is swappable; the floor under it holds.
|
|
51
80
|
|
|
52
81
|
## Highlights
|
|
53
82
|
|
|
@@ -126,6 +155,7 @@ export OLLAMA_BASE_URL=http://localhost:11434/v1 # local, keyless
|
|
|
126
155
|
export NEAR_AI_API_KEY=... # verifiable TEE inference (cloud.near.ai)
|
|
127
156
|
export TINFOIL_API_KEY=... # verifiable TEE inference (tinfoil.sh)
|
|
128
157
|
export VENICE_API_KEY=vapi_... # no-retention inference
|
|
158
|
+
export PRIVATEER_API_KEY=sk-priv-... # Privateer developer API (privateer.pro); or /signin instead
|
|
129
159
|
```
|
|
130
160
|
|
|
131
161
|
Pick a model with **`/model`** (browse each configured provider's live catalog) or pass one
|
|
@@ -198,14 +228,17 @@ and protected files (`.env`, shell rc files…) are guarded — the gate is neve
|
|
|
198
228
|
|
|
199
229
|
## Extend it
|
|
200
230
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
231
|
+
Everything below is a **Pi extension** loaded by discovery (see [Built on Pi](#built-on-pi)) —
|
|
232
|
+
drop your own into `~/.privateer/agent/extensions/` and it loads the same way, gated like the rest.
|
|
233
|
+
|
|
234
|
+
- **MCP servers** (`pi-mcp-adapter`) — declare them and their tools become first-class, gated
|
|
235
|
+
like the rest (local stdio, or remote HTTP with interactive OAuth).
|
|
236
|
+
- **Sub-agents** (`pi-subagents`) — delegate investigations to bounded parallel agents that run
|
|
237
|
+
under the same permission gate.
|
|
205
238
|
- **Routines** — saved tasks the daemon runs unattended; ask the agent to schedule work and
|
|
206
239
|
approve it once.
|
|
207
|
-
- **Web tools** — private-by-default web search/fetch with pluggable backends
|
|
208
|
-
SearXNG for fully private search).
|
|
240
|
+
- **Web tools** (`rpiv-web-tools`) — private-by-default web search/fetch with pluggable backends
|
|
241
|
+
(self-hosted SearXNG for fully private search).
|
|
209
242
|
|
|
210
243
|
## Develop
|
|
211
244
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "privateer-agent",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Privateer — a provider-agnostic, safe-by-default terminal coding agent with TEE/Tinfoil attestation, rebuilt on the Pi toolkit. Bring your own model across 20 providers.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"@noble/curves": "^1.9.7",
|
|
60
60
|
"@noble/hashes": "^1.7.1",
|
|
61
61
|
"pi-mcp-adapter": "^2.11.0",
|
|
62
|
-
"pi-privacy": "^0.
|
|
62
|
+
"pi-privacy": "^0.3.0",
|
|
63
63
|
"pi-subagents": "^0.34.0",
|
|
64
64
|
"picomatch": "^4.0.4",
|
|
65
65
|
"tsx": "^4.16.0",
|
package/src/providers/catalog.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
// The provider landscape — the single map of how each of privateer's
|
|
1
|
+
// The provider landscape — the single map of how each of privateer's 22 providers
|
|
2
2
|
// becomes reachable under Pi. Written after verifying (2026-07-07) that:
|
|
3
3
|
// - pi-ai ships STATIC model catalogs for its 14 built-in providers, so they're
|
|
4
4
|
// selectable once a key is present — privateer emits NO models.json entry for them;
|
|
5
|
-
// - the `pi-privacy` extension registers the
|
|
6
|
-
// venice, ollama, custom) at load — privateer emits NO entry for
|
|
5
|
+
// - the `pi-privacy` extension registers the 6 privacy providers (tinfoil, nearai,
|
|
6
|
+
// venice, ollama, custom, privateer-api) at load — privateer emits NO entry for
|
|
7
|
+
// them either;
|
|
7
8
|
// - so the ONLY provider this generator must emit is `qwen` (config-only,
|
|
8
9
|
// non-privacy, no built-in catalog), and `privateer` (the account OAuth channel)
|
|
9
10
|
// is handled in code, not config (Phase 4).
|
|
@@ -65,6 +66,9 @@ export const PROVIDERS: ProviderEntry[] = [
|
|
|
65
66
|
{ id: "tinfoil", source: "pi-privacy" },
|
|
66
67
|
{ id: "venice", source: "pi-privacy" },
|
|
67
68
|
{ id: "custom", source: "pi-privacy" },
|
|
69
|
+
// Public developer-API surface (sk-priv-… key). Registered by the pi-privacy
|
|
70
|
+
// extension like the others; distinct from the in-app `privateer` account channel.
|
|
71
|
+
{ id: "privateer-api", source: "pi-privacy" },
|
|
68
72
|
{ id: "privateer", source: "account" },
|
|
69
73
|
];
|
|
70
74
|
|