Skip to content

Commit 15f1ea9

Browse files
authored
Merge branch 'main' into feat/signed-catalogue-and-pages
2 parents 76e4099 + 98be253 commit 15f1ea9

4 files changed

Lines changed: 55 additions & 3 deletions

File tree

README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,38 @@ go test -parallel 4 -count=1 ./tests/
306306

307307
---
308308

309+
## Agent skill injection (transparency)
310+
311+
The daemon runs an **open-source skill injector**
312+
([`pilot-protocol/skillinject`](https://github.com/pilot-protocol/skillinject),
313+
AGPL-3.0, registered in [`cmd/daemon/main.go`](cmd/daemon/main.go)). Every ~15
314+
minutes it keeps the core `SKILL.md` and a short "heartbeat" directive current
315+
in each detected agent tool's well-known directory (Claude Code, OpenClaw,
316+
PicoClaw, OpenHands, Hermes).
317+
318+
**Why it's on by default.** The host gives an agent default tools
319+
(`web_search`, `curl`). Pilot is a third party, and an agent only captures the
320+
overlay's value if it *reaches for Pilot first* instead of defaulting to those
321+
tools. Keeping that directive present is what makes "pilot first" the default —
322+
the same reason a person sets a third-party browser as their system default.
323+
It's a strong nudge, never a lock-in, and we hold it to a transparency bar
324+
that matches the privilege of writing into someone else's agent:
325+
326+
- **Everything injected is open source.** The injected text and skills live in
327+
[`TeoSlayer/pilot-skills`](https://github.com/TeoSlayer/pilot-skills); the
328+
injector that installs them is
329+
[`pilot-protocol/skillinject`](https://github.com/pilot-protocol/skillinject).
330+
Bytes are fetched at runtime from those public repos — nothing is embedded
331+
or hidden — and can be pinned to an Ed25519 signing key.
332+
- **Non-destructive.** It rewrites only its own marker block; operator-authored
333+
content in heartbeat files is never touched.
334+
- **Opt-out anytime.** `pilotctl skills disable all` removes everything it
335+
wrote and stops future ticks (state in `~/.pilot/config.json`); re-enable
336+
with `pilotctl skills enable all`. Inspect what it manages with
337+
`pilotctl skills status`.
338+
339+
---
340+
309341
## Documentation
310342

311343
| Document | Description |

cmd/daemon/main.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,22 @@ func main() {
222222
}
223223
d.RegisterTrustChecker(ta)
224224

225+
// skillinject is the context-injection plugin: it keeps the core
226+
// SKILL.md and per-tool heartbeat directive current in each detected
227+
// agent tool's well-known directory, so agents on this host reach for
228+
// Pilot before their host's default tools (web_search/curl). That
229+
// "pilot first" default is what makes a third-party overlay worth
230+
// running at all — like setting a third-party browser as the system
231+
// default. We register it on by default for that reason, but it is
232+
// fully transparent and reversible by design:
233+
// - Everything it injects is open source and fetched at runtime from
234+
// the public repos — the text + skills at
235+
// github.com/TeoSlayer/pilot-skills, the injector itself at
236+
// github.com/pilot-protocol/skillinject (AGPL-3.0). Nothing is
237+
// embedded or hidden.
238+
// - It only rewrites its own marker block, never operator content.
239+
// - Operators opt out anytime with `pilotctl skills disable all`
240+
// (persisted in ~/.pilot/config.json); see cmd/pilotctl/skills.go.
225241
if err := rt.Register(skillinject.NewService(skillinject.Config{})); err != nil {
226242
log.Fatalf("register skillinject: %v", err)
227243
}

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,23 @@ go 1.25.10
55
require (
66
github.com/coder/websocket v1.8.14
77
github.com/pilot-protocol/app-store v1.0.1-beta.1.0.20260609061942-8852c785a264
8-
github.com/pilot-protocol/beacon v0.2.5
8+
github.com/pilot-protocol/beacon v0.2.6
99
github.com/pilot-protocol/common v0.4.8
1010
github.com/pilot-protocol/dataexchange v0.2.0
1111
github.com/pilot-protocol/eventstream v0.2.2
1212
github.com/pilot-protocol/handshake v0.2.1
1313
github.com/pilot-protocol/nameserver v0.2.1
1414
github.com/pilot-protocol/policy v0.2.2
15-
github.com/pilot-protocol/rendezvous v0.2.4
15+
github.com/pilot-protocol/rendezvous v0.2.5-0.20260615154750-f09cf1a708b0
1616
github.com/pilot-protocol/runtime v0.3.1
1717
github.com/pilot-protocol/skillinject v0.2.2
1818
github.com/pilot-protocol/trustedagents v0.2.3
1919
github.com/pilot-protocol/updater v0.2.2-0.20260529065627-220ed5b8383f
2020
github.com/pilot-protocol/webhook v0.2.0
21+
golang.org/x/sys v0.45.0
2122
)
2223

2324
require (
2425
github.com/expr-lang/expr v1.17.8 // indirect
2526
golang.org/x/net v0.55.0 // indirect
26-
golang.org/x/sys v0.45.0 // indirect
2727
)

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ github.com/pilot-protocol/app-store v1.0.1-beta.1.0.20260609061942-8852c785a264
1010
github.com/pilot-protocol/app-store v1.0.1-beta.1.0.20260609061942-8852c785a264/go.mod h1:zoCxHYoNdj0V44OkG3Yzcye0jnwZDVUcJgAvR5Z1kwc=
1111
github.com/pilot-protocol/beacon v0.2.5 h1:5+pkSPoA35r+u4Hfrph/ZfOltOyiy8lh1sCfK5XqXKs=
1212
github.com/pilot-protocol/beacon v0.2.5/go.mod h1:I/UhEv097g1z/qtAVDZbEhf3R5tzM0Dp71vGHah52A4=
13+
github.com/pilot-protocol/beacon v0.2.6 h1:grxwaVyPRUT0W6coyjYfNkO0rpzOIrwrKn94S21DuVE=
14+
github.com/pilot-protocol/beacon v0.2.6/go.mod h1:I/UhEv097g1z/qtAVDZbEhf3R5tzM0Dp71vGHah52A4=
1315
github.com/pilot-protocol/common v0.4.8 h1:eS2Bc+XcZWJ/qhwwOZbXwIWhtNdOijuoEp716kQE+/c=
1416
github.com/pilot-protocol/common v0.4.8/go.mod h1:yrAwPXGVMbXU+SADvOCmbdXjK/wJ3uA0KshyLvRlej4=
1517
github.com/pilot-protocol/dataexchange v0.2.0 h1:ldE6AyrES1uvdnn1NBl0KZ7C+SSWNtmeHHU3CQhwSCo=
@@ -28,6 +30,8 @@ github.com/pilot-protocol/policy v0.2.2 h1:Co8sqZ4lRQfFA0Ot8l33VhsEwfiEVqcPz+kHY
2830
github.com/pilot-protocol/policy v0.2.2/go.mod h1:jzsAO71uGlRVyduPrQmS/UeqSwUpeUO/CjykHm/IfXM=
2931
github.com/pilot-protocol/rendezvous v0.2.4 h1:nxYm12RzEUA6zzNGcnDqxNcGBSIALL5uRH9zX+Q0CSg=
3032
github.com/pilot-protocol/rendezvous v0.2.4/go.mod h1:w7SC0nZCmWPyc7hxdFZ200zQVA75UoaC25MznUQXNFE=
33+
github.com/pilot-protocol/rendezvous v0.2.5-0.20260615154750-f09cf1a708b0 h1:kKeSXIEfE677+yanooStfSnneQ3dFCb22WPJbyj+yng=
34+
github.com/pilot-protocol/rendezvous v0.2.5-0.20260615154750-f09cf1a708b0/go.mod h1:Gv1BwKx5oBUZCMNpCxa9enBFa6uy9hHDSI2r28QdIrg=
3135
github.com/pilot-protocol/runtime v0.3.0 h1:OVPv7hyaAZsw5EPWtf2XQGfCqxgaM/iANPhIYOMp+0w=
3236
github.com/pilot-protocol/runtime v0.3.0/go.mod h1:GfFEIji0w7H9SSNR9Wl2q72pd2OYN3PHY9Qhcbvyrqk=
3337
github.com/pilot-protocol/runtime v0.3.1 h1:+W9ww0dZY/FgOBtCmIOV3w5L5Z4Upt/RIsrYElXZ1zs=

0 commit comments

Comments
 (0)