@passioncode-ai/passioncode 0.1.25 → 0.1.27
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/CHANGELOG.md +19 -0
- package/family.json +2 -2
- package/package.json +1 -1
- package/payload/.claude-plugin/marketplace.json +3 -3
- package/payload/manifest.json +12 -12
- package/payload/plugins/fabric-agent-adapter/.claude-plugin/plugin.json +1 -1
- package/payload/plugins/fabric-agent-adapter/skills/adapting-projects-to-fabric/SKILL.md +1 -1
- package/payload/plugins/fabric-agent-adapter/skills/building-fabric-services/SKILL.md +11 -4
- package/payload/plugins/fabric-agent-adapter/skills/creating-fabric-agents/SKILL.md +8 -1
- package/payload/plugins/observatory-log/.claude-plugin/plugin.json +1 -1
- package/payload/plugins/observatory-log/skills/explaining-changes/SKILL.md +1 -1
- package/payload/plugins/observatory-log/skills/handling-secrets/SKILL.md +47 -4
- package/payload/plugins/observatory-log/skills/tracking-resources/SKILL.md +1 -1
- package/payload/plugins/passioncode/.claude-plugin/plugin.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.27 - 2026-10-04
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- **Fabric Agent Adapter is pinned at `v0.6.3`** (it was `v0.6.2`). `building-fabric-services`
|
|
8
|
+
and `creating-fabric-agents` say that every credential an agent or service uses comes from
|
|
9
|
+
Project Observatory, by name: `use_secret.py run --vault-only` for an agent, `use_secret.py
|
|
10
|
+
serve` for a long-running service, never a `.env` or a key file beside it.
|
|
11
|
+
|
|
12
|
+
## 0.1.26 - 2026-10-04
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- **Observatory Log is pinned at `v0.15.0`** (plugin 0.15.0; it was `v0.13.0`, plugin 0.14.0),
|
|
17
|
+
the Project Observatory 0.15.0 skills. `handling-secrets` gains the header door: `use_secret.py
|
|
18
|
+
header` hands one HTTP MCP server's bearer to Claude Code's `headersHelper`, from the vault only
|
|
19
|
+
and only to the server the slot is bound to with `vault.py bind --header-for`. Agents and
|
|
20
|
+
services take every credential from Observatory by name (`use_secret.py run --vault-only`).
|
|
21
|
+
|
|
3
22
|
## 0.1.25 - 2026-10-03
|
|
4
23
|
|
|
5
24
|
### Changed
|
package/family.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"name": "fabric-agent-adapter",
|
|
9
9
|
"displayName": "Fabric Agent Adapter",
|
|
10
10
|
"repo": "passioncode-ai/fabric-agent-adapter",
|
|
11
|
-
"ref": "v0.6.
|
|
11
|
+
"ref": "v0.6.3",
|
|
12
12
|
"kind": "plugin",
|
|
13
13
|
"path": "plugins/fabric-agent-adapter",
|
|
14
14
|
"legacyPluginIds": [
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"name": "observatory-log",
|
|
23
23
|
"displayName": "Observatory Log",
|
|
24
24
|
"repo": "passioncode-ai/project-observatory-dashboard",
|
|
25
|
-
"ref": "v0.
|
|
25
|
+
"ref": "v0.15.0",
|
|
26
26
|
"kind": "plugin",
|
|
27
27
|
"path": "observatory/engine/skill/plugins/observatory-log",
|
|
28
28
|
"legacyPluginIds": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@passioncode-ai/passioncode",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.27",
|
|
4
4
|
"description": "The PassionCode.ai agent skill set \u2014 Fabric Agent Adapter, Observatory Log and the organisation's working rules \u2014 for Claude Code and every other agent on the machine, updated as one set.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"passioncode": "bin/passioncode.js"
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"name": "fabric-agent-adapter",
|
|
12
12
|
"displayName": "Fabric Agent Adapter",
|
|
13
13
|
"source": "./plugins/fabric-agent-adapter",
|
|
14
|
-
"version": "0.6.
|
|
14
|
+
"version": "0.6.3",
|
|
15
15
|
"description": "Create new Fabric-compatible agents, build them as always-alive local services with dashboards (fabric-service/0.1), and adapt existing projects to the Fabric Agent Contract through evidence-backed MCP, A2A, or local-runner provider bundles.",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "PassionCode.ai",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"name": "observatory-log",
|
|
24
24
|
"displayName": "Observatory Log",
|
|
25
25
|
"source": "./plugins/observatory-log",
|
|
26
|
-
"version": "0.
|
|
26
|
+
"version": "0.15.0",
|
|
27
27
|
"description": "Records what changed in a watched project at the end of every turn, and asks for the one thing a diff cannot contain: why.",
|
|
28
28
|
"author": {
|
|
29
29
|
"name": "PassionCode.ai",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"name": "passioncode",
|
|
36
36
|
"displayName": "PassionCode.ai",
|
|
37
37
|
"source": "./plugins/passioncode",
|
|
38
|
-
"version": "0.1.
|
|
38
|
+
"version": "0.1.27",
|
|
39
39
|
"description": "The organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
|
|
40
40
|
"author": {
|
|
41
41
|
"name": "PassionCode.ai",
|
package/payload/manifest.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"family": "passioncode",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.27",
|
|
4
4
|
"release": true,
|
|
5
5
|
"members": [
|
|
6
6
|
{
|
|
7
7
|
"name": "fabric-agent-adapter",
|
|
8
8
|
"displayName": "Fabric Agent Adapter",
|
|
9
9
|
"repo": "passioncode-ai/fabric-agent-adapter",
|
|
10
|
-
"ref": "v0.6.
|
|
11
|
-
"commit": "
|
|
12
|
-
"version": "0.6.
|
|
10
|
+
"ref": "v0.6.3",
|
|
11
|
+
"commit": "30a1148ba77fe9ed56ea98c218d10ccf2fadf084",
|
|
12
|
+
"version": "0.6.3",
|
|
13
13
|
"via": "clone of https://***@github.com/passioncode-ai/fabric-agent-adapter.git",
|
|
14
14
|
"skills": [
|
|
15
15
|
"adapting-projects-to-fabric",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"legacyMarketplaces": [
|
|
23
23
|
"fabric-agent-adapter"
|
|
24
24
|
],
|
|
25
|
-
"contentHash": "sha256:
|
|
25
|
+
"contentHash": "sha256:264191fab8632a4f720185c68f79ca74c8fba1a14e50fd2d68957a35303c9c4b",
|
|
26
26
|
"description": "Create new Fabric-compatible agents, build them as always-alive local services with dashboards (fabric-service/0.1), and adapt existing projects to the Fabric Agent Contract through evidence-backed MCP, A2A, or local-runner provider bundles.",
|
|
27
27
|
"author": {
|
|
28
28
|
"name": "PassionCode.ai",
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"name": "observatory-log",
|
|
35
35
|
"displayName": "Observatory Log",
|
|
36
36
|
"repo": "passioncode-ai/project-observatory-dashboard",
|
|
37
|
-
"ref": "v0.
|
|
38
|
-
"commit": "
|
|
39
|
-
"version": "0.
|
|
37
|
+
"ref": "v0.15.0",
|
|
38
|
+
"commit": "acca5c9d293a388cd53d3a2cbdbfabf574308bb4",
|
|
39
|
+
"version": "0.15.0",
|
|
40
40
|
"via": "clone of https://***@github.com/passioncode-ai/project-observatory-dashboard.git",
|
|
41
41
|
"skills": [
|
|
42
42
|
"explaining-changes",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"legacyMarketplaces": [
|
|
50
50
|
"observatory-log"
|
|
51
51
|
],
|
|
52
|
-
"contentHash": "sha256:
|
|
52
|
+
"contentHash": "sha256:523f50d6be43845f0ed2b5d497bac17752cbfd3333627a235ab457618cd86dd3",
|
|
53
53
|
"description": "Records what changed in a watched project at the end of every turn, and asks for the one thing a diff cannot contain: why.",
|
|
54
54
|
"author": {
|
|
55
55
|
"name": "PassionCode.ai",
|
|
@@ -61,16 +61,16 @@
|
|
|
61
61
|
"name": "passioncode",
|
|
62
62
|
"displayName": "PassionCode.ai",
|
|
63
63
|
"repo": "passioncode-ai/passioncode",
|
|
64
|
-
"ref": "v0.1.
|
|
64
|
+
"ref": "v0.1.27",
|
|
65
65
|
"commit": null,
|
|
66
|
-
"version": "0.1.
|
|
66
|
+
"version": "0.1.27",
|
|
67
67
|
"via": "this repository",
|
|
68
68
|
"skills": [
|
|
69
69
|
"working-in-passioncode"
|
|
70
70
|
],
|
|
71
71
|
"legacyPluginIds": [],
|
|
72
72
|
"legacyMarketplaces": [],
|
|
73
|
-
"contentHash": "sha256:
|
|
73
|
+
"contentHash": "sha256:91e32c96a96c8c9cecd011b75074f99e90a8df354169a892658ca15931efe434",
|
|
74
74
|
"description": "The organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
|
|
75
75
|
"author": {
|
|
76
76
|
"name": "PassionCode.ai",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "fabric-agent-adapter",
|
|
4
4
|
"displayName": "Fabric Agent Adapter",
|
|
5
5
|
"description": "Create new Fabric-compatible agents, build them as always-alive local services with dashboards (fabric-service/0.1), and adapt existing projects to the Fabric Agent Contract through evidence-backed MCP, A2A, or local-runner provider bundles.",
|
|
6
|
-
"version": "0.6.
|
|
6
|
+
"version": "0.6.3",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "PassionCode.ai",
|
|
9
9
|
"url": "https://passioncode.ai/"
|
|
@@ -5,7 +5,7 @@ license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
|
5
5
|
compatibility: Requires filesystem access and Python 3.9+. Exact schema checks additionally need git, Node.js, pnpm, and the pinned fabric-agent-contract checkout (a public repository). Works without those tools in an explicitly degraded structural-check mode.
|
|
6
6
|
metadata:
|
|
7
7
|
author: PassionCode.ai
|
|
8
|
-
version: "0.6.
|
|
8
|
+
version: "0.6.3"
|
|
9
9
|
contract-version: "0.1.0"
|
|
10
10
|
contract-commit: "2ce392291c6668598d12cd38327e24696b5ca15c"
|
|
11
11
|
---
|
|
@@ -15,7 +15,7 @@ license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
|
15
15
|
compatibility: Python 3.9+ or Node.js 20+ for the kits; the probe needs Python 3.9+. launchd steps are macOS-only (Linux services use lifecycle manager none until a systemd adapter exists). Dashboard handoff optionally uses Fabric Dashboards MCP link/host_status/open; without it, report unresolved host capability. The contract checkout is optional.
|
|
16
16
|
metadata:
|
|
17
17
|
author: PassionCode.ai
|
|
18
|
-
version: "0.6.
|
|
18
|
+
version: "0.6.3"
|
|
19
19
|
contract-version: "0.1.0"
|
|
20
20
|
extension: "fabric-service/0.1"
|
|
21
21
|
extension-commit: "2ce392291c6668598d12cd38327e24696b5ca15c"
|
|
@@ -101,8 +101,12 @@ are in [`scripts/fabric_interop.py`](scripts/fabric_interop.py) and
|
|
|
101
101
|
digest and the process start time. *(A service ran on stale code after an edit and
|
|
102
102
|
burned budget; nothing showed which build was answering.)*
|
|
103
103
|
5. **State outside code.** Data and config in `~/Library/Application Support/<id>/`,
|
|
104
|
-
logs in `~/Library/Logs/<id>/`, cache in `~/Library/Caches/<id>/`;
|
|
105
|
-
|
|
104
|
+
logs in `~/Library/Logs/<id>/`, cache in `~/Library/Caches/<id>/`; the service's own
|
|
105
|
+
access token in a 0600 file it generates (principle 6). **Every provider credential the
|
|
106
|
+
service uses comes from Project Observatory, by name** — the plist starts the service
|
|
107
|
+
with `use_secret.py serve --consumer <label> <project> <NAME>[,<NAME>] -- <command>`, which
|
|
108
|
+
reads the vault only and records the consumer so a rotation names it; never a copy of a
|
|
109
|
+
key in a `.env`, a config file or the plist. Never inside the service's own code checkout or a release directory; a
|
|
106
110
|
repository that versions the data itself is a store and is fine — declare
|
|
107
111
|
`source.repository` so the probe can tell them apart. *(Deleting a checkout left a
|
|
108
112
|
plist launchd retried every 10 s, and the data went with it.)*
|
|
@@ -254,7 +258,10 @@ things change and the kits implement each:
|
|
|
254
258
|
example is [`scripts/sample-remote-service.mjs`](scripts/sample-remote-service.mjs): it runs
|
|
255
259
|
with its own TLS or behind a platform router.
|
|
256
260
|
2. **Secrets live on the platform:** the service token and the session key (32 bytes) are
|
|
257
|
-
platform secrets, never in the repository, a URL or an argument vector.
|
|
261
|
+
platform secrets, never in the repository, a URL or an argument vector. A provider key the
|
|
262
|
+
remote service needs is issued and kept in Project Observatory, pushed to the platform, and
|
|
263
|
+
the movement recorded with `vault.py moved --at <provider>`, so the platform's copy is
|
|
264
|
+
known rather than invisible.
|
|
258
265
|
3. **Register it on the operator's computer** — the installer side, run there:
|
|
259
266
|
`registerRemote({ id, name, origin, token })` / `register_remote(...)` writes the token file
|
|
260
267
|
(0600) and the descriptor; pass the token from a file or stdin, never in argv. Public names
|
|
@@ -5,7 +5,7 @@ license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
|
5
5
|
compatibility: Requires filesystem access and Python 3.9+. Exact schema checks additionally need git, Node.js, pnpm, and the pinned fabric-agent-contract checkout (a public repository). Works without those tools in an explicitly degraded structural-check mode. Ships in one plugin with adapting-projects-to-fabric, whose scripts it reuses.
|
|
6
6
|
metadata:
|
|
7
7
|
author: PassionCode.ai
|
|
8
|
-
version: "0.6.
|
|
8
|
+
version: "0.6.3"
|
|
9
9
|
contract-version: "0.1.0"
|
|
10
10
|
contract-commit: "2ce392291c6668598d12cd38327e24696b5ca15c"
|
|
11
11
|
---
|
|
@@ -94,6 +94,13 @@ first commit:
|
|
|
94
94
|
- an `AGENTS.md` that opens with the template's *Read first* block and closes with *After work*,
|
|
95
95
|
and a `CLAUDE.md` whose first line is `@AGENTS.md`.
|
|
96
96
|
|
|
97
|
+
**Every credential the agent uses comes from Project Observatory, by name**, from its first
|
|
98
|
+
commit: the README's Configure section lists key NAMES; the agent finds them with
|
|
99
|
+
`observatory_credentials` and runs with `use_secret.py run --vault-only` (a long-running
|
|
100
|
+
service: `use_secret.py serve`), with `OBSERVATORY_VAULT_ONLY=1` in its environment. No `.env`
|
|
101
|
+
of its own, no key file beside its data, no value in code, configuration or a commit. A
|
|
102
|
+
workflow names the keys it needs in its checkpoint (`credentials`), never their values.
|
|
103
|
+
|
|
97
104
|
org-index `scripts/check_format.py` reports 0 findings for it before it is called done. **An agent
|
|
98
105
|
someone builds for themselves is not a PassionCode.ai repository:** its licence is its owner's
|
|
99
106
|
choice, nothing about it is published or listed by the organization, and none of these files is
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "observatory-log",
|
|
4
4
|
"displayName": "Observatory Log",
|
|
5
5
|
"description": "Records what changed in a watched project at the end of every turn, and asks for the one thing a diff cannot contain: why.",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.15.0",
|
|
7
7
|
"license": "AGPL-3.0-only OR LicenseRef-PassionCode-Commercial",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "PassionCode.ai",
|
|
@@ -15,7 +15,7 @@ description: >-
|
|
|
15
15
|
decision with different evidence.
|
|
16
16
|
license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
17
17
|
metadata:
|
|
18
|
-
version: "0.
|
|
18
|
+
version: "0.15.0"
|
|
19
19
|
compatibility: >-
|
|
20
20
|
Requires an initialized full Project Observatory installation to persist
|
|
21
21
|
records. Uses its MCP server when available in the current host; the bundled
|
|
@@ -3,13 +3,14 @@ name: handling-secrets
|
|
|
3
3
|
description: >-
|
|
4
4
|
Use when an agent needs to store, use, rotate or record exposure of a project's
|
|
5
5
|
credentials through Project Observatory: "use a secret", "rotate a key",
|
|
6
|
-
"record a leak", «используй ключ», «ротируй ключ»,
|
|
6
|
+
"record a leak", "give an agent its keys", «используй ключ», «ротируй ключ»,
|
|
7
|
+
«запиши утечку», «ключи для агента».
|
|
7
8
|
Keeps credential values out of prompts and command arguments, uses named slots,
|
|
8
9
|
and records changes without copying values into reports. NOT for granting
|
|
9
10
|
provider permissions or choosing a project's authentication architecture.
|
|
10
11
|
license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
11
12
|
metadata:
|
|
12
|
-
version: "0.
|
|
13
|
+
version: "0.15.0"
|
|
13
14
|
compatibility: >-
|
|
14
15
|
Requires an initialized full Project Observatory installation, Python 3.11+
|
|
15
16
|
and local shell access on macOS or Linux. Provider operations additionally
|
|
@@ -29,7 +30,7 @@ names. Never ask the user to paste a credential into the conversation.
|
|
|
29
30
|
2. Select the user's initialized `OBSERVATORY_HOME`. Run
|
|
30
31
|
`project-observatory full doctor`. A missing workspace
|
|
31
32
|
needs the documented onboarding before secret operations.
|
|
32
|
-
3. Run `"$OBSERVATORY_PYTHON" "$OBSERVATORY_ROOT/tools/skill_check.py" handling-secrets 0.
|
|
33
|
+
3. Run `"$OBSERVATORY_PYTHON" "$OBSERVATORY_ROOT/tools/skill_check.py" handling-secrets 0.15.0`
|
|
33
34
|
(`full agent install` records that interpreter; the stock macOS `python3` is too old).
|
|
34
35
|
If stale, read the installed skill once and follow its compatible commands.
|
|
35
36
|
Do not turn an unavailable version check into a retry loop.
|
|
@@ -50,8 +51,10 @@ for it. A name or note shaped like a credential is refused, never stored.
|
|
|
50
51
|
|---|---|
|
|
51
52
|
| Store a credential supplied locally | `vault.py put PROJECT ENV NAME`, value on stdin |
|
|
52
53
|
| List slots | `vault.py list PROJECT ENV` |
|
|
53
|
-
| Run a command using a slot | `use_secret.py run [--env ENV] PROJECT NAME -- COMMAND ARGUMENTS` (flags before PROJECT) |
|
|
54
|
+
| Run a command using a slot | `use_secret.py run [--env ENV] [--vault-only] PROJECT NAME -- COMMAND ARGUMENTS` (flags before PROJECT) |
|
|
54
55
|
| Receive a value from another local command | `use_secret.py pipe NAME -- COMMAND ARGUMENTS` |
|
|
56
|
+
| Bind a slot to the one MCP server allowed to receive it as a header (the operator, once) | `vault.py bind PROJECT ENV NAME --header-for https://HOST[:PORT]` (a bare host means https); `--clear` removes it; both are journalled |
|
|
57
|
+
| Give an HTTP MCP server its bearer through Claude Code's `headersHelper` | `use_secret.py header [--env ENV] [--name Authorization] [--scheme Bearer] PROJECT NAME`, written into the server's `headersHelper` entry, never run by hand |
|
|
55
58
|
| Populate a project's ignored environment file | `vault.py inject PROJECT ENV DIRECTORY` |
|
|
56
59
|
| Record an exposure | `vault.py leak PROJECT ENV NAME --where "location and evidence, no value"` |
|
|
57
60
|
| Replace a stored value | `vault.py rotate PROJECT ENV NAME`, replacement on stdin |
|
|
@@ -77,10 +80,50 @@ not a sandbox: a child process can encode a value, transmit it, or write it to
|
|
|
77
80
|
another file. Only run the command authorized by the task. Do not claim this
|
|
78
81
|
filter prevents every leak.
|
|
79
82
|
|
|
83
|
+
**The header door prints a value, so it serves only Claude Code.** `use_secret.py
|
|
84
|
+
header` writes one JSON object (`{"Authorization": "Bearer …"}`) for a
|
|
85
|
+
`headersHelper`, which Claude Code merges into the MCP request rather than the
|
|
86
|
+
conversation. It reads the vault only (never an env file or the environment), and
|
|
87
|
+
refuses unless stdout is a program, `CLAUDE_CODE_MCP_SERVER_URL` names the scheme,
|
|
88
|
+
host and port the slot is bound to, and the value has no control character. Never
|
|
89
|
+
run it yourself, pipe it, or set `CLAUDE_CODE_MCP_SERVER_URL` to make it answer:
|
|
90
|
+
that prints the value into your transcript. Each call is audited. Binding is the
|
|
91
|
+
operator's decision; ask for it, do not run `bind` to make a call succeed.
|
|
92
|
+
|
|
80
93
|
**Stdin carries one thing.** Never pipe a secret into `python3 -`, `node -` or
|
|
81
94
|
`sh -s`, or combine a secret pipe with a heredoc program. A program goes in a
|
|
82
95
|
file; the secret goes through the named runner. A parse error can echo input.
|
|
83
96
|
|
|
97
|
+
## Building an agent or a service
|
|
98
|
+
|
|
99
|
+
**Every credential an agent or a service uses comes from Project Observatory, by
|
|
100
|
+
name.** That holds for a one-shot agent, a long-running agent service and code an
|
|
101
|
+
agent writes for one. Concretely:
|
|
102
|
+
|
|
103
|
+
- **Issue or store it here.** A provider door issues straight into a slot; a value
|
|
104
|
+
the user has goes in with `vault.py put PROJECT ENV NAME` (value on stdin).
|
|
105
|
+
- **Discover it by name.** `observatory_credentials` (MCP) or `use_secret.py names
|
|
106
|
+
PROJECT` list what exists; neither returns a value.
|
|
107
|
+
- **Inject it at run time, from the vault only.** A command: `use_secret.py run
|
|
108
|
+
--vault-only [--env ENV] PROJECT NAME -- COMMAND`. A long-running service (a launchd
|
|
109
|
+
job): `use_secret.py serve [--env ENV] --consumer LABEL PROJECT NAME[,NAME] -- COMMAND` in
|
|
110
|
+
its plist — it replaces itself with the service and records the consumer, so `vault.py
|
|
111
|
+
rotate` names the services to restart. Set `OBSERVATORY_VAULT_ONLY=1` in an agent's
|
|
112
|
+
environment so every command it runs refuses a project's `.env` fallback.
|
|
113
|
+
- **No copies.** No `.env` of the agent's own, no key file beside its data, no value
|
|
114
|
+
in code, configuration, a commit, a prompt, a log or agent memory. A remote
|
|
115
|
+
platform's copy is recorded with `vault.py moved PROJECT ENV NAME --at PROVIDER`.
|
|
116
|
+
- **Declare what a workflow needs.** A checkpoint carries `credentials: [{project,
|
|
117
|
+
env, name, purpose}]` — names only, a value is refused. A handoff and its
|
|
118
|
+
acceptance report each one as `vault`, `env-only` (works, and breaks this rule)
|
|
119
|
+
or `missing`, with the command to use or store it, and `credentialsMissing` stops
|
|
120
|
+
the next executor before the step that would fail.
|
|
121
|
+
|
|
122
|
+
A value written into agent memory by mistake is replaced on the way in by a
|
|
123
|
+
marker that names its slot (`[redacted:vault:PROJECT/ENV/NAME]`); treat that as an
|
|
124
|
+
exposure and record it with `vault.py leak`. The design is
|
|
125
|
+
[AGENT-SECRETS.md](https://github.com/passioncode-ai/project-observatory-dashboard/blob/main/docs/design/AGENT-SECRETS.md).
|
|
126
|
+
|
|
84
127
|
## Provider integrations
|
|
85
128
|
|
|
86
129
|
Cloudflare and OpenRouter have separate tools, `cloudflare.py` and
|
|
@@ -15,7 +15,7 @@ description: >-
|
|
|
15
15
|
the repository.
|
|
16
16
|
license: AGPL-3.0-only OR LicenseRef-PassionCode-Commercial
|
|
17
17
|
metadata:
|
|
18
|
-
version: "0.
|
|
18
|
+
version: "0.15.0"
|
|
19
19
|
compatibility: >-
|
|
20
20
|
Requires a full Project Observatory installation with organizations.json
|
|
21
21
|
configured; the observatory MCP server or its local CLI. Creating the resource
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "passioncode",
|
|
4
4
|
"displayName": "PassionCode.ai",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.27",
|
|
6
6
|
"description": "The organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check at session start that keeps the PassionCode.ai skill set current.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "PassionCode.ai",
|