@standards/cli 1.0.0-alpha.419 → 1.0.0-alpha.425
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/dist/bin.mjs +1862 -386
- package/guide/agents.md +162 -0
- package/guide/core.md +88 -0
- package/guide/records.md +100 -0
- package/guide/schema-and-bundles.md +94 -0
- package/package.json +8 -5
package/guide/agents.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# standards: agents
|
|
2
|
+
|
|
3
|
+
Run Standards agents from the shell: configure where they run, start sessions on a harness, follow them, answer the decisions they stop on, and watch several at once.
|
|
4
|
+
|
|
5
|
+
- An **environment** is where a session runs: accepted harnesses, repositories, machine size, image.
|
|
6
|
+
- A **secret** is an environment variable a session's machine receives.
|
|
7
|
+
- A **session** is a conversation with an agent on one harness: `claude-code`, `codex` or `cursor` (or `standards`, the built-in agent).
|
|
8
|
+
- A **machine** runs a session's turns. A **link** is a URL a machine publishes (a dev server, a preview).
|
|
9
|
+
- A **decision** is a question an agent parks on until someone answers it.
|
|
10
|
+
|
|
11
|
+
`<env>` is an environment id or its name. A name two environments share is refused with both ids: pass the id.
|
|
12
|
+
|
|
13
|
+
## 1. Environments
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
standards environments list
|
|
17
|
+
standards environments get <env>
|
|
18
|
+
standards environments harnesses # each harness and its models
|
|
19
|
+
standards environments create --name ci --harness claude-code,codex \
|
|
20
|
+
--repo acme/api --repo acme/web --size default --max-size large --image code
|
|
21
|
+
standards environments create --name docs --harness standards --image documents
|
|
22
|
+
standards environments update <env> --size large # same flags as create
|
|
23
|
+
standards environments build <env>
|
|
24
|
+
standards environments archive <env> --yes
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- `--harness standards` accepts the built-in agent only.
|
|
28
|
+
- Sizes: `small`, `default`, `large`. Images: `code`, `documents`.
|
|
29
|
+
- A shared environment needs `--visibility workspace --confirm-shared`; the default is private.
|
|
30
|
+
|
|
31
|
+
## 2. Secrets
|
|
32
|
+
|
|
33
|
+
The value is read from **stdin only**: never pass it as an argument, never type it at a prompt.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
printf %s "$ANTHROPIC_API_KEY" | standards secrets set ANTHROPIC_API_KEY --environments all
|
|
37
|
+
printf %s "$OPENAI_API_KEY" | standards secrets set OPENAI_API_KEY --environments ci,staging
|
|
38
|
+
printf %s "$TOKEN" | standards secrets set GITHUB_TOKEN --private # only your sessions
|
|
39
|
+
printf %s "$TOKEN" | standards secrets set NPM_TOKEN --env ci --repository acme/web
|
|
40
|
+
printf %s "info" | standards secrets set LOG_LEVEL --plain --environments all # not sensitive
|
|
41
|
+
standards secrets list [--private | --env <env>] # never prints a value
|
|
42
|
+
standards secrets delete NPM_TOKEN --env ci --repository acme/web --yes
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- Workspace scope is the default. A **new** workspace secret reaches only the environments `--environments` names (`all`, or a list); without it, it reaches none, and the CLI says so. An **existing** key keeps its environments.
|
|
46
|
+
- `--private`: yours alone, every environment. `--env <env>`: one environment, optionally one `--repository`.
|
|
47
|
+
- Harness keys: `ANTHROPIC_API_KEY` or `CLAUDE_CODE_OAUTH_TOKEN` (claude-code), `OPENAI_API_KEY` (codex), `CURSOR_API_KEY` (cursor).
|
|
48
|
+
- A TTY stdin is refused. Run the command with a pipe.
|
|
49
|
+
- Logins (password + TOTP) are set in the app, not here.
|
|
50
|
+
|
|
51
|
+
## 3. Sessions
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
standards sessions start "Fix the failing test in api/" --harness claude-code --env ci \
|
|
55
|
+
[--model opus] [--size large] [--name fix-tests]
|
|
56
|
+
standards sessions start "<task>" --harness codex --detach # prints { id, url }, returns at once
|
|
57
|
+
standards sessions send <id> "Now open a pull request"
|
|
58
|
+
standards sessions follow <id> # follow the running or next turn
|
|
59
|
+
standards sessions list [--running] [--q <text>] [--limit 20]
|
|
60
|
+
standards sessions get <id> # { session, phase, lastReply, waiting, machine, links, decisions }
|
|
61
|
+
standards sessions messages <id> --last 5
|
|
62
|
+
standards sessions cancel <id>
|
|
63
|
+
standards sessions archive <id>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`start`, `send` and `follow` stream the turn and exit when it ends:
|
|
67
|
+
|
|
68
|
+
| Exit | Meaning | Next |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| 0 | Turn completed. | Read the reply; `send` the next message. |
|
|
71
|
+
| 1 | Turn failed, or `cancelled`. | `sessions get <id>`; `send` to retry. |
|
|
72
|
+
| 1 | `The session stream did not open after 10 attempts` (the API was unreachable for about 40 s; the turn may still run). | `sessions follow <id>`. Never `send`. |
|
|
73
|
+
| 3 | The agent parked on a decision; it is printed. | Answer it (§4), then `sessions follow <id>`. |
|
|
74
|
+
|
|
75
|
+
- Human output: the reply text, `→ tool <name>` per tool call, `↺ retrying step` when a step restarts (drop the text before it).
|
|
76
|
+
- `--format json`: NDJSON, `{"type":"text","text":…}`, `{"type":"tool","name":…}`, `{"type":"reset"}`, `{"type":"end","outcome":…}` (with `"phase":"parked"` when it parks), then one `{"type":"decision","decision":…}` per decision waiting.
|
|
77
|
+
- The session id and its app URL go to stderr before the turn streams.
|
|
78
|
+
- `follow` on an idle session with nothing waiting returns at once: 0 if its last turn completed, 1 otherwise.
|
|
79
|
+
- A stream that drops reconnects by itself; following is never a reason to resend.
|
|
80
|
+
- If `start` prints `Session created, message not sent`, run the `sessions send` command it names. Never `start` again.
|
|
81
|
+
- `--detach` sends and returns. Follow later with `sessions follow <id>`.
|
|
82
|
+
|
|
83
|
+
## 4. Decisions
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
standards decisions list [--all] # open by default; options numbered from 1
|
|
87
|
+
standards decisions show <id> # title, why, change, questions, links
|
|
88
|
+
standards decisions answer <id> …
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Answer by the decision's kind:
|
|
92
|
+
|
|
93
|
+
| Kind | Answer |
|
|
94
|
+
|---|---|
|
|
95
|
+
| approval | `answer <id> yes` / `answer <id> no --reason "too risky"` |
|
|
96
|
+
| question | one answer per question, in order: an option number (`2`), an option label (`sqlite`), `1,3` for a multi-select, or free text; `--skip` to skip them all |
|
|
97
|
+
| review | `answer <id> yes` / `answer <id> changes --feedback "tighten the tests"` |
|
|
98
|
+
| agent setup | set what it asks for, then `answer <id> continue` (or `skip`) |
|
|
99
|
+
| bundle setup | `answer <id> configure` |
|
|
100
|
+
| anything else | answered in the app: the CLI prints its URL |
|
|
101
|
+
|
|
102
|
+
- Quote a free-text answer: `answer <id> "Use Postgres 17"`.
|
|
103
|
+
- **A secret is never an answer.** For a setup decision, `decisions show <id>` prints the exact `printf %s "$VALUE" | standards secrets set <KEY> …` command per missing variable. Run it, then `answer <id> continue`.
|
|
104
|
+
- A decision no longer open is refused by the server; `decisions list` again.
|
|
105
|
+
|
|
106
|
+
## 5. Machines and links
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
standards machines list [--env <env>]
|
|
110
|
+
standards machines get <id> # machine, lease, pilot, links
|
|
111
|
+
standards machines runs <id>
|
|
112
|
+
standards machines destroy <id> --yes
|
|
113
|
+
standards links open <linkId> # prints one URL
|
|
114
|
+
standards links relaunch <linkId> # rerun the link's command, waking the machine
|
|
115
|
+
standards links extend <linkId> --for 2h # 30m, 2h, 1d; at most 1d
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
- Find a session's links with `sessions get <id>` (`links`).
|
|
119
|
+
- The URL `links open` prints carries a **single-use token valid 60 seconds**: it is a bearer credential. Open it right away. Never paste it into a message, a file, a log or a decision.
|
|
120
|
+
|
|
121
|
+
## 6. Monitoring
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
standards status # sessions running or parked, open decisions, running machines + links
|
|
125
|
+
standards --format json status # one object { sessions, decisions, machines }
|
|
126
|
+
standards watch [--interval 10s] # one line per change, until interrupted
|
|
127
|
+
standards watch --until decision # exits 3 once a decision is open, one open at start included
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- `watch` prints the current state as `snapshot` lines, then only transitions: `session <id> running→idle`, `session <id> → parked`, `session <id> failed`, `decision <id> opened "<title>"`, `decision <id> answered`, `link <slug> published <url>`, `machine <id> stopped`.
|
|
131
|
+
- `--interval` is at least `2s`. A failed poll prints `poll failed: <message>` and retries; 5 in a row exit 1.
|
|
132
|
+
- To wait for one session, use `sessions follow <id>`, not `watch`.
|
|
133
|
+
- Run `watch` in the background (a Monitor or a background shell) and react to its lines; do not poll `status` in a loop.
|
|
134
|
+
|
|
135
|
+
## 7. The loop end to end
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
printf %s "$ANTHROPIC_API_KEY" | standards secrets set ANTHROPIC_API_KEY --environments all
|
|
139
|
+
standards environments create --name api --harness claude-code --repo acme/api
|
|
140
|
+
standards sessions start "Upgrade the ORM and fix what breaks" --harness claude-code --env api
|
|
141
|
+
# exit 3 → a decision waits
|
|
142
|
+
standards decisions show <decisionId>
|
|
143
|
+
standards decisions answer <decisionId> 1
|
|
144
|
+
standards sessions follow <sessionId>
|
|
145
|
+
# exit 0 → done
|
|
146
|
+
standards sessions get <sessionId> # lastReply, links
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 8. Several sessions in parallel
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
for task in "Fix issue 101" "Fix issue 102" "Fix issue 103"; do
|
|
153
|
+
standards sessions start "$task" --harness claude-code --env api --detach
|
|
154
|
+
done # each prints { id, url }
|
|
155
|
+
standards watch --until decision # in the background; exits 3 when one asks
|
|
156
|
+
standards decisions list
|
|
157
|
+
standards decisions answer <id> …
|
|
158
|
+
standards watch --until decision # start watching again
|
|
159
|
+
standards status # where everything stands
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Keep the session ids the `--detach` runs print; `sessions list --running` finds them again.
|
package/guide/core.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# standards: core
|
|
2
|
+
|
|
3
|
+
The `standards` CLI drives a Standards workspace over its HTTP API. Every output is plain text or JSON. This guide matches the installed version; `standards guide --list` lists the other topics.
|
|
4
|
+
|
|
5
|
+
## Connect
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm i -g @standards/cli # or: npx @standards/cli <command>
|
|
9
|
+
standards login # a person at a terminal: browser login to hosted Standards
|
|
10
|
+
standards login --url https://<host>/v1 --name prod --key "$STANDARDS_API_KEY"
|
|
11
|
+
standards use prod # select a saved instance
|
|
12
|
+
standards instances # list saved instances
|
|
13
|
+
standards whoami # profile, API URL, key prefix; checks the key with one call
|
|
14
|
+
standards logout [name] # forget an instance (the current one by default)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- Without `--key`, `login` opens the browser, stores a personal key and a profile named after the workspace. That key mirrors the person minus key management: it lists and revokes only itself, and cannot create or detach keys. Without a terminal it exits 2: an agent uses `STANDARDS_API_KEY` or `--key`.
|
|
18
|
+
- With `--key`, `login` checks the key before saving it. Either way it selects the new instance.
|
|
19
|
+
- `logout` revokes a browser-login key on the server before forgetting the profile; a `--key` key is only forgotten.
|
|
20
|
+
- Profiles live in `~/.standards/config.json` (`STANDARDS_CONFIG_DIR` moves it).
|
|
21
|
+
- Resolution: `--api-url`/`--api-key` → `--instance <name>` → the current instance → `STANDARDS_API_URL`/`STANDARDS_API_KEY`.
|
|
22
|
+
- `login, use, instances, logout, help, init, guide` need no key. Every other command exits 2 when no instance is configured.
|
|
23
|
+
|
|
24
|
+
## Global flags
|
|
25
|
+
|
|
26
|
+
Put them before the command: `standards --format table records list contacts`.
|
|
27
|
+
|
|
28
|
+
| Flag | Meaning |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `--format json\|table\|csv` | Data commands default to `json` (pretty-printed). `table` truncates cells at 50 chars. |
|
|
31
|
+
| `--instance <name>` | Use a saved instance for this call only. |
|
|
32
|
+
| `--api-url <url>`, `--api-key <key>` | Bypass the saved profiles. |
|
|
33
|
+
| `--tenant <id>` | Multi-tenant setups; defaults to the primary tenant. |
|
|
34
|
+
|
|
35
|
+
Streaming commands (`sessions start|send|follow`, `watch`) and `status` write human text while `--format` is left at its default. Pass `--format json` explicitly to get NDJSON (streams) or one JSON object (`status`).
|
|
36
|
+
|
|
37
|
+
## Exit codes
|
|
38
|
+
|
|
39
|
+
| Code | Meaning |
|
|
40
|
+
|---|---|
|
|
41
|
+
| 0 | Success. |
|
|
42
|
+
| 1 | Refused or failed. The reason is on stderr as `✗ Error: <message>` (`✗ Error (<status>): …` for an HTTP refusal). |
|
|
43
|
+
| 2 | Not configured: no instance or key. Also `login` without a terminal and without `--key`. |
|
|
44
|
+
| 3 | Streaming commands and `watch --until decision` only: a decision is waiting. Run `standards decisions list`. |
|
|
45
|
+
|
|
46
|
+
One exception: `standards schema diff` exits 0 when equal, 1 when there are differences, 2 on error.
|
|
47
|
+
|
|
48
|
+
## Output tips
|
|
49
|
+
|
|
50
|
+
- Pipe JSON into `jq`: `standards records list contacts | jq '.data[].id'`.
|
|
51
|
+
- Collections are `{ data, page: { hasMore, total, countMode } }`. For a row table, select `.data` first.
|
|
52
|
+
- Single-quote JSON arguments: `--data '{"email":"a@b.com"}'`.
|
|
53
|
+
- Destructive commands refuse without `--yes`. Preview first with `--dry-run` where it exists.
|
|
54
|
+
- Never put a secret in argv. Pipe it: `printf %s "$VALUE" | standards secrets set KEY`.
|
|
55
|
+
|
|
56
|
+
## Command groups
|
|
57
|
+
|
|
58
|
+
| Group | What it does | Guide |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `records` | CRUD, search, export, move, sharing of records | `records` |
|
|
61
|
+
| `documents` | documents and their file packs | `records` |
|
|
62
|
+
| `files` | upload, list, download and delete uploaded files | `records` |
|
|
63
|
+
| `meetings` | read meetings and their transcripts | `records` |
|
|
64
|
+
| `schema` | inspect objects; `pull` and `diff` deployed source vs runtime | `schema-and-bundles` |
|
|
65
|
+
| `bundles` | sync, add and update bundles | `schema-and-bundles` |
|
|
66
|
+
| `skills` | pull, push, search, add workspace skills | `schema-and-bundles` |
|
|
67
|
+
| `mcp` | remote MCP servers mounted into agents | `schema-and-bundles` |
|
|
68
|
+
| `connectors` | mail and calendar connections | `schema-and-bundles` |
|
|
69
|
+
| `keys` | API keys: `list`, `create --name n [--role r] [--workspace] --yes`, `detach <id> --yes`, `revoke <id> --yes`. A browser-login profile only lists and revokes its own key. | |
|
|
70
|
+
| `invitations` | `list`, `create --email e --role <roleId> --yes`, `resend <id>`, `revoke <id> --yes`. A browser-login profile only lists and revokes its own key. | |
|
|
71
|
+
| `usage` | AI usage, wallet and quotas: `usage [--from <day>] [--to <day>] [--scope me\|workspace]` (current UTC month by default) | |
|
|
72
|
+
| `environments`, `secrets`, `machines`, `links` | where agents run and what they hold | `agents` |
|
|
73
|
+
| `sessions`, `decisions` | run agents and answer them | `agents` |
|
|
74
|
+
| `status`, `watch` | monitor sessions, decisions, machines | `agents` |
|
|
75
|
+
| `init`, `guide` | install the skill stub; print this guide | |
|
|
76
|
+
|
|
77
|
+
`usage` prints `{ usage, wallet, quotas }`. A part you may not read is `null`, with its reason on stderr; the command still exits 0 while one part succeeds.
|
|
78
|
+
|
|
79
|
+
`standards <group> --help` lists a group's commands and flags.
|
|
80
|
+
|
|
81
|
+
## The agent loop
|
|
82
|
+
|
|
83
|
+
1. `printf %s "$KEY" | standards secrets set ANTHROPIC_API_KEY --environments all` (once).
|
|
84
|
+
2. `standards sessions start "<task>" --harness claude-code` streams the turn.
|
|
85
|
+
3. Exit 0: done. Read the reply, or `standards sessions send <id> "<next>"`.
|
|
86
|
+
4. Exit 3: `standards decisions list`, then `standards decisions answer <id> …`.
|
|
87
|
+
5. `standards sessions follow <id>` resumes following after an answer.
|
|
88
|
+
6. Details and every flag: `standards guide agents`.
|
package/guide/records.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# standards: records, documents, meetings
|
|
2
|
+
|
|
3
|
+
Record data of the workspace's objects. Find object names with `standards schema list`.
|
|
4
|
+
|
|
5
|
+
## Read
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
standards records list contacts --limit 20 --offset 0 --sort created_at:desc \
|
|
9
|
+
--filter '{"and":[{"attribute":"status","operator":"eq","value":"active"}]}'
|
|
10
|
+
standards records list contacts --fields company,owner # hydrate only these references
|
|
11
|
+
standards records list contacts --fields "" # hydrate no reference
|
|
12
|
+
standards records list contacts --count exact # ask for page.total
|
|
13
|
+
standards records search contacts --query "alice" --limit 10
|
|
14
|
+
standards records get contacts <id>
|
|
15
|
+
standards records export contacts --columns name,email,company -o contacts.csv
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- `list` and `search` return `{ data, page: { hasMore, total, countMode } }`. Paging is offset only.
|
|
19
|
+
- `--sort` takes one `attribute:asc|desc` rule.
|
|
20
|
+
- `--filter` is the full filter state JSON. Single-quote it.
|
|
21
|
+
- `--count none|estimated|exact`: totals are opt-in; without it `page.total` is `null`. An unknown mode is refused.
|
|
22
|
+
- `export` writes CSV to stdout (or `-o <file>`): `--columns` in order, optional `--query`, `--filter`, `--sort`, `--timezone` (defaults to this machine's).
|
|
23
|
+
|
|
24
|
+
## Write
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
standards records create contacts --data '{"firstname":"Alice","email":"a@example.com"}'
|
|
28
|
+
standards records create pages --data '{"title":"Child"}' --parent <parentId> # hierarchical objects
|
|
29
|
+
standards records create contacts --data '{"firstname":"Alice"}' --metadata '{"brevoId":"42"}'
|
|
30
|
+
standards records update contacts <id> --data '{"firstname":"Alicia"}'
|
|
31
|
+
standards records set-logo companies <id> acme.com
|
|
32
|
+
standards records attach-document contacts <id> --file ./contract.pdf [--attribute <attr>] [--title <t>]
|
|
33
|
+
standards records attach-file contacts <id> --file-id <fileId> [--attribute <attr>] [--document-id <docId>] [--title <t>]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- `--metadata` is a JSON object of application state beside the values, set at creation. Filter on it with `metadata.<key>` (dotted for nested keys) and `is`, `is_not`, `is_empty`, `is_not_empty`.
|
|
37
|
+
- `attach-file` attaches a file already uploaded with `files upload`; `--document-id` appends it to that pack instead of creating one.
|
|
38
|
+
|
|
39
|
+
## Delete and move: preview first
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
standards records delete contacts <id1> <id2> --dry-run # broken links and descendants, deletes nothing
|
|
43
|
+
standards records delete contacts <id1> <id2> # one id: delete; several: bulk delete
|
|
44
|
+
standards records move pages <id> --parent <newParentId> --dry-run # who gains and loses access
|
|
45
|
+
standards records move pages <id> --parent <newParentId>
|
|
46
|
+
standards records move pages <id> --top-level
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- `move` needs exactly one of `--parent` or `--top-level`. It moves the subtree; the children take the new root's visibility, owner and grants.
|
|
50
|
+
- `move` does not ask. Run it with `--dry-run` first.
|
|
51
|
+
|
|
52
|
+
## Share a private record
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
standards records access list contacts <id>
|
|
56
|
+
standards records access grant contacts <id> <actorId> --role reader|editor
|
|
57
|
+
standards records access revoke contacts <id> <actorId>
|
|
58
|
+
standards records access clear contacts <id> # remove every manual share
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Documents
|
|
62
|
+
|
|
63
|
+
A document lives on a record's document attribute and holds a pack of files.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
standards documents list --limit 20
|
|
67
|
+
standards documents get <docId>
|
|
68
|
+
standards documents create --title "Q1 report" --object contacts --record <id> --attribute files
|
|
69
|
+
standards documents update <docId> --title "Q1 report (final)"
|
|
70
|
+
standards documents delete <docId>
|
|
71
|
+
standards documents files <docId> # the pack, in position order
|
|
72
|
+
standards documents add-file <docId> --file-id <fileId>
|
|
73
|
+
standards documents remove-file <docId> <fileId>
|
|
74
|
+
standards documents content <docId> # aggregated OCR text
|
|
75
|
+
standards documents preview <docId>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
To upload a local file, use `records attach-document`.
|
|
79
|
+
|
|
80
|
+
## Files
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
standards files upload ./a.pdf ./b.png # private; prints the stored files and their ids
|
|
84
|
+
standards files list --limit 20 [--folder <path>] [--mime-type application/pdf]
|
|
85
|
+
standards files list --ids <id1>,<id2> # exactly those you can see, in that order
|
|
86
|
+
standards files get <fileId>
|
|
87
|
+
standards files content <fileId> -o ./a.pdf # the bytes (stdout without -o)
|
|
88
|
+
standards files delete <fileId> --yes # your own loose files only; a pack member is a 409
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Meetings (read only)
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
standards meetings list --search kickoff --since 2026-08-01T00:00:00Z --order asc --limit 20
|
|
95
|
+
standards meetings get <meetingId>
|
|
96
|
+
standards meetings for-record <recordId> --email-attributes email,work_email [--count exact]
|
|
97
|
+
standards meetings transcript <meetingId>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`for-record` returns nothing until at least one email attribute is named.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# standards: schema, bundles, skills, MCP, connectors
|
|
2
|
+
|
|
3
|
+
## Schema (read only)
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
standards schema list # every object
|
|
7
|
+
standards schema inspect contacts # attributes, types, views (name or id)
|
|
8
|
+
standards schema groups # bundles that own objects, with their label
|
|
9
|
+
standards schema pull # deployed source vs shared runtime, as reconciliation guidance
|
|
10
|
+
standards schema diff # the differences, one per line
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
- `pull` and `diff` read what is deployed, not unbuilt local TypeScript.
|
|
14
|
+
- `--format json` makes `pull` print the canonical shared state and `diff` the canonical differences.
|
|
15
|
+
- `schema diff` exits 0 when equal, 1 when there are differences, 2 on error (the CLI's one exception to its exit codes).
|
|
16
|
+
- The CLI never changes schema directly. Change the project's bundles and sync them.
|
|
17
|
+
|
|
18
|
+
## Bundles
|
|
19
|
+
|
|
20
|
+
A bundle declares objects, views, pages and agents.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
standards bundles sync [--cwd ./apps/crm] # discover standards/bundles/*.ts, order by `uses`, sync each
|
|
24
|
+
standards bundles list # installed: name, mode, origin, short hash, installedAt
|
|
25
|
+
standards bundles status # current, update or repair, and what depends on each
|
|
26
|
+
standards bundles available --locale fr # bundles the workspace may add as copies it owns
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Add and update in two steps: plan with `--dry-run`, then apply with the plan's `fingerprint`.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
standards bundles add crm --with-samples --dry-run # plan: new and colliding pieces + fingerprint
|
|
33
|
+
standards bundles add crm --with-samples --fingerprint <fp> \
|
|
34
|
+
--decision <pieceId>=bind --decision <pieceId>=rename:opportunities --decision <pieceId>=skip
|
|
35
|
+
standards bundles update crm --dry-run # pieces by group + fingerprint
|
|
36
|
+
standards bundles update crm --fingerprint <fp> --take deals --skip-missing notes --decision companies=bind
|
|
37
|
+
standards bundles remove <name> --yes
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- Without `--dry-run`, `--fingerprint` is required. Pass the same names and flags as the plan.
|
|
41
|
+
- The server refuses a stale fingerprint: the workspace changed since the plan. Plan again.
|
|
42
|
+
- `--decision` settles one collision: `bind`, `skip` or `rename:<name>`.
|
|
43
|
+
- `update` keeps a piece you changed unless `--take` names it, restores a missing piece unless `--skip-missing` names it, and never removes a piece.
|
|
44
|
+
- `remove` demotes a synced bundle's objects to workspace-owned and deletes nothing. An added bundle is uninstalled from the app's Bundles window.
|
|
45
|
+
- `sync` prints `<name> applied|unchanged <hash7>` per bundle. A 409 names the owner of the conflicting piece.
|
|
46
|
+
|
|
47
|
+
## Skills
|
|
48
|
+
|
|
49
|
+
Workspace skills are Agent Skills folders (`SKILL.md` and its files).
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
standards skills pull ./skills [--name onboarding] # write each skill as <dir>/<name>/
|
|
53
|
+
standards skills push ./skills [--replace] # import folders, all or nothing
|
|
54
|
+
standards skills search "invoice follow-up" # the official catalogue
|
|
55
|
+
standards skills search "invoice follow-up" --community # skills.sh
|
|
56
|
+
standards skills search --community [--trending] # skills.sh leaderboard, no query
|
|
57
|
+
standards skills add acme/skills@invoice-followup --dry-run # what the source would install
|
|
58
|
+
standards skills add acme/skills@invoice-followup[#ref]
|
|
59
|
+
standards skills update invoice-followup [--discard-changes]
|
|
60
|
+
standards skills refresh # check private catalogue skills against their sources
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- A search without a query needs `--community`.
|
|
64
|
+
- A result's `state` is `available`, `installed`, `name_taken` or `unavailable` (see `reason`).
|
|
65
|
+
- `push` skips hidden entries and symbolic links and reports each one.
|
|
66
|
+
|
|
67
|
+
## MCP servers
|
|
68
|
+
|
|
69
|
+
Remote MCP servers whose tools are mounted into the workspace's agents.
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
standards mcp list
|
|
73
|
+
standards mcp catalog
|
|
74
|
+
standards mcp connect --slug context7 --name Context7 --url https://mcp.context7.com/mcp \
|
|
75
|
+
[--catalog-entry context7] [--visibility workspace|private] \
|
|
76
|
+
[--auth-type header --header-name X-API-KEY --secret "$TOKEN"]
|
|
77
|
+
standards mcp refresh <id> # re-discover tools
|
|
78
|
+
standards mcp rename <id> "New name" # the slug and tool prefix never change
|
|
79
|
+
standards mcp trust <id> [--revoke] # run its tools without per-call approval
|
|
80
|
+
standards mcp disconnect <id> --yes
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Connectors
|
|
84
|
+
|
|
85
|
+
Mail and calendar connections. The account itself is connected from the app (Connectors in the sidebar), never from the terminal.
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
standards connectors providers # providers this deployment can connect
|
|
89
|
+
standards connectors list [--scope tenant|actor]
|
|
90
|
+
standards connectors connect --provider gmail [--capabilities modify,send] [--yes] # checks, then points to the app
|
|
91
|
+
standards connectors disconnect <id> --yes [--remove-imported]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
`disconnect` keeps what the connection imported unless `--remove-imported` is passed.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@standards/cli",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.425",
|
|
4
4
|
"description": "CLI tool to interact with Standards API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"types": "./dist/index.d.mts",
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
19
|
+
"guide",
|
|
19
20
|
"LICENSE",
|
|
20
21
|
"README.md"
|
|
21
22
|
],
|
|
@@ -23,12 +24,14 @@
|
|
|
23
24
|
"node": ">=22"
|
|
24
25
|
},
|
|
25
26
|
"dependencies": {
|
|
26
|
-
"@standards/client": "1.0.0-alpha.
|
|
27
|
-
"@standards/constants": "1.0.0-alpha.
|
|
28
|
-
"@standards/schema": "1.0.0-alpha.
|
|
27
|
+
"@standards/client": "1.0.0-alpha.425",
|
|
28
|
+
"@standards/constants": "1.0.0-alpha.425",
|
|
29
|
+
"@standards/schema": "1.0.0-alpha.425",
|
|
29
30
|
"cli-table3": "^0.6.5",
|
|
30
31
|
"commander": "^13.1.0",
|
|
31
|
-
"jiti": "2.7.0"
|
|
32
|
+
"jiti": "2.7.0",
|
|
33
|
+
"oauth4webapi": "3.8.8",
|
|
34
|
+
"open": "11.0.4"
|
|
32
35
|
},
|
|
33
36
|
"devDependencies": {
|
|
34
37
|
"@types/node": "^25.6.0",
|