@specset/cli 0.6.0 → 2.0.0
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 +103 -201
- package/README.md +56 -2
- package/THIRD_PARTY_NOTICES.md +7 -1
- package/dist/main.js +40827 -14280
- package/package.json +8 -4
- package/plugin/specset/.claude-plugin/plugin.json +2 -2
- package/plugin/specset/.codex-plugin/plugin.json +7 -4
- package/plugin/specset/README.md +1 -0
- package/plugin/specset/assets/icon.png +0 -0
- package/plugin/specset/skills/specset/SKILL.md +24 -5
- package/plugin/specset/skills/specset-admin/SKILL.md +21 -7
- package/plugin/specset/skills/specset-agent/SKILL.md +138 -1
- package/plugin/specset/skills/specset-closeout/SKILL.md +300 -52
- package/plugin/specset/skills/specset-issues/SKILL.md +27 -0
- package/plugin/specset/skills/specset-projects/SKILL.md +42 -17
- package/plugin/specset/skills/specset-search/SKILL.md +23 -5
- package/plugin/specset/skills/specset-submittals/SKILL.md +4 -2
- package/plugin/specset/skills/specset-tools/SKILL.md +60 -21
- package/skills/specset/SKILL.md +24 -5
- package/skills/specset-admin/SKILL.md +21 -7
- package/skills/specset-agent/SKILL.md +138 -1
- package/skills/specset-closeout/SKILL.md +300 -52
- package/skills/specset-issues/SKILL.md +27 -0
- package/skills/specset-projects/SKILL.md +42 -17
- package/skills/specset-search/SKILL.md +23 -5
- package/skills/specset-submittals/SKILL.md +4 -2
- package/skills/specset-tools/SKILL.md +60 -21
package/LICENSE
CHANGED
|
@@ -1,201 +1,103 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
the Derivative Works; and
|
|
105
|
-
|
|
106
|
-
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
-
distribution, then any Derivative Works that You distribute must
|
|
108
|
-
include a readable copy of the attribution notices contained
|
|
109
|
-
within such NOTICE file, excluding those notices that do not
|
|
110
|
-
pertain to any part of the Derivative Works, in at least one
|
|
111
|
-
of the following places: within a NOTICE text file distributed
|
|
112
|
-
as part of the Derivative Works; within the Source form or
|
|
113
|
-
documentation, if provided along with the Derivative Works; or,
|
|
114
|
-
within a display generated by the Derivative Works, if and
|
|
115
|
-
wherever such third-party notices normally appear. The contents
|
|
116
|
-
of the NOTICE file are for informational purposes only and
|
|
117
|
-
do not modify the License. You may add Your own attribution
|
|
118
|
-
notices within Derivative Works that You distribute, alongside
|
|
119
|
-
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
-
that such additional attribution notices cannot be construed
|
|
121
|
-
as modifying the License.
|
|
122
|
-
|
|
123
|
-
You may add Your own copyright statement to Your modifications and
|
|
124
|
-
may provide additional or different license terms and conditions
|
|
125
|
-
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
-
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
-
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
-
the conditions stated in this License.
|
|
129
|
-
|
|
130
|
-
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
-
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
-
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
-
this License, without any additional terms or conditions.
|
|
134
|
-
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
-
the terms of any separate license agreement you may have executed
|
|
136
|
-
with Licensor regarding such Contributions.
|
|
137
|
-
|
|
138
|
-
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
-
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
-
except as required for reasonable and customary use in describing the
|
|
141
|
-
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
-
|
|
143
|
-
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
-
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
-
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
-
implied, including, without limitation, any warranties or conditions
|
|
148
|
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
-
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
-
appropriateness of using or redistributing the Work and assume any
|
|
151
|
-
risks associated with Your exercise of permissions under this License.
|
|
152
|
-
|
|
153
|
-
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
-
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
-
unless required by applicable law (such as deliberate and grossly
|
|
156
|
-
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
-
liable to You for damages, including any direct, indirect, special,
|
|
158
|
-
incidental, or consequential damages of any character arising as a
|
|
159
|
-
result of this License or out of the use or inability to use the
|
|
160
|
-
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
-
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
-
other commercial damages or losses), even if such Contributor
|
|
163
|
-
has been advised of the possibility of such damages.
|
|
164
|
-
|
|
165
|
-
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
-
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
-
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
-
or other liability obligations and/or rights consistent with this
|
|
169
|
-
License. However, in accepting such obligations, You may act only
|
|
170
|
-
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
-
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
-
defend, and hold each Contributor harmless for any liability
|
|
173
|
-
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
-
of your accepting any such warranty or additional liability.
|
|
175
|
-
|
|
176
|
-
END OF TERMS AND CONDITIONS
|
|
177
|
-
|
|
178
|
-
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
-
|
|
180
|
-
To apply the Apache License to your work, attach the following
|
|
181
|
-
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
-
replaced with your own identifying information. (Don't include
|
|
183
|
-
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
-
comment syntax for the file format. We also recommend that a
|
|
185
|
-
file or class name and description of purpose be included on the
|
|
186
|
-
same "printed page" as the copyright notice for easier
|
|
187
|
-
identification within third-party archives.
|
|
188
|
-
|
|
189
|
-
Copyright 2026 Specset
|
|
190
|
-
|
|
191
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
-
you may not use this file except in compliance with the License.
|
|
193
|
-
You may obtain a copy of the License at
|
|
194
|
-
|
|
195
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
-
|
|
197
|
-
Unless required by applicable law or agreed to in writing, software
|
|
198
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
-
See the License for the specific language governing permissions and
|
|
201
|
-
limitations under the License.
|
|
1
|
+
Elastic License 2.0 (ELv2)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Spot.xyz Corporation DBA Specset
|
|
4
|
+
|
|
5
|
+
This distribution bundles third-party open-source packages; their license
|
|
6
|
+
terms and copyright notices are reproduced in THIRD_PARTY_NOTICES.md and
|
|
7
|
+
continue to govern those components.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Elastic License 2.0
|
|
12
|
+
|
|
13
|
+
URL: https://www.elastic.co/licensing/elastic-license
|
|
14
|
+
|
|
15
|
+
## Acceptance
|
|
16
|
+
|
|
17
|
+
By using the software, you agree to all of the terms and conditions below.
|
|
18
|
+
|
|
19
|
+
## Copyright License
|
|
20
|
+
|
|
21
|
+
The licensor grants you a non-exclusive, royalty-free, worldwide,
|
|
22
|
+
non-sublicensable, non-transferable license to use, copy, distribute, make
|
|
23
|
+
available, and prepare derivative works of the software, in each case subject to
|
|
24
|
+
the limitations and conditions below.
|
|
25
|
+
|
|
26
|
+
## Limitations
|
|
27
|
+
|
|
28
|
+
You may not provide the software to third parties as a hosted or managed
|
|
29
|
+
service, where the service provides users with access to any substantial set of
|
|
30
|
+
the features or functionality of the software.
|
|
31
|
+
|
|
32
|
+
You may not move, change, disable, or circumvent the license key functionality
|
|
33
|
+
in the software, and you may not remove or obscure any functionality in the
|
|
34
|
+
software that is protected by the license key.
|
|
35
|
+
|
|
36
|
+
You may not alter, remove, or obscure any licensing, copyright, or other notices
|
|
37
|
+
of the licensor in the software. Any use of the licensor’s trademarks is subject
|
|
38
|
+
to applicable law.
|
|
39
|
+
|
|
40
|
+
## Patents
|
|
41
|
+
|
|
42
|
+
The licensor grants you a license, under any patent claims the licensor can
|
|
43
|
+
license, or becomes able to license, to make, have made, use, sell, offer for
|
|
44
|
+
sale, import and have imported the software, in each case subject to the
|
|
45
|
+
limitations and conditions in this license. This license does not cover any
|
|
46
|
+
patent claims that you cause to be infringed by modifications or additions to
|
|
47
|
+
the software. If you or your company make any written claim that the software
|
|
48
|
+
infringes or contributes to infringement of any patent, your patent license for
|
|
49
|
+
the software granted under these terms ends immediately. If your company makes
|
|
50
|
+
such a claim, your patent license ends immediately for work on behalf of your
|
|
51
|
+
company.
|
|
52
|
+
|
|
53
|
+
## Notices
|
|
54
|
+
|
|
55
|
+
You must ensure that anyone who gets a copy of any part of the software from you
|
|
56
|
+
also gets a copy of these terms.
|
|
57
|
+
|
|
58
|
+
If you modify the software, you must include in any modified copies of the
|
|
59
|
+
software prominent notices stating that you have modified the software.
|
|
60
|
+
|
|
61
|
+
## No Other Rights
|
|
62
|
+
|
|
63
|
+
These terms do not imply any licenses other than those expressly granted in
|
|
64
|
+
these terms.
|
|
65
|
+
|
|
66
|
+
## Termination
|
|
67
|
+
|
|
68
|
+
If you use the software in violation of these terms, such use is not licensed,
|
|
69
|
+
and your licenses will automatically terminate. If the licensor provides you
|
|
70
|
+
with a notice of your violation, and you cease all violation of this license no
|
|
71
|
+
later than 30 days after you receive that notice, your licenses will be
|
|
72
|
+
reinstated retroactively. However, if you violate these terms after such
|
|
73
|
+
reinstatement, any additional violation of these terms will cause your licenses
|
|
74
|
+
to terminate automatically and permanently.
|
|
75
|
+
|
|
76
|
+
## No Liability
|
|
77
|
+
|
|
78
|
+
*As far as the law allows, the software comes as is, without any warranty or
|
|
79
|
+
condition, and the licensor will not be liable to you for any damages arising
|
|
80
|
+
out of these terms or the use or nature of the software, under any kind of
|
|
81
|
+
legal claim.*
|
|
82
|
+
|
|
83
|
+
## Definitions
|
|
84
|
+
|
|
85
|
+
The **licensor** is the entity offering these terms, and the **software** is the
|
|
86
|
+
software the licensor makes available under these terms, including any portion
|
|
87
|
+
of it.
|
|
88
|
+
|
|
89
|
+
**you** refers to the individual or entity agreeing to these terms.
|
|
90
|
+
|
|
91
|
+
**your company** is any legal entity, sole proprietorship, or other kind of
|
|
92
|
+
organization that you work for, plus all organizations that have control over,
|
|
93
|
+
are under the control of, or are under common control with that
|
|
94
|
+
organization. **control** means ownership of substantially all the assets of an
|
|
95
|
+
entity, or the power to direct its management and policies by vote, contract, or
|
|
96
|
+
otherwise. Control can be direct or indirect.
|
|
97
|
+
|
|
98
|
+
**your licenses** are all the licenses granted to you for the software under
|
|
99
|
+
these terms.
|
|
100
|
+
|
|
101
|
+
**use** means anything you do with the software requiring one of your licenses.
|
|
102
|
+
|
|
103
|
+
**trademark** means trademarks, service marks, and similar rights.
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ Then ask something like _"What mechanical equipment is scheduled on level 2 of m
|
|
|
33
33
|
npm install -g @specset/cli@latest
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
Requires Node.js
|
|
36
|
+
Requires Node.js 22 or newer. CLI 1.0 is the last release that runs on Node.js 20.
|
|
37
37
|
|
|
38
38
|
## Quickstart
|
|
39
39
|
|
|
@@ -60,6 +60,10 @@ specset agent chat --project <projectId> -m "What mechanical equipment is schedu
|
|
|
60
60
|
|
|
61
61
|
Run `specset --help` or `specset <command> --help` for the full command reference.
|
|
62
62
|
|
|
63
|
+
For a drawing coordination project, use `specset projects create 'Project name' --json`, then `projects add-docs --project <id> ./drawings.pdf` and `projects ingest-status --project <id> --wait`. New projects automatically support drawing graphs. This CLI requires the drawing graph GA server schema (`Project.drawingGraphEnabled`); the deprecated graph opt-in flags have been removed.
|
|
64
|
+
|
|
65
|
+
Source references returned by GraphQL, agent chat, and retrieval tools are shown as clickable `https://app.specbook.ai/go/...` links. The same links can be passed back into tool, GraphQL ID, and download arguments; ordinary GraphQL `id` fields remain UUIDs.
|
|
66
|
+
|
|
63
67
|
## Use with Claude, Codex, and ChatGPT
|
|
64
68
|
|
|
65
69
|
The package bundles a family of [Agent Skills](https://agentskills.io) that teach AI agents how to drive this CLI safely — a core `specset` skill (setup, auth, GraphQL) plus domain skills for search, project setup, submittals, RFIs, closeout data, agent chat, and org administration:
|
|
@@ -88,14 +92,41 @@ specset skill print specset-submittals
|
|
|
88
92
|
|
|
89
93
|
Updating an agent plugin does not upgrade an existing global CLI. Run `npm install -g @specset/cli@latest`, then re-run `specset skill install --target <agent>` to refresh direct-installed skill copies.
|
|
90
94
|
|
|
95
|
+
## Local runner
|
|
96
|
+
|
|
97
|
+
`specset agent serve` connects your machine to Specset. Conversations you switch to **Execute locally** run their model calls through your own Claude Code or Codex, while Specset keeps the agent loop, its tools, approvals and the transcript:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
specset harness install codex # once, for Codex; Claude uses the runtime bundled with the CLI
|
|
101
|
+
specset agent serve --host <deployment> --org <slug>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Turn on **Native tools** in the conversation's Settings to let the harness run shell commands and edit files in a private per-run workspace; every command and edit is mirrored into the conversation, the `specset` CLI is logged in there for downloading project material, and files written under `out/` are attached to the thread. Requires Node.js 22 or newer.
|
|
105
|
+
|
|
91
106
|
## MCP transports and files
|
|
92
107
|
|
|
93
108
|
The Codex/Claude plugin uses the local `specset mcp` stdio server. Hosted clients use the server's stateless Streamable HTTP endpoint at `https://<host>/mcp`; OAuth consent selects and binds the organization. Both dispatch through the same allowlisted Specset tool registry.
|
|
94
109
|
|
|
95
|
-
Local agents can upload with `specset files upload <path
|
|
110
|
+
Local agents can upload with `specset files upload <path>`, download project assets with the entity download commands, and pull a whole project's spec sections, drawing sheets, and documents into a directory with `specset projects hydrate <project> --out <dir>`. The hosted endpoint exposes OpenAI-compatible `uploadFile` and `getFileDownload` tools; uploads stream from the host's short-lived file URL into Specset storage.
|
|
96
111
|
|
|
97
112
|
The hosted endpoint exposes MCP OAuth 2.1 discovery, Client ID Metadata Document support, PKCE authorization, short-lived audience-bound access tokens, and rotating refresh tokens. First-party clients may also use a Specset session bearer token with an explicit organization header.
|
|
98
113
|
|
|
114
|
+
## Compatibility
|
|
115
|
+
|
|
116
|
+
Organization listing, switching, and slug resolution require the me.organizationChoices API from PR #972, first released in CLI 2.0.0.
|
|
117
|
+
|
|
118
|
+
The managed Codex install pins the native `@openai/codex` runtime beside the managed adapter package (see `HARNESS_CATALOG`), because the adapter's caret range can resolve to a build too old for the current model line. `specset harness list` shows both pins, and `specset harness install codex` updates a drifted native runtime in place.
|
|
119
|
+
|
|
120
|
+
The CLI trusts the operating system's certificate store in addition to Node's bundled roots (Node 22.19+ / 24.5+), so deployments behind a locally trusted CA (a `*.specset.dev` dev host signed by Caddy's local root, a corporate TLS proxy) work without `NODE_USE_SYSTEM_CA`. A transport failure names its cause (DNS, refused connection, untrusted certificate) instead of a bare `fetch failed`.
|
|
121
|
+
|
|
122
|
+
CLI 1.x requires a Specset deployment that serves public source links (the `/go` routes, `SearchResultItem.id`, and server-side link translation). Deploy the server before publishing or upgrading to a 1.x CLI; against older deployments, stay on the 0.x line.
|
|
123
|
+
|
|
124
|
+
CLI 2.0 requires Node.js 22 or newer and a Specset deployment from 2026-10-10 or later, which app.specset.com is. Existing commands depend on the newer server too: `org list`, `org use` and every command's `--org` resolution query `me.organizationChoices` (PR #972), and the new commands (personal runners, project seeding, submittal reviews, the superadmin namespace) call APIs deployed by that date. On Node.js 20, or against an older deployment, stay on CLI 1.0.0 until both are upgraded.
|
|
125
|
+
|
|
126
|
+
`agent start --type ProjectReview` requires the server's Project Review agent registration. Project Review has no separate project toggle or superadmin launch requirement. These command and skill additions ride the next CLI release; no npm version is bumped here.
|
|
127
|
+
|
|
128
|
+
Local execution requires this branch's personal-runner and local-inference API, including the `AddRunnerOutputIdentity` migration (run outputs attach with their workspace path and checksum). Deploy these server changes before releasing this CLI. With native tools on, the thread's Permissions setting maps to Claude's permission modes and to Codex's sandbox (Read only, workspace-write for Edits and Auto, full access for Full).
|
|
129
|
+
|
|
99
130
|
## Configuration
|
|
100
131
|
|
|
101
132
|
- Credentials and the active host/org live in `~/.config/specset/config.yml` (mode 0600).
|
|
@@ -106,4 +137,27 @@ The hosted endpoint exposes MCP OAuth 2.1 discovery, Client ID Metadata Document
|
|
|
106
137
|
|
|
107
138
|
Questions or issues: [https://specset.com](https://specset.com)
|
|
108
139
|
|
|
140
|
+
`@specset/cli` is distributed under the Elastic License 2.0 — see `LICENSE`.
|
|
109
141
|
Third-party license attributions are listed in `THIRD_PARTY_NOTICES.md`.
|
|
142
|
+
|
|
143
|
+
### Personal machine runners
|
|
144
|
+
|
|
145
|
+
`specset agent serve --host <deployment>` registers a personal runner while the command is running. Organization selection uses `--org <slug|id>`, the selected organization on that host, or the sole membership. With multiple memberships and no selection, choose an org explicitly. Omitting `--project` makes the runner available throughout that org; `--project <id|link>[,<id|link>…]` restricts it to selected projects. In a local thread, select that machine to authorize the root run and its descendants. Multiple comma-separated project IDs can be allowed; registration is restricted to the signed-in user and organization. `--thread <id>` assigns an existing root immediately; `--message "…" --type DrawingReview` creates an assigned root in a single selected project.
|
|
146
|
+
|
|
147
|
+
The native runtime is selected once before registration: `--harness` overrides the host’s saved default, otherwise the sole available native runtime is selected. Claude uses the platform binary bundled with the CLI’s Claude SDK, then native `claude` on PATH. Codex uses `CODEX_PATH`, then native `codex` on PATH, then the native runtime provided by `specset harness install codex`. When both native runtimes are available, choose one explicitly. Save a default with `specset harness use codex --host <deployment>` (or `claude`); `specset harness use auto --host <deployment>` clears it. `specset harness list --host <deployment>` reports the managed installations.
|
|
148
|
+
|
|
149
|
+
Each process serves one host and organization. For separate worktrees, run `specset agent serve --host app2.specset.dev` and `specset agent serve --host app3.specset.dev` in separate terminals. Host precedence is `--host`, a recognized pasted thread/project link, `SPECSET_HOST`, then the active host. Login, selected org, and saved harness default are stored per host. The resolved host, org, harness and scope are printed at startup and stay fixed until exit. Changing the CLI’s active host/org does not retarget a running process. Registrations, run workspaces and cancellation belong to that deployment; concurrency limits apply separately to each runner, while machine resources and provider quotas may be shared.
|
|
150
|
+
|
|
151
|
+
Temporal owns agent execution, workflow fan-out, tool dispatch and approvals. The personal runner executes individual model calls, including drawing-coordination assessments, using the native Claude SDK or Codex app-server. Images and structured output cross the same model boundary. Independent calls use separate native sessions; a session stays alive across a tool batch until the server supplies all authorized results. For a bounded review, `--stopAfterIssues 2` stops the root and its children after two newly filed issues; an in-flight batch can exceed the threshold. `--concurrency` defaults to 5 active model calls. Tool and approval waits release compute capacity, so `--concurrency 1` can process children and nested assessment calls. `--maxThreads` (default 100) and `--maxRunSeconds` (default 3600) bound each authorization. Stop cancels the subtree, queued jobs and workflow tools; it never falls back to cloud execution. A lost native continuation fails instead of replaying possible writes. Restarting the command registers a new machine session and requires a new root assignment.
|
|
152
|
+
|
|
153
|
+
At startup the runner lists the harness's models (Codex's app-server catalog, Claude's supported models) and reports them with its registration; the conversation's Settings shows that list under the harness model and pins a choice per harness for the thread, with an effort level from the chosen model's reported levels for its agent steps. `--model` on the machine pins one model for every job instead, and Settings then shows it as fixed. Specset's `--autoApprove` message setting controls server tool approval. Specset tools execute on the server, with approvals in the web app; the native harness receives their results through the runner. Native tools are off unless the conversation's **Native tools** setting is on; then the harness may run shell commands and read or edit files in the run's workspace within the thread's Permissions setting, every action is mirrored into the conversation as a local action, and native sub-agents stay off. Each run (root thread and its children) gets one workspace under `--directory` (`~/.specset/personal-runs/<runner>/runs/<thread>/` by default) with `specs/`, `drawings/`, `docs/`, `inputs/` and `out/`; the harness downloads what it needs with the `specset` CLI, which is logged in as you for that host and organization inside the session's private home, and `.specset/manifest.json` records each file's Specset link, version id and checksum so a repeated download is skipped unless the version changed. Files under `out/` are uploaded and attached to the root thread after each turn that used native tools and when the run ends; the workspace is removed once its run has ended (checked when the runner starts and stops and every ten minutes), or after seven untouched days. Jobs receive a minimal environment and private harness configuration. Claude shares the selected native credential store and refresh lock while settings stay private. Codex uses an authentication-only native process for the selected login; inference sessions receive temporary access tokens and never copy refresh credentials. User settings, hooks, plugins, and other MCP servers are not loaded into inference sessions. Log in with `claude auth login` before starting a Claude runner. This is a personal runner executing selected project content as the local OS user, **not an OS sandbox**: native harness permissions and the host remain security boundaries. Use a separate OS account or isolated host when that content is untrusted. Do not treat this as an organization-wide shared runner.
|
|
154
|
+
|
|
155
|
+
Personal inference sessions set Claude's `persistSession: false` and Codex's `ephemeral: true`, keeping them out of the respective desktop histories. Specset remains the transcript and approval record.
|
|
156
|
+
|
|
157
|
+
File attachments and file tool results share a transport that preserves their bytes, MIME type and optional filename. Claude receives PDFs natively; Codex receives server-rendered PDF pages, capped at 20 pages per request across all PDFs. Both receive images and UTF-8 text files. Other binary formats fail explicitly until a compatible reader or conversion is available.
|
|
158
|
+
|
|
159
|
+
Requires the personal-runner and local-inference GraphQL operations, first released in CLI 2.0.0.
|
|
160
|
+
|
|
161
|
+
Inspect registrations with `specset agent runners list --host <deployment> --org <slug> --json`. Revoke an online or offline runner remotely with `specset agent runners revoke <runner-id>`; this stops its outstanding jobs.
|
|
162
|
+
|
|
163
|
+
The server keeps orchestration, retrieval, tool authorization and persistence. Authorized model calls route through the selected runner, including workflow utilities that previously called cloud providers directly.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -4,15 +4,19 @@ The `@specset/cli` distribution bundles the following open-source packages
|
|
|
4
4
|
into its executable (`dist/main.js`). Their license terms and copyright
|
|
5
5
|
notices are reproduced below. (`open` is installed from npm as a regular
|
|
6
6
|
dependency and is not redistributed in the bundle; its MIT license ships with
|
|
7
|
-
that package.
|
|
7
|
+
that package. The Claude Code and Codex ACP adapters that `specset harness
|
|
8
|
+
install` fetches are installed from npm into `~/.specset/harness` at the
|
|
9
|
+
user's request and are not part of this distribution.)
|
|
8
10
|
|
|
9
11
|
| Package | Version | License |
|
|
10
12
|
|---|---|---|
|
|
11
13
|
| `@0no-co/graphql.web` | 1.x | MIT |
|
|
14
|
+
| `@agentclientprotocol/sdk` | 1.x | Apache-2.0 |
|
|
12
15
|
| `@stricli/core` | 1.x | Apache-2.0 |
|
|
13
16
|
| `gql.tada` | 1.x | MIT |
|
|
14
17
|
| `graphql` | 16.x | MIT |
|
|
15
18
|
| `graphql-request` | 7.x | MIT |
|
|
19
|
+
| `graphql-ws` | 6.x | MIT |
|
|
16
20
|
| `yaml` | 2.x | ISC |
|
|
17
21
|
|
|
18
22
|
---
|
|
@@ -25,6 +29,7 @@ Applies to:
|
|
|
25
29
|
- `gql.tada` — Copyright (c) 0no.co
|
|
26
30
|
- `graphql` — Copyright (c) GraphQL Contributors
|
|
27
31
|
- `graphql-request` — Copyright (c) 2022 Jason Kuhrt
|
|
32
|
+
- `graphql-ws` — Copyright (c) 2020-2025 Denis Badurina
|
|
28
33
|
|
|
29
34
|
```
|
|
30
35
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
@@ -74,6 +79,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
74
79
|
|
|
75
80
|
Applies to:
|
|
76
81
|
|
|
82
|
+
- `@agentclientprotocol/sdk` — Copyright (c) Agent Client Protocol contributors
|
|
77
83
|
- `@stricli/core` — Copyright (c) Bloomberg Finance L.P.
|
|
78
84
|
|
|
79
85
|
The full Apache License, Version 2.0 is available at
|