@jarel/myskills 0.1.0-beta.2 → 0.1.0-beta.20
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/LICENSE +202 -0
- package/README.md +721 -16
- package/dist/index.js +42015 -16335
- package/package.json +8 -5
package/README.md
CHANGED
|
@@ -25,21 +25,61 @@ Responsibilities:
|
|
|
25
25
|
- install/export/update/rollback packages
|
|
26
26
|
- submit drafts
|
|
27
27
|
- support maintainer/admin workflows through role-gated API calls
|
|
28
|
+
- enroll a personal Codex workspace and execute approved updates with an explicit companion command
|
|
29
|
+
- inspect an explicitly selected local Codex profile with a read-only metadata observation or health report
|
|
30
|
+
- enroll global and project Codex and Claude skill directories as separate read-only inventory scopes
|
|
31
|
+
- create a dry-run-only work/team bootstrap plan from explicit approved roots and skill selectors
|
|
28
32
|
|
|
29
33
|
CLI tokens should be stored in the platform secret store where possible.
|
|
30
34
|
|
|
31
35
|
## Current Slice
|
|
32
36
|
|
|
37
|
+
This document describes the `0.1.0-beta.20` source candidate, including resumable browser login, named
|
|
38
|
+
CLI configuration profiles and global/project inventory scopes. Source,
|
|
39
|
+
GitHub releases, npm publication, and hosted deployment are separate states;
|
|
40
|
+
see [release verification](../../docs/RELEASE.md) for their checks. Historical
|
|
41
|
+
[beta.7 delivery evidence](../../docs/BETA7_RELEASE_DELIVERY.md) records that
|
|
42
|
+
release only. The API and web expose their deployed version and commit at
|
|
43
|
+
`/version.json`.
|
|
44
|
+
|
|
45
|
+
### Beta.3 breaking security changes
|
|
46
|
+
|
|
47
|
+
Beta.3 tightens the API boundary for team and sharing mutations. Team
|
|
48
|
+
creation, team-owner invitation/member lifecycle changes, and
|
|
49
|
+
sharing expansions to team or organization scope require an interactive
|
|
50
|
+
MFA-verified session. Privileged sharing reads/writes and the deprecated
|
|
51
|
+
`skills edit --visibility` alias use the same session/MFA boundary. API tokens
|
|
52
|
+
remain useful for scoped reads, but they cannot perform these mutations.
|
|
53
|
+
|
|
54
|
+
Migration before upgrading to beta.3: enroll TOTP through the API's
|
|
55
|
+
`POST /v1/auth/mfa/totp/enroll` and `POST /v1/auth/mfa/totp/confirm` routes
|
|
56
|
+
with password reauthentication, save the one-time recovery codes, then run
|
|
57
|
+
`myskills login` and complete the `POST /v1/auth/mfa/verify` challenge. Move
|
|
58
|
+
mutation automation to an explicitly managed session; keep API-token
|
|
59
|
+
automation read-only. Invitation acceptance remains session-only where the API
|
|
60
|
+
route permits it.
|
|
61
|
+
|
|
62
|
+
For install guidance, use the generated `myskills install ...` or
|
|
63
|
+
`myskills export ... --output ...` command. The corresponding MCP tool no longer
|
|
64
|
+
returns `apiBundleEndpoint` or a bundle URL, so clients must not construct one;
|
|
65
|
+
the CLI's authenticated export/install path remains the replacement flow.
|
|
66
|
+
Generated commands do not embed an API URL or bearer token; configure the CLI
|
|
67
|
+
with `myskills config set api-url ...` or `MYSKILLS_API_URL`, then authenticate
|
|
68
|
+
separately.
|
|
69
|
+
|
|
33
70
|
Implemented commands:
|
|
34
71
|
|
|
35
72
|
```text
|
|
36
73
|
myskills version
|
|
37
74
|
myskills --version
|
|
75
|
+
myskills init <name> [--output <dir>] [--title <text>] [--summary <text>] [--license <text>] [--json]
|
|
38
76
|
myskills validate --path <file-directory-or-zip>
|
|
39
77
|
myskills scan --path <file-directory-or-zip>
|
|
40
|
-
myskills
|
|
41
|
-
myskills
|
|
42
|
-
myskills
|
|
78
|
+
myskills package --path <directory> --output <file.zip> [--json]
|
|
79
|
+
myskills search [query] [--limit <1-100>] [--cursor <cursor>] [--api-url <url>]
|
|
80
|
+
myskills info <skill-slug> [--version <exact-version>] [--api-url <url>]
|
|
81
|
+
myskills login [--api-url <url>] [--method <password|api-key|browser>] [--email <email>]
|
|
82
|
+
myskills login --method browser [--api-url <url>] [--scopes <comma-separated-scopes>] [--no-resume]
|
|
43
83
|
myskills login --api-key [--api-url <url>]
|
|
44
84
|
myskills logout [--api-url <url>] [--token <token>]
|
|
45
85
|
myskills whoami [--api-url <url>] [--token <token>]
|
|
@@ -49,13 +89,14 @@ myskills config get api-url
|
|
|
49
89
|
myskills config set api-url <url>
|
|
50
90
|
myskills config reset api-url
|
|
51
91
|
myskills config list
|
|
92
|
+
myskills bootstrap codex --dry-run --profile work --context <file> [--work-source-root <dir>] [--shared-source-root <dir>] --live-root <dir> --include-slug <slug> [--include-slug <slug>] --output <report.json>
|
|
52
93
|
myskills submit --path <file-directory-or-zip> [--api-url <url>] [--token <token>]
|
|
53
|
-
myskills review submissions [--api-url <url>] [--token <token>]
|
|
94
|
+
myskills review submissions [--limit <1-100>] [--cursor <cursor>] [--api-url <url>] [--token <token>]
|
|
54
95
|
myskills review bundle <submission-id> [--platform <name>] [--output <file>] [--api-url <url>] [--token <token>]
|
|
55
96
|
myskills review action <submission-id> --action <approve|request-changes|reject|publish> [--artifact-sha256 <hash>] [--reason <text>] [--api-url <url>] [--token <token>]
|
|
56
97
|
myskills submissions list [--api-url <url>] [--token <token>]
|
|
57
98
|
myskills submissions withdraw <submission-id> [--reason <text>] [--api-url <url>] [--token <token>]
|
|
58
|
-
myskills skills edit <skill-slug> [--title <text>] [--summary <text>] [--
|
|
99
|
+
myskills skills edit <skill-slug> [--title <text>] [--summary <text>] [--tag <tag>] [--visibility <scope>] [--reason <text>] [--api-url <url>] [--token <token>] (deprecated visibility compatibility alias; use sharing set)
|
|
59
100
|
myskills skills archive|restore|delete <skill-slug> [--reason <text>] [--api-url <url>] [--token <token>]
|
|
60
101
|
myskills releases list <skill-slug> [--api-url <url>] [--token <token>]
|
|
61
102
|
myskills releases deprecate|unpublish|revoke|restore|delete <skill-slug>@<version> [--reason <text>] [--replacement <version>] [--api-url <url>] [--token <token>]
|
|
@@ -64,46 +105,517 @@ myskills teams create <team-name> [--name <team-name>] [--api-url <url>] [--toke
|
|
|
64
105
|
myskills teams invite <team-id> --email <email> [--api-url <url>] [--token <token>]
|
|
65
106
|
myskills teams accept <invitation-id> [--api-url <url>] [--token <token>]
|
|
66
107
|
myskills sharing get <skill-slug> [--api-url <url>] [--token <token>]
|
|
67
|
-
myskills sharing set <skill-slug> --visibility <scope> [--team <team-id>] [--user <email>]
|
|
108
|
+
myskills sharing set <skill-slug> --visibility <scope> [--team <team-id>] [--user <email>] [--organization <organization-id>] [--organization-id <organization-id>] [--clear-organizations]
|
|
109
|
+
myskills architectures patterns [--api-url <url>] [--token <token>]
|
|
110
|
+
myskills architectures list [--api-url <url>] [--token <token>]
|
|
111
|
+
myskills architectures show <architecture-id> [--revision <revision-id>] [--api-url <url>] [--token <token>]
|
|
112
|
+
myskills architectures preview|compile <architecture-id> [--revision <revision-id>] [--profile <profile-id>] [--environment <environment-id>] [--organization-id <organization-id>|--organization <organization-id>] [--api-url <url>] [--token <token>]
|
|
113
|
+
myskills architectures plan|dry-run <architecture-id> --observed <fixture.json> [--revision <revision-id>] [--profile <profile-id>] [--environment <environment-id>] [--organization-id <organization-id>|--organization <organization-id>] [--api-url <url>] [--token <token>]
|
|
114
|
+
myskills architectures observe --root <absolute-dir> --profile <personal|work|shared> (--context <file> | --target-id <id> --generation <number> --architecture-id <id> --environment-id <id> --profile-id <id> --adapter-digest <sha256> --capabilities-digest <sha256>) [--json]
|
|
115
|
+
myskills architectures health --root <absolute-dir> --profile <personal|work|shared> (--context <file> | --target-id <id> --generation <number> --architecture-id <id> --environment-id <id> --profile-id <id> --adapter-digest <sha256> --capabilities-digest <sha256>) [--json]
|
|
68
116
|
myskills admin sharing get [--api-url <url>] [--token <token>]
|
|
69
|
-
myskills admin sharing set [--public <true|false>] [--authenticated <true|false>] [--teams <true|false>] [--team-visibility <true|false>] [--user-visibility <true|false>]
|
|
117
|
+
myskills admin sharing set [--public <true|false>] [--authenticated <true|false>] [--teams <true|false>] [--team-visibility <true|false>] [--user-visibility <true|false>] [--organization-visibility <true|false>]
|
|
70
118
|
myskills export <skill-slug> --version <version> --platform <platform> --output <dir>
|
|
71
119
|
myskills install <skill-slug> [--version <version>] [--platform <platform>] [--dir <install-root>]
|
|
72
120
|
myskills list [--dir <install-root>]
|
|
73
121
|
myskills update [skill-slug] [--version <version>] [--platform <platform>] [--dir <install-root>]
|
|
74
122
|
myskills rollback <skill-slug> [--dir <install-root>]
|
|
123
|
+
myskills codex enroll --workspace <absolute-dir> --architecture-id <id> --environment-id <id> --profile-id <id> [--name <name>]
|
|
124
|
+
myskills codex observe --workspace <absolute-dir> [--upload] [--json]
|
|
125
|
+
myskills scopes inventory --provider codex|claude --root <absolute-skills-dir> [--json]
|
|
126
|
+
myskills scopes enroll --provider codex|claude --scope global --root <absolute-skills-dir> --architecture-id <id> --environment-id <id> --profile-id <id> [--name <name>]
|
|
127
|
+
myskills scopes enroll --provider codex|claude --scope project --project <absolute-dir> --architecture-id <id> --environment-id <id> --profile-id <id> [--name <name>]
|
|
128
|
+
myskills scopes observe --provider codex|claude --scope global|project [--project <absolute-dir>] [--upload] [--json]
|
|
129
|
+
myskills scopes list [--provider codex|claude]
|
|
130
|
+
myskills scopes resolve --provider codex|claude --path <absolute-dir>
|
|
131
|
+
myskills scopes exclude|include --provider codex|claude --project <absolute-dir>
|
|
132
|
+
myskills scopes unbind --provider codex|claude --scope global|project [--project <absolute-dir>]
|
|
133
|
+
myskills scopes migrate plan|apply --provider codex|claude --project <absolute-dir> [--plan-digest <sha256>]
|
|
134
|
+
myskills install <skill-slug> --version <version> --workspace <absolute-dir>
|
|
135
|
+
myskills update [skill-slug] [--version <version>] --workspace <absolute-dir>
|
|
136
|
+
myskills rollback <skill-slug> --workspace <absolute-dir>
|
|
137
|
+
myskills companion run-once --workspace <absolute-dir> --holder <name>
|
|
75
138
|
myskills token create --name <name> --scope <scope> [--scope <scope>]
|
|
76
139
|
myskills token list
|
|
77
140
|
myskills token revoke <token-id>
|
|
78
141
|
```
|
|
79
142
|
|
|
80
|
-
|
|
143
|
+
### Registry and collaboration workflows
|
|
144
|
+
|
|
145
|
+
The commands below describe the current repository source. Consult the
|
|
146
|
+
[capabilities matrix](../../docs/CAPABILITY_PARITY.md) for coverage and
|
|
147
|
+
verification status; an implemented command does not establish npm publication
|
|
148
|
+
or hosted deployment. All these commands accept `--api-url`, `--token` and
|
|
149
|
+
`--json`. The API enforces current roles, ownership, membership and MFA.
|
|
150
|
+
Use `myskills login` with password/MFA for session-only operations; an API key
|
|
151
|
+
does not replace the required session or MFA verification.
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
myskills skills managed [--query <text>] [--limit <1-100>] [--cursor <cursor>]
|
|
155
|
+
myskills submissions show <submission-id>
|
|
156
|
+
myskills submissions export <submission-id> [--platform <name>] [--output <new-file>]
|
|
157
|
+
myskills review show <submission-id>
|
|
158
|
+
myskills teams revoke-invitation <team-id> <invitation-id>
|
|
159
|
+
myskills teams set-role <team-id> <member-id> --role <owner|member>
|
|
160
|
+
myskills teams remove-member <team-id> <member-id>
|
|
161
|
+
myskills organizations list|pending-invitations
|
|
162
|
+
myskills organizations show|members|invitations|policies|teams|update-policy <organization-id>
|
|
163
|
+
myskills organizations create <name> [--slug <slug>]
|
|
164
|
+
myskills organizations create --input <request.json>
|
|
165
|
+
myskills organizations archive <organization-id>
|
|
166
|
+
myskills organizations invite <organization-id> --email <email> [--role <owner|admin|member>]
|
|
167
|
+
myskills organizations accept <invitation-id>
|
|
168
|
+
myskills organizations set-role <organization-id> <member-id> --role <owner|admin|member>
|
|
169
|
+
myskills organizations remove-member <organization-id> <member-id>
|
|
170
|
+
myskills organizations append-policy|set-update-policy <organization-id> --input <request.json>
|
|
171
|
+
myskills organizations activate-policy <organization-id> <revision-id>
|
|
172
|
+
myskills organizations create-team <organization-id> <name> [--slug <slug>]
|
|
173
|
+
myskills organizations create-team <organization-id> --input <request.json>
|
|
174
|
+
myskills organizations adopt-team <organization-id> <team-id>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
`submissions show` and `submissions export` inspect the author's submission;
|
|
178
|
+
`review show` uses the review permission boundary. An export prints the JSON
|
|
179
|
+
bundle unless `--output` selects a new file. Its parent directory must exist,
|
|
180
|
+
and an existing destination is never overwritten.
|
|
181
|
+
|
|
182
|
+
`search`, `skills managed` and `review submissions` return one page at a time.
|
|
183
|
+
Use the response's `nextCursor` with `--cursor` and retain the same query and
|
|
184
|
+
filters. `--json` preserves the response and pagination metadata. Inspect an
|
|
185
|
+
exact release with `myskills info <slug> --version <version>`; the version must
|
|
186
|
+
be a semantic version such as `1.2.3`, and the response is JSON release metadata.
|
|
187
|
+
|
|
188
|
+
### Local package authoring
|
|
189
|
+
|
|
190
|
+
`myskills init <name>` creates a minimal private Codex package in a new
|
|
191
|
+
directory. The default output is `./<name>`; use `--output` to select another
|
|
192
|
+
destination under an existing parent directory. The command writes `skill.json` and `SKILL.md` with
|
|
193
|
+
version `0.1.0`, `UNLICENSED`, and the `codex-skill` platform target. It does
|
|
194
|
+
not authenticate, call the network, or overwrite an existing file, directory,
|
|
195
|
+
or symlink. Edit the generated `SKILL.md`, then run `myskills validate --path`
|
|
196
|
+
and `myskills scan --path` before any separate authenticated submission.
|
|
197
|
+
|
|
198
|
+
`myskills package --path ./my-skill --output ./my-skill.zip` creates a
|
|
199
|
+
deterministic ZIP from one checked snapshot of a local package directory.
|
|
200
|
+
It validates the root manifest, portable paths, and bounded UTF-8 text, then
|
|
201
|
+
blocks credential and other blocking scan findings before creating output.
|
|
202
|
+
Warnings remain visible for review. The output reports the archive SHA-256,
|
|
203
|
+
byte size, and a separate `myskills submit --path ...` command. `--json` returns
|
|
204
|
+
the manifest, scan findings, output path, checksum, size, and next command.
|
|
205
|
+
Packaging does not contact the registry or bypass submission and review.
|
|
206
|
+
|
|
207
|
+
The output must end in `.zip` and have an existing parent directory outside
|
|
208
|
+
the source tree. Existing files, directories, symlinks, and symlink ancestors
|
|
209
|
+
are refused. All regular source files are included; there is no ignore file.
|
|
210
|
+
Keep credentials and unrelated files outside the source directory. The package
|
|
211
|
+
limits are 500 files, 1 MiB of text, 1,000 filesystem entries, and a 10 MiB
|
|
212
|
+
archive. Binary files,
|
|
213
|
+
symlinks, and special files are rejected. Text bytes, including BOMs and line
|
|
214
|
+
endings, are preserved. Entries use ordinal UTF-8 path order, fixed timestamps
|
|
215
|
+
and permissions, and uncompressed ZIP storage, so source mtimes and locale do
|
|
216
|
+
not change the archive checksum. Empty directories and executable bits are not
|
|
217
|
+
preserved. The archive checksum identifies the ZIP bytes, not the registry's
|
|
218
|
+
package-content digest.
|
|
219
|
+
|
|
220
|
+
Local authoring requires macOS or Linux. The archive is created with private
|
|
221
|
+
file permissions and exclusive creation; it never overwrites a destination
|
|
222
|
+
that appears during the command. A disk or write failure can leave a partial
|
|
223
|
+
output, which the error asks you to inspect before removal. Work in directories
|
|
224
|
+
owned by your user; this does not isolate writes from a hostile process running
|
|
225
|
+
as the same operating-system user.
|
|
226
|
+
|
|
227
|
+
The API-backed architecture preview includes the compiled graph, escaped
|
|
228
|
+
Mermaid, and a versioned diagram artifact with a plain-text accessible outline.
|
|
229
|
+
Use `--json` when a caller needs the complete JSON/Mermaid/outline projection;
|
|
230
|
+
the human-readable preview prints the bounded topology summary and Mermaid.
|
|
231
|
+
The browser workbench additionally offers derived JSON and Mermaid downloads.
|
|
232
|
+
|
|
233
|
+
### Local Codex observation
|
|
234
|
+
|
|
235
|
+
`architectures observe` and `architectures health` run the Codex adapter locally
|
|
236
|
+
against an explicitly supplied absolute root. The profile must be selected
|
|
237
|
+
explicitly as `personal`, `work`, or `shared`. Supply either `--context` with a
|
|
238
|
+
JSON object containing exactly `targetId`, `targetGeneration`,
|
|
239
|
+
`architectureId`, `environmentId`, `profileId`, `adapterDigest`, and
|
|
240
|
+
`capabilitiesDigest`, or pass those seven values through their corresponding
|
|
241
|
+
flags.
|
|
242
|
+
|
|
243
|
+
The command reads only bounded, allowlisted metadata and safe skill
|
|
244
|
+
frontmatter. It does not search home directories, follow profile pointers,
|
|
245
|
+
read prompt or skill bodies, emit local paths, retain credentials, call the
|
|
246
|
+
network, upload observations, or modify a target. Review the JSON output before
|
|
247
|
+
any separately authorized/manual upload to an API observation route. No live
|
|
248
|
+
apply, rollback, installation, or other target mutation is available through
|
|
249
|
+
this command.
|
|
250
|
+
|
|
251
|
+
### Fixture-only sync and recovery
|
|
252
|
+
|
|
253
|
+
`architectures plan` and `architectures dry-run` accept a bounded observed
|
|
254
|
+
fixture and return a dry-run plan. The fixture is not an implicit target and
|
|
255
|
+
the command does not apply changes. General architecture graph execution remains
|
|
256
|
+
fixture-only, even though its API persistence and recovery/rollback evidence
|
|
257
|
+
can be stored in Postgres. The separate Codex workspace and managed skill
|
|
258
|
+
operation commands below support one explicit filesystem installation path.
|
|
259
|
+
Each bounded architecture fixture run allows at most 500 steps and 2,004 append-only
|
|
260
|
+
receipts: a 1,002-receipt max-step lifecycle, one full apply/verify retry, and
|
|
261
|
+
two recovery/terminal receipts. Further retries require a new bounded run.
|
|
262
|
+
|
|
263
|
+
### Architecture and target management
|
|
264
|
+
|
|
265
|
+
Create architectures, append revisions, manage organization grants and derive
|
|
266
|
+
another architecture pattern through the API:
|
|
267
|
+
|
|
268
|
+
```text
|
|
269
|
+
myskills architectures create --input <request.json>
|
|
270
|
+
myskills architectures revisions|grants <architecture-id>
|
|
271
|
+
myskills architectures revise|draft-preview|set-grants|migration-preview|migrate <architecture-id> --input <request.json>
|
|
272
|
+
myskills targets list
|
|
273
|
+
myskills targets show|updates|operations|update-policy|revoke <target-id>
|
|
274
|
+
myskills targets observations <target-id> [--limit <positive-integer>]
|
|
275
|
+
myskills targets register --input <request.json>
|
|
276
|
+
myskills targets consent|observe|health|schedule|set-update-policy <target-id> --input <request.json>
|
|
277
|
+
myskills operations show|cancel <operation-id>
|
|
278
|
+
myskills operations batch --input <request.json>
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Review each JSON request file before passing it to `--input`. These commands
|
|
282
|
+
use the API body schema and retain its revision, artifact and idempotency
|
|
283
|
+
fields. For example, a consent file contains `{"decision":"grant"}` or
|
|
284
|
+
`{"decision":"deny"}`. A scheduled update contains `action`, `slug`, an exact
|
|
285
|
+
`version`, optional `platform`, and a caller-chosen `idempotencyKey`. Batch
|
|
286
|
+
requests wrap rows in `operations`, with each row also containing `targetId`.
|
|
287
|
+
|
|
288
|
+
Use `draft-preview` before `revise` and `migration-preview` before `migrate`.
|
|
289
|
+
Supply the inspected `expectedCurrentRevisionId` when editing or migrating;
|
|
290
|
+
target upgrade policies use `expectedRevisionNumber`. Organization policy and
|
|
291
|
+
grant writes likewise retain the API's required revision fields. On a conflict,
|
|
292
|
+
read the current state and review the change again. Retrying the same migration
|
|
293
|
+
or scheduled operation must retain the same idempotency key and request body.
|
|
294
|
+
The CLI does not generate a replacement key or refresh revision fields for you.
|
|
295
|
+
|
|
296
|
+
Target management uses a login session, and protected writes require MFA.
|
|
297
|
+
`targets observe` uploads the supplied observation; `architectures observe`
|
|
298
|
+
generates local metadata as described above. Scheduling returns an operation
|
|
299
|
+
for the enrolled companion to execute. Read its state and receipt with
|
|
300
|
+
`operations show`; a queued operation is not proof that files changed.
|
|
301
|
+
|
|
302
|
+
## Published CLI And Local Builds
|
|
81
303
|
|
|
82
|
-
The
|
|
304
|
+
The published beta channel is installed with:
|
|
83
305
|
|
|
84
306
|
```bash
|
|
85
|
-
npm install -g @jarel/myskills@
|
|
307
|
+
npm install -g @jarel/myskills@beta
|
|
86
308
|
myskills --version
|
|
87
309
|
myskills login
|
|
88
310
|
```
|
|
89
311
|
|
|
90
|
-
|
|
312
|
+
The npm `beta` tag selects the published prerelease. It can differ from this
|
|
313
|
+
source candidate and the deployed API/web revision. To test source changes
|
|
314
|
+
before npm publication, build and run them locally:
|
|
91
315
|
|
|
92
316
|
```bash
|
|
93
|
-
npm
|
|
317
|
+
npm ci
|
|
318
|
+
npm run build
|
|
319
|
+
node apps/cli/dist/index.js --version
|
|
320
|
+
node apps/cli/dist/index.js login
|
|
321
|
+
npm pack -w @jarel/myskills
|
|
94
322
|
```
|
|
95
323
|
|
|
96
|
-
|
|
324
|
+
Use the resulting tarball for a fresh isolated installation, or run the bundle
|
|
325
|
+
directly. The release gate verifies the packed executable and Apache license.
|
|
326
|
+
Public npm publication is a separate release step.
|
|
97
327
|
|
|
98
328
|
`validate`, `scan`, and `submit` accept a manifest file, package directory, or local `.zip` package. `login` prompts for the API URL when one is not supplied; the default is the local API at `http://localhost:3001`, and custom hosted URLs can be entered manually. Successful login stores the selected API URL in local CLI config so later commands can omit `--api-url`. API URL resolution is `--api-url`, then `MYSKILLS_API_URL`, then saved config, then `http://localhost:3001`.
|
|
99
329
|
|
|
100
|
-
`login` supports
|
|
330
|
+
`login` supports email/password, API-key and browser/device flows. Password
|
|
331
|
+
login handles MFA challenges and stores the verified session token. API-key
|
|
332
|
+
login validates the key with `/v1/me`. Token resolution is `--token`, then
|
|
333
|
+
`MYSKILLS_TOKEN`, then the stored token. The default store uses the platform
|
|
334
|
+
credential store through `@napi-rs/keyring`. Credential-store failures are
|
|
335
|
+
reported; a failed write does not silently store the credential in a file.
|
|
336
|
+
An existing legacy file credential can be read when the keyring entry is
|
|
337
|
+
confirmed absent. Explicit `MYSKILLS_TOKEN_STORE=file` or `MYSKILLS_TOKEN_FILE`
|
|
338
|
+
selects file storage with user-only permissions. A successful keyring write
|
|
339
|
+
clears the obsolete file entry.
|
|
340
|
+
|
|
341
|
+
`login --method browser` displays the consent URL, user code and deadline. Repeat
|
|
342
|
+
the command with the same API URL, configuration profile and `--scopes` choice to
|
|
343
|
+
resume after an interruption, including after browser approval. The pending
|
|
344
|
+
device secret stays in a separate OS keyring entry; it never enters config,
|
|
345
|
+
token files or terminal output. A process lock serializes polling and logout
|
|
346
|
+
for that API/profile. Its nonsecret owner metadata lives under the actual OS
|
|
347
|
+
account home, independent of `HOME` and configuration-directory overrides.
|
|
348
|
+
Only confirmed dead owners are reclaimed; ambiguous locks require operator
|
|
349
|
+
recovery. Denial, expiry during polling, redemption and logout clear the pending
|
|
350
|
+
entry. After process loss, expired keyring state is removed on the next login
|
|
351
|
+
or logout for that API/profile; there is no background cleanup process. Logout
|
|
352
|
+
discards a pending-only login locally; it does not cancel consent on the API.
|
|
353
|
+
|
|
354
|
+
Resume keeps the original server expiry and a conservative deadline measured
|
|
355
|
+
before the start request. Polling honors the saved interval, including
|
|
356
|
+
`slow_down`, and bounds each request to the remaining deadline. It never renews
|
|
357
|
+
consent, widens scopes, extends MFA assurance or changes token lifetime.
|
|
358
|
+
Changing `--scopes` while a login is pending requires logout first.
|
|
359
|
+
|
|
360
|
+
Keyring access is required for automatic resume even when final token storage
|
|
361
|
+
was explicitly set to a file. A host without keyring access, including many
|
|
362
|
+
cloud runners, can explicitly choose `--no-resume` for an in-memory request.
|
|
363
|
+
That option cannot replace a readable existing pending login: logout first.
|
|
364
|
+
If keyring access is unavailable, the CLI warns that old pending state could
|
|
365
|
+
not be checked; restore access and run logout before using resume again.
|
|
366
|
+
There is no plaintext fallback for pending state.
|
|
367
|
+
|
|
368
|
+
Expiry, interruption, denial, token-save failure and config-save failure have
|
|
369
|
+
distinct JSON error codes. If the server redeemed approval but the response was
|
|
370
|
+
lost, or credential saving was not confirmed, the one-time code cannot recover
|
|
371
|
+
the token. Check `auth status` with the same API/profile and, when needed,
|
|
372
|
+
revoke the CLI browser login token in account settings before starting again.
|
|
373
|
+
A config-save failure explicitly reports that the credential was saved; pass
|
|
374
|
+
`--api-url` until the configuration store is repaired. Cleanup failures remain
|
|
375
|
+
visible, and keyring-unavailable logout still attempts the selected credential's
|
|
376
|
+
normal local deletion or remote session revocation.
|
|
377
|
+
|
|
378
|
+
`auth status` validates the token without printing it. `logout` revokes stored
|
|
379
|
+
sessions and clears local credentials. If a malformed keyring entry prevents
|
|
380
|
+
revocation, logout attempts local deletion and reports that remote revocation
|
|
381
|
+
is unconfirmed. It reports deletion failures. Stored API tokens are removed
|
|
382
|
+
locally and must be revoked with `token revoke`. Malformed file-store JSON
|
|
383
|
+
requires repair or removal of that file; other stored accounts are not silently
|
|
384
|
+
discarded.
|
|
101
385
|
|
|
102
386
|
`config get api-url`, `config set api-url <url>`, `config reset api-url`, and `config list` manage the saved API URL. `doctor` checks the CLI version, Node version, resolved API URL, `/health`, auth status, token-store backend, install-directory writability, and `/v1/capabilities`. If the CLI is pointed at the web app instead of the API, or a newer command is sent to an older server, command errors include concrete next steps and `--json` returns structured error codes.
|
|
103
387
|
|
|
104
|
-
|
|
388
|
+
### Older workspace scope identities
|
|
389
|
+
|
|
390
|
+
Scope state now records both device and inode. Existing inode-only state stays
|
|
391
|
+
readable, but observation and ordinary re-enrollment stop with
|
|
392
|
+
`SCOPE_ROOT_IDENTITY_LEGACY`. After confirming the same directory, repeat its
|
|
393
|
+
original `scopes enroll` command with `--accept-current-root` and the original
|
|
394
|
+
configuration profile. The command verifies the account, registry, architecture,
|
|
395
|
+
and existing target, then backs up local state and updates only the root identity.
|
|
396
|
+
It does not register targets, grant consent, or upload inventory. Pending
|
|
397
|
+
enrollments retain their recovery identity and can resume with normal enrollment
|
|
398
|
+
after acknowledgment. A repeated acknowledgment is a no-op; it cannot override
|
|
399
|
+
a known device/inode mismatch. Device and inode do not detect every same-device
|
|
400
|
+
inode reuse. See [scope identity migration](../../docs/WORKSPACE_SCOPES.md#upgrade-an-inode-only-scope-identity)
|
|
401
|
+
for the exact upgrade and recovery behavior.
|
|
402
|
+
|
|
403
|
+
### Separate work and personal configuration
|
|
404
|
+
|
|
405
|
+
Every command accepts `--config-profile <name>` before or after the command.
|
|
406
|
+
It overrides `MYSKILLS_CONFIG_PROFILE`. Names contain 1–64 lowercase letters,
|
|
407
|
+
digits, hyphens or underscores and start with a letter or digit. For example:
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
myskills config set api-url https://work-registry.example/api --config-profile work
|
|
411
|
+
myskills login --config-profile work
|
|
412
|
+
myskills whoami --config-profile work
|
|
413
|
+
myskills scopes list --config-profile work
|
|
414
|
+
myskills config list --config-profile work --json
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
There is no create or persistent select command. Writes create the selected
|
|
418
|
+
profile's state as needed; keep the flag on each command or set
|
|
419
|
+
`MYSKILLS_CONFIG_PROFILE` in that shell. `help`, `config list`, and `doctor`
|
|
420
|
+
show the selected configuration. JSON uses `configProfile: null` for the
|
|
421
|
+
legacy default. This selector is separate from architecture `--profile-id`
|
|
422
|
+
and provider inspection `--profile`.
|
|
423
|
+
|
|
424
|
+
Without a selector, existing config, credentials, and scope bindings remain at
|
|
425
|
+
their current locations. A named `personal` profile starts empty; it does not
|
|
426
|
+
copy or migrate the default. Each named profile has independent saved API URL,
|
|
427
|
+
credentials, and scope state, including for different accounts at one API URL.
|
|
428
|
+
A missing credential never falls back to another profile or the default.
|
|
429
|
+
|
|
430
|
+
The base directory is `MYSKILLS_CONFIG_DIR`, then
|
|
431
|
+
`$XDG_CONFIG_HOME/myskills-app`, then `~/.config/myskills-app`. Named state lives
|
|
432
|
+
under `<base>/profiles/<name>/` (`config.json`, optional `tokens.json`, and
|
|
433
|
+
`scopes/`). OS credential keys include the canonical profile directory and API
|
|
434
|
+
URL. Aliases for the base directory are supported; linked profile directories
|
|
435
|
+
are rejected so they cannot share another profile’s files. Changing the base
|
|
436
|
+
directory selects separate credentials. Named profiles
|
|
437
|
+
reject `MYSKILLS_CONFIG_FILE` and `MYSKILLS_TOKEN_FILE`; these retain their
|
|
438
|
+
existing precedence when no profile is selected. `MYSKILLS_TOKEN_STORE=file`
|
|
439
|
+
remains available for profile-local file storage.
|
|
440
|
+
|
|
441
|
+
Managed workspace overlap checks use one protected index under the actual OS
|
|
442
|
+
account home at `.config/myskills-app/workspace-enrollments`. `HOME`,
|
|
443
|
+
`XDG_CONFIG_HOME`, registry URLs and configuration profiles cannot split this
|
|
444
|
+
authority. The selected older XDG/home index is read for reservation migration;
|
|
445
|
+
its files are preserved. This coordinates normal CLI processes. Preserve the
|
|
446
|
+
index and workspace bindings when a conflicting root requires explicit recovery.
|
|
447
|
+
|
|
448
|
+
Explicit API and token overrides still apply: `--api-url` then
|
|
449
|
+
`MYSKILLS_API_URL` override the saved registry, and `--token` then
|
|
450
|
+
`MYSKILLS_TOKEN` override the stored credential. Clear inherited overrides when
|
|
451
|
+
you want the profile's saved registry/account. `auth status` reports the token
|
|
452
|
+
source without printing its value. Selection does not move skill directories,
|
|
453
|
+
change native provider profiles, or unbind existing targets.
|
|
454
|
+
|
|
455
|
+
`bootstrap codex --dry-run` is a work/team-only local planner. It requires an
|
|
456
|
+
explicit `work` context, a normalized HTTPS target origin, stable target
|
|
457
|
+
instance/workspace/actor identifiers, explicit source and target trust
|
|
458
|
+
compartments (`work`, `shared`, or `work+shared` for sources, and `work-team`
|
|
459
|
+
for the target), typed `work` and/or `shared` source roots, a target root, and
|
|
460
|
+
a positive `--include-slug` allowlist. The context must approve the computed
|
|
461
|
+
source-root type/digests and target-root digest. Personal, consumer, public,
|
|
462
|
+
and unclassified sources are rejected, and candidates are never selected by
|
|
463
|
+
implicit inventory discovery. A plan accepts at most eight selected candidates;
|
|
464
|
+
each candidate snapshot accepts at most 1,000 entries and 32 nested directory
|
|
465
|
+
levels. A one-skill work-owned canary is supported.
|
|
466
|
+
|
|
467
|
+
The context JSON must include `profile: "work"`, `targetOrigin`,
|
|
468
|
+
`instanceId`, one `tenantId` or `workspaceId`, `actorId`, the canonical trust
|
|
469
|
+
compartments, `approvedSourceRoots` entries of `{type, identityDigest}`, and
|
|
470
|
+
`approvedTargetRootIdentityDigest`.
|
|
471
|
+
|
|
472
|
+
The planner reads selected source and target content without network or
|
|
473
|
+
registry access. It opens each selected tree through a bootstrap-owned secure
|
|
474
|
+
snapshot reader, then hashes, parses, scans, and reports only those held bytes.
|
|
475
|
+
It writes only the explicitly requested new private report (`0600`) under a
|
|
476
|
+
user-controlled private parent. Reserved package manifests remain strict:
|
|
477
|
+
invalid or multiple manifests fail closed, and no metadata is relocated. The
|
|
478
|
+
full report contains the work binding, approved root digests, owning package
|
|
479
|
+
contract identifiers, candidate content identities, execution identities, the
|
|
480
|
+
exact target precondition (`absent` or `present-identical` with its expected
|
|
481
|
+
artifact identity), and private snapshots. Terminal output is a redacted DTO
|
|
482
|
+
with counts and digests; it does not contain paths, candidate names, inventory,
|
|
483
|
+
or private identifiers.
|
|
484
|
+
There is no apply, publishing, adoption, or target-write mode in this command.
|
|
485
|
+
`ready` means that the held snapshot passed deterministic checks only. It is
|
|
486
|
+
not approval to apply. Sensitive configuration and credential paths are
|
|
487
|
+
excluded before content enters the report, and heuristic scan-clean never
|
|
488
|
+
replaces explicit human content review. Any future executor must repeat the
|
|
489
|
+
retained source/target identity check immediately before its first write
|
|
490
|
+
(compare-and-swap) and require that review at that boundary.
|
|
491
|
+
|
|
492
|
+
`validate`, `scan`, and `submit` read one bounded snapshot of the local package.
|
|
493
|
+
`submit` sends those same validated and scanned text entries for directory and
|
|
494
|
+
ZIP inputs. Authors can inspect and withdraw submissions; maintainers fetch the
|
|
495
|
+
reviewed artifact and approval hash before approving, requesting changes,
|
|
496
|
+
rejecting, or publishing it. The browser shows review reasons and scan findings.
|
|
497
|
+
Corrections create another immutable version.
|
|
498
|
+
|
|
499
|
+
Published artifacts remain immutable. `skills edit` changes metadata;
|
|
500
|
+
`releases deprecate`, `unpublish`, `revoke`, `restore`, and `delete` change
|
|
501
|
+
server-owned lifecycle state. Deprecated releases remain installable. Hidden,
|
|
502
|
+
revoked, archived, or deleted releases cannot be installed or exported.
|
|
503
|
+
`export` verifies artifact size and SHA-256 before writing normalized paths.
|
|
504
|
+
|
|
505
|
+
`install`, `update`, and `rollback` share an exclusive install-root lock and
|
|
506
|
+
verify package bytes and current eligibility before promotion. Updates retain
|
|
507
|
+
a verified rollback snapshot. Interrupted transactions preserve unknown or
|
|
508
|
+
edited local bytes for investigation. Each installation binds the API origin
|
|
509
|
+
and registry instance ID. Legacy records without that identity are not adopted
|
|
510
|
+
automatically: keep their files as a backup, review the source, and install into
|
|
511
|
+
a new root. A registry change requires a separate root.
|
|
512
|
+
|
|
513
|
+
New installation and snapshot records declare
|
|
514
|
+
`contentDigestAlgorithm: "sha256-json-ordinal-v1"`; transaction journals use
|
|
515
|
+
`targetContentDigestAlgorithm` for the candidate. This scheme normalizes paths,
|
|
516
|
+
sorts them by JavaScript string ordinal order (UTF-16 code units), then hashes
|
|
517
|
+
the UTF-8 JSON array of `{path, content}` entries with SHA-256. It does not
|
|
518
|
+
depend on the process locale. Readers reject unknown algorithm identifiers.
|
|
105
519
|
|
|
106
|
-
|
|
520
|
+
A missing algorithm field identifies the legacy `localeCompare` scheme.
|
|
521
|
+
The CLI verifies these records with the current process's legacy comparison
|
|
522
|
+
rules. It does not retry with a different algorithm. If a locale change makes
|
|
523
|
+
legacy bytes unverifiable, return to the original verification locale and
|
|
524
|
+
compatible Node/ICU environment before a trusted migration. Preserve the files
|
|
525
|
+
and recovery copies if their identity still cannot be proved. Never add an
|
|
526
|
+
algorithm field to an old hash by hand. After verification, an install or
|
|
527
|
+
update records the held bytes with an ordinal digest in the new journal and
|
|
528
|
+
snapshot; rollback does the same for its verified source snapshot. Untouched
|
|
529
|
+
legacy history and journals retain their original verification rules.
|
|
530
|
+
|
|
531
|
+
Local package intake, install, export, and rollback support macOS and Linux.
|
|
532
|
+
No-follow payload reads and writes, private staging directories, and drift
|
|
533
|
+
checks protect these operations. They do not isolate the workspace from a
|
|
534
|
+
hostile process already running as the same OS user. Other operating systems
|
|
535
|
+
can use the API's portable buffer upload path; native Windows filesystem
|
|
536
|
+
installation is unsupported.
|
|
537
|
+
|
|
538
|
+
### Personal Codex workspace
|
|
539
|
+
|
|
540
|
+
Create a personal architecture in the browser and note its architecture,
|
|
541
|
+
environment, and profile IDs. Enable MFA and sign in with a password session.
|
|
542
|
+
Enroll an existing absolute workspace directory using the command above.
|
|
543
|
+
Enrollment creates a user-owned target, grants consent, and stores a local
|
|
544
|
+
binding. A fresh workspace cannot attach to an existing target ID; that option
|
|
545
|
+
only confirms or resumes its existing local binding.
|
|
546
|
+
|
|
547
|
+
Use `--workspace` for all managed writes. Skills are installed under
|
|
548
|
+
`.agents/skills`, and records stay under `.myskills-app` in that workspace.
|
|
549
|
+
The CLI checks Codex compatibility and valid `SKILL.md` YAML frontmatter with a
|
|
550
|
+
matching name and text description. `--dir` cannot bypass an enrolled workspace's
|
|
551
|
+
binding. Team-shared skills can be installed when your account can read them;
|
|
552
|
+
team-owned execution targets are outside this adapter's beta scope.
|
|
553
|
+
|
|
554
|
+
### Global and project skill inventories (workspace scopes)
|
|
555
|
+
|
|
556
|
+
`myskills scopes` enrolls a provider's user-level skills directory, or a
|
|
557
|
+
project, as a personal read-only inventory target: `codex-inventory` for Codex
|
|
558
|
+
and `claude-inventory` for Claude. Pass each directory explicitly; the CLI does
|
|
559
|
+
not search your home directory. Run `scopes inventory` first to review locally
|
|
560
|
+
what an upload would contain. Uploads carry skill slugs, counts, and
|
|
561
|
+
`SKILL.md` digests only. Absolute paths, exclusions, skill bodies, and names of
|
|
562
|
+
linked or invalid entries stay local.
|
|
563
|
+
|
|
564
|
+
Projects resolve to the provider's global scope unless you exclude them or
|
|
565
|
+
enroll them separately. Resolution uses real paths and whole path segments, the
|
|
566
|
+
deepest rule wins, and an excluded project never falls back to the global
|
|
567
|
+
scope. Scopes are MySkills ownership only: they do not change how Codex or
|
|
568
|
+
Claude load or inherit skills, and they never write skill files. Existing
|
|
569
|
+
managed Codex workspace bindings can be adopted with a previewed
|
|
570
|
+
`scopes migrate plan` and `scopes migrate apply`. See
|
|
571
|
+
[Workspace Scopes](../../docs/WORKSPACE_SCOPES.md) for the rules, recovery
|
|
572
|
+
steps, and local state format.
|
|
573
|
+
|
|
574
|
+
`codex observe --upload` records verified filesystem state. Confirm separately
|
|
575
|
+
that Codex loaded the skill. To process one browser-queued update, supply a
|
|
576
|
+
separate token with `skills:read` and `targets:execute` through `MYSKILLS_TOKEN`
|
|
577
|
+
and run `companion run-once`. If the workspace has a skill installed with
|
|
578
|
+
`--library-entry`, the token also needs `libraries:read`: the companion rechecks
|
|
579
|
+
that adoption before it changes files. Without it, the operation fails with
|
|
580
|
+
`API_TOKEN_SCOPE_REQUIRED` and a message that names the scope; files are not
|
|
581
|
+
changed. The CLI never widens a token's scopes. This command checks current
|
|
582
|
+
authorization, consent, policy, lease, and exact release identity. It does not
|
|
583
|
+
start a background daemon.
|
|
584
|
+
Additional provider install adapters remain planned.
|
|
585
|
+
|
|
586
|
+
To change skill visibility, use the canonical `myskills sharing set
|
|
587
|
+
<skill-slug> --visibility <scope>` command. It accepts either
|
|
588
|
+
`--organization <organization-id>` or `--organization-id <organization-id>` for
|
|
589
|
+
the complete organization grant set. Omitting both organization options keeps
|
|
590
|
+
the beta.2 compatibility behavior and preserves already-issued organization
|
|
591
|
+
grants. Pass `--clear-organizations` to send `organizationIds: []` and revoke
|
|
592
|
+
the complete organization grant set; this flag is mutually exclusive with both
|
|
593
|
+
organization ID options.
|
|
594
|
+
|
|
595
|
+
`myskills skills edit --visibility <scope>` remains a deprecated beta.2
|
|
596
|
+
compatibility alias. It preserves omitted organization grants and does not
|
|
597
|
+
provide complete-set organization controls; use the canonical sharing command
|
|
598
|
+
to grant or clear organization access. Canonical sharing remains subject to
|
|
599
|
+
the API's session and MFA security rules; the beta.2 metadata alias is also
|
|
600
|
+
session-only and requires an MFA-verified session before it reads or replaces
|
|
601
|
+
grants. API tokens cannot widen a skill through the alias. Neither path
|
|
602
|
+
bypasses server policy. Organization policy and membership remain API-owned.
|
|
603
|
+
Do not treat a successful CLI command for another scope as evidence of
|
|
604
|
+
organization sharing.
|
|
605
|
+
|
|
606
|
+
Use `architectures grants` and `architectures set-grants --input <request.json>`
|
|
607
|
+
for the separate architecture organization-grant replacement workflow. Supply
|
|
608
|
+
the architecture ID and retain the current revision in the request body.
|
|
609
|
+
The read-only `architectures preview`, `compile`, `plan`, and `dry-run`
|
|
610
|
+
commands already accept `--organization-id <organization-id>` (with
|
|
611
|
+
`--organization <organization-id>` retained as an input alias). The server
|
|
612
|
+
authorizes that exact organization projection; it is a scope filter, not an
|
|
613
|
+
ownership shortcut.
|
|
614
|
+
|
|
615
|
+
The beta.2 compatibility shims remain available and are planned for removal only
|
|
616
|
+
at a later, separately published prerelease boundary that includes migration
|
|
617
|
+
guidance and release verification. The source release does not imply a hosted
|
|
618
|
+
deployment.
|
|
107
619
|
|
|
108
620
|
Common scopes:
|
|
109
621
|
|
|
@@ -111,3 +623,196 @@ Common scopes:
|
|
|
111
623
|
- `profile:read` for `whoami`.
|
|
112
624
|
- `skills:submit` for author submissions.
|
|
113
625
|
- `review:read` and `review:write` for maintainer review workflows.
|
|
626
|
+
- `architectures:read` for architecture list, detail, preview, and fixture-plan reads.
|
|
627
|
+
- `libraries:read` for library reads and for install, update, and companion runs of library-bound skills.
|
|
628
|
+
- `libraries:write` for library changes.
|
|
629
|
+
|
|
630
|
+
## Account and instance administration
|
|
631
|
+
|
|
632
|
+
Account commands use the existing registration, session and MFA rules. Passwords,
|
|
633
|
+
emailed verification/reset tokens, invitation tokens and authenticator codes are
|
|
634
|
+
read from hidden prompts. New passwords require confirmation. These secrets are
|
|
635
|
+
not accepted as command options.
|
|
636
|
+
|
|
637
|
+
```text
|
|
638
|
+
myskills account register --email <email> [--name <name>]
|
|
639
|
+
myskills account verify-email-request|password-reset-request --email <email>
|
|
640
|
+
myskills account verify-email|confirm-email-change
|
|
641
|
+
myskills account password-reset|change-password
|
|
642
|
+
myskills account change-email --email <new-email>
|
|
643
|
+
myskills account mfa-status
|
|
644
|
+
myskills account mfa-enroll --output <new-file> [--label <label>]
|
|
645
|
+
myskills account mfa-confirm <factor-id> --output <new-file>
|
|
646
|
+
myskills account mfa-disable
|
|
647
|
+
myskills connections info|list
|
|
648
|
+
myskills connections revoke <connection-id>
|
|
649
|
+
myskills instance info|health|ready|version|capabilities|branding|site
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
`mfa-enroll` writes the authenticator setup secret to the new private JSON file
|
|
653
|
+
selected by `--output`; it prints the factor ID and output path without the
|
|
654
|
+
secret. Configure the authenticator, then use that factor ID with `mfa-confirm`.
|
|
655
|
+
Confirmation prompts for the current code and writes recovery codes to another
|
|
656
|
+
new private JSON file. Choose files in an existing directory outside the
|
|
657
|
+
repository; existing destinations are refused. Save the recovery codes securely,
|
|
658
|
+
then run `myskills login` and complete MFA to obtain a verified session.
|
|
659
|
+
|
|
660
|
+
Administration commands retain the API's owner/admin role, MFA and last-owner
|
|
661
|
+
safeguards. `admin users roles` replaces the user's role set with the repeated
|
|
662
|
+
`--role` values. `admin audit` returns one page and supports its `nextCursor`.
|
|
663
|
+
|
|
664
|
+
```text
|
|
665
|
+
myskills admin branding get
|
|
666
|
+
myskills admin branding set --input <branding.json>
|
|
667
|
+
myskills admin site get
|
|
668
|
+
myskills admin site set --landing-page enabled|disabled
|
|
669
|
+
myskills admin registration get
|
|
670
|
+
myskills admin registration set --mode closed|request|open
|
|
671
|
+
myskills admin registration invite --email <email> [--name <name>]
|
|
672
|
+
myskills admin providers list
|
|
673
|
+
myskills admin providers set <provider-key> --input <provider.json>
|
|
674
|
+
myskills admin users list
|
|
675
|
+
myskills admin users action <user-id> --action approve|activate|disable|delete [--reason <text>]
|
|
676
|
+
myskills admin users roles <user-id> --role <owner|admin|maintainer|author|user> [--role <role>] [--reason <text>]
|
|
677
|
+
myskills admin tokens list
|
|
678
|
+
myskills admin tokens revoke <token-id>
|
|
679
|
+
myskills admin audit [--limit <1-100>] [--cursor <cursor>]
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
Review branding and provider JSON bodies before passing `--input`. Provider
|
|
683
|
+
configuration accepts non-secret settings; configure provider credentials in the
|
|
684
|
+
deployment secret store. `connections` manages the signed-in user's remote MCP
|
|
685
|
+
connections. `instance` reads public instance information without credentials.
|
|
686
|
+
|
|
687
|
+
## Libraries
|
|
688
|
+
|
|
689
|
+
`myskills libraries help` lists the source, import, review, tracking, subscription
|
|
690
|
+
and adoption commands. Requests use the [Libraries API contract](../../docs/plans/2026-09-26-library-api-contract.md)
|
|
691
|
+
and reviewed JSON files supplied with `--input`. The [Libraries guide](../../docs/LIBRARIES.md)
|
|
692
|
+
contains a complete workflow and scope requirements.
|
|
693
|
+
|
|
694
|
+
Filter library entries with
|
|
695
|
+
`myskills libraries entries <library-id> --kind source` (or `skill`). Filter
|
|
696
|
+
candidates with `myskills libraries candidates <entry-id> --state ready-for-review`;
|
|
697
|
+
other states are `blocked`, `accepted`, `ignored`, `superseded` and `expired`.
|
|
698
|
+
List reads accept `--limit <1-100>` and `--cursor <cursor>`; retain the filters
|
|
699
|
+
when continuing a page. Library deletion requires the current revision:
|
|
700
|
+
`myskills libraries remove <library-id> --revision <current-revision>`.
|
|
701
|
+
|
|
702
|
+
Collections and Groups organize existing skill entries in one Library. List with
|
|
703
|
+
`libraries collections <library-id>` or `libraries groups <library-id>`; inspect
|
|
704
|
+
with `libraries collection <collection-id>` or `libraries group <group-id>`.
|
|
705
|
+
`collection-members` and `group-members` list ordered entries with the same
|
|
706
|
+
`--limit` and `--cursor` pagination. Collection summaries include source tracking
|
|
707
|
+
health and authorized pending candidate counts.
|
|
708
|
+
|
|
709
|
+
Create with `libraries create-collection <library-id> --input reviewed.json`
|
|
710
|
+
or `libraries create-group <library-id> --input reviewed.json`. The JSON contains
|
|
711
|
+
`name`, optional `description`, `memberEntryIds` (up to 200 existing skill entry
|
|
712
|
+
IDs), and an optional `clientMutationId`. Preserve the mutation ID and payload
|
|
713
|
+
for retries. Edit with `edit-collection <collection-id>` or `edit-group <group-id>`
|
|
714
|
+
and `--input reviewed.json`; include `expectedRevision` from the latest read.
|
|
715
|
+
Supplying `memberEntryIds` replaces the complete ordered membership. An empty
|
|
716
|
+
array clears it; omitting the field preserves it. Use `remove-collection` or
|
|
717
|
+
`remove-group` with `--revision <current-revision>` to delete the organization
|
|
718
|
+
only. Library entries, source tracking, adoptions and installations remain intact.
|
|
719
|
+
Reads require `libraries:read`; changes require `libraries:write`, current
|
|
720
|
+
Library curation permission and MFA for team Libraries. Groups can overlap and
|
|
721
|
+
are independent of Collections.
|
|
722
|
+
|
|
723
|
+
Bind an installation to an adopted version with
|
|
724
|
+
`myskills install <slug> --library-entry <entry-id>`. If the adopted release
|
|
725
|
+
requires user action, read its notes and add `--accept-user-action`. Updates
|
|
726
|
+
resolve that exact recommendation and recheck it before changing files. A
|
|
727
|
+
deleted or inaccessible entry never falls back to the newest registry release.
|
|
728
|
+
Local drift still stops replacement. Use
|
|
729
|
+
`myskills libraries unbind-local <slug> --dir <root>` to detach that local
|
|
730
|
+
binding explicitly while retaining files and rollback history.
|
|
731
|
+
|
|
732
|
+
`updates` and `update` report each skill separately. If an entry is deleted,
|
|
733
|
+
access is lost, the adopted release is revoked, or the entry has no adoption,
|
|
734
|
+
that skill shows `curation-unavailable` with the reason (`library.state` and
|
|
735
|
+
`library.reason` in `--json`). Its files and binding stay unchanged, other skills
|
|
736
|
+
are still evaluated and updated, and `update` exits 1. `install` fails closed
|
|
737
|
+
with `LIBRARY_CURATION_UNAVAILABLE`. A malformed or mismatched resolution stops
|
|
738
|
+
the command with `LIBRARY_RESOLUTION_INVALID`.
|
|
739
|
+
|
|
740
|
+
If a library adopts a version older than the installed one, the skill shows
|
|
741
|
+
`library-adopts-older` (`adoption-older-than-installed` in `--json`). MySkills
|
|
742
|
+
never downgrades automatically. When the last rollback snapshot is exactly the
|
|
743
|
+
adopted release, run `myskills rollback <slug>`; otherwise install the adopted
|
|
744
|
+
version into a new root with `--dir <new-root>`. `libraries unbind-local` keeps
|
|
745
|
+
the installed version instead.
|
|
746
|
+
|
|
747
|
+
`libraries review-bundle <submission-id>` prints only after the SHA-256 of the
|
|
748
|
+
response body matches `x-myskills-artifact-sha256`. The JSON output labels its
|
|
749
|
+
`payload` as `parsed-for-inspection`. Use `--output <new-file>` to keep the
|
|
750
|
+
exact verified bytes; an existing file is never replaced. Supply
|
|
751
|
+
`--artifact-sha256 <digest-from-review-requests>` to also verify the immutable
|
|
752
|
+
artifact requested for review. Without it, verification covers the response
|
|
753
|
+
header only; `expectedDigestVerified` reports this distinction in JSON output.
|
|
754
|
+
|
|
755
|
+
## Skill improvement
|
|
756
|
+
|
|
757
|
+
Prepare local skill reviews with `myskills improve`, inspect the report, export a draft, and submit it through normal review. Registry plans pin source/reviewer versions and apply user, team or organization policy. Execution requires the exact local plan digest and explicit cloud consent. See [the feature guide](../../docs/SKILL_IMPROVEMENT.md) for commands, JSON bodies, evaluation suites and current adapter limits. The first runner is Claude Code 2.1.283 or newer. Use an exact model ID and an existing Claude sign-in. Codex improvement execution remains disabled pending its isolation gate; final release verification is recorded in the feature guide.
|
|
758
|
+
|
|
759
|
+
Inspect a saved registry plan and its runs with
|
|
760
|
+
`myskills improve show-plan --id <plan-id> --json`. This reads the plan without
|
|
761
|
+
starting local execution. `myskills improve compatibility --release <slug>@<version>`
|
|
762
|
+
supports anonymous reads of public releases and uses available credentials for
|
|
763
|
+
authorized private releases.
|
|
764
|
+
|
|
765
|
+
Share evidence from either a local job or an authorized completed registry run:
|
|
766
|
+
|
|
767
|
+
```text
|
|
768
|
+
myskills improve share --job <dir> --disclosure summary --subject baseline|candidate --release <slug>@<version>
|
|
769
|
+
myskills improve share --run <run-id> --disclosure summary|selected-evidence --subject baseline|candidate --release <slug>@<version>
|
|
770
|
+
myskills improve share --run <run-id> --disclosure summary --proposals-file <proposals.json>
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
`--job` retains the original registry endpoint, plan and confirmed report digest
|
|
774
|
+
checks and supports summary disclosure only. `--run` reads the completed run and
|
|
775
|
+
uses its recorded report digest; API tokens need `improvements:read` and
|
|
776
|
+
`improvements:report`. Both forms accept a reviewed proposals file in place of
|
|
777
|
+
`--subject` and `--release`:
|
|
778
|
+
|
|
779
|
+
```json
|
|
780
|
+
{"proposals":[{"subject":"baseline","slug":"example-skill","version":"1.0.0"}]}
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
The file accepts zero to four proposals, each with only `subject`, `slug` and an
|
|
784
|
+
exact `version`. Choose exactly one of `--job` or `--run`, and one proposal input
|
|
785
|
+
form. Repeating the same run, report digest, disclosure and proposals reuses the
|
|
786
|
+
same evidence request identity. Evidence sharing does not run an evaluation or
|
|
787
|
+
publish a skill release.
|
|
788
|
+
|
|
789
|
+
### Skill bundles
|
|
790
|
+
|
|
791
|
+
Browse related skills without installing them:
|
|
792
|
+
|
|
793
|
+
```bash
|
|
794
|
+
myskills bundles list --view grouped --query engineering
|
|
795
|
+
myskills bundles show <bundle-id>
|
|
796
|
+
myskills bundles members <bundle-id> --limit 25
|
|
797
|
+
myskills bundles memberships <skill-slug>
|
|
798
|
+
myskills bundles sources
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
Create or edit with `myskills bundles create --input reviewed-bundle.json` or
|
|
802
|
+
`myskills bundles edit <bundle-id> --input reviewed-bundle.json`. The request
|
|
803
|
+
contains `kind`, `name`, `purpose`, `owner`, `visibility` and `memberSlugs`.
|
|
804
|
+
Source groups also require `sourceEntryId`; edits require `expectedRevision`.
|
|
805
|
+
The API validates current ownership, author privileges and member access.
|
|
806
|
+
|
|
807
|
+
Save with `myskills bundles save <bundle-id> --input save-reference.json`, where
|
|
808
|
+
the file contains `libraryId` and `expectedRevision`. This saves one reference;
|
|
809
|
+
it does not adopt, install or follow any skill. Use `--cursor` with list/member
|
|
810
|
+
reads. Refresh from the first page if the authorized catalog changes.
|
|
811
|
+
|
|
812
|
+
### GitHub connection controls
|
|
813
|
+
|
|
814
|
+
Use `myskills account github status` to inspect the connected account and `myskills account github disconnect` to revoke it. Administrators can use `myskills admin github get` and `myskills admin github test` for safe configuration status and verification. These commands preserve API scope, account, role and MFA checks.
|
|
815
|
+
|
|
816
|
+
`myskills account github connect` and `myskills admin github configure` return instructions for the trusted browser flow. They do not open a browser, enter credentials, grant consent or claim completion. Keep GitHub App secrets and private keys in the trusted Admin form. Inspect the safe status command after completing that flow.
|
|
817
|
+
|
|
818
|
+
Use `myskills skills managed <slug>` to inspect an authorized archived or unpublished skill from the managed inventory. The public `info` command retains the public release contract.
|