@usecoil/skill-claude 0.1.2 → 0.1.3
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/README.md +1 -1
- package/bin/install.mjs +12 -2
- package/package.json +2 -2
- package/skill/SKILL.md +31 -2
- package/skill/references/api-endpoints.md +45 -0
- package/skill/references/api-fields.md +23 -2
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ installed CLI and installs the compatible `@usecoil/cli` package when
|
|
|
7
7
|
`coil` is not already available:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npx --yes @usecoil/skill-claude@0.1.
|
|
10
|
+
npx --yes @usecoil/skill-claude@0.1.3 --base-url https://www.usecoil.com
|
|
11
11
|
coil config set-base-url https://www.usecoil.com --profile prod
|
|
12
12
|
printf '%s' "$COIL_API_KEY" | coil auth login --profile prod --key -
|
|
13
13
|
coil --profile prod agent-context --json
|
package/bin/install.mjs
CHANGED
|
@@ -307,6 +307,12 @@ function checkCli() {
|
|
|
307
307
|
&& fetchCount?.required === true
|
|
308
308
|
&& fetchCount?.minimum === 1
|
|
309
309
|
&& fetchCount?.maximum === 25;
|
|
310
|
+
const hasCommand = (group, name) => Array.isArray(context.commands?.[group]?.commands)
|
|
311
|
+
&& context.commands[group].commands.some((command) => command?.name === name);
|
|
312
|
+
const hasLeadImport = hasCommand('leads', 'leads import');
|
|
313
|
+
const hasImportOutcomes = hasCommand('recipes', 'recipe-runs import-outcomes');
|
|
314
|
+
const hasImportedLeads = hasCommand('recipes', 'recipe-runs leads');
|
|
315
|
+
const hasNamedAgents = hasCommand('agents', 'agents list');
|
|
310
316
|
const compatible = contextResult.status === 0
|
|
311
317
|
&& context.cli?.name === 'coil'
|
|
312
318
|
&& context.cli?.version === version.replace(/^v/, '')
|
|
@@ -314,7 +320,11 @@ function checkCli() {
|
|
|
314
320
|
&& hasSpendGate
|
|
315
321
|
&& hasStarterCap
|
|
316
322
|
&& Array.isArray(context.commands?.recipes?.commands)
|
|
317
|
-
&& context.commands.recipes.commands.some((command) => command?.name === 'recipes run')
|
|
323
|
+
&& context.commands.recipes.commands.some((command) => command?.name === 'recipes run')
|
|
324
|
+
&& hasLeadImport
|
|
325
|
+
&& hasImportOutcomes
|
|
326
|
+
&& hasImportedLeads
|
|
327
|
+
&& hasNamedAgents;
|
|
318
328
|
return {
|
|
319
329
|
ok: Boolean(compatible),
|
|
320
330
|
present: true,
|
|
@@ -561,7 +571,7 @@ if (!cli.ok) {
|
|
|
561
571
|
if (!cli.ok) {
|
|
562
572
|
const rollbackFailed = installedCli && !rollbackCliInstall();
|
|
563
573
|
const detail = cli.reason ?? (cli.version ? `Found ${cli.version}; supported versions are ${SUPPORTED_CLI_RANGE}.` : 'No coil executable was found.');
|
|
564
|
-
console.error(`Error: ${detail} Install
|
|
574
|
+
console.error(`Error: ${detail} Install ${PUBLIC_CLI_SPEC} from the public npm registry, or rerun with --cli-package <path-to-reviewed-tarball>.`);
|
|
565
575
|
if (rollbackFailed) console.error('Warning: automatic rollback of the newly installed Coil CLI failed; remove @usecoil/cli manually.');
|
|
566
576
|
process.exit(1);
|
|
567
577
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usecoil/skill-claude",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Claude Code skill package for Coil agent workflows",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"coilCompatibility": {
|
|
30
30
|
"cli": "0.1.x",
|
|
31
|
-
"preferredVersion": "0.1.
|
|
31
|
+
"preferredVersion": "0.1.4"
|
|
32
32
|
},
|
|
33
33
|
"coilRuntime": {
|
|
34
34
|
"name": "claude",
|
package/skill/SKILL.md
CHANGED
|
@@ -16,7 +16,7 @@ it can do:
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
if ! command -v coil >/dev/null 2>&1; then
|
|
19
|
-
npm install --global @usecoil/cli@0.1.
|
|
19
|
+
npm install --global @usecoil/cli@0.1.4
|
|
20
20
|
fi
|
|
21
21
|
coil --version
|
|
22
22
|
```
|
|
@@ -77,7 +77,7 @@ The runtime-specific installer or registry handles placement; Coil operations
|
|
|
77
77
|
always use the same public JSON CLI:
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
npm install --global @usecoil/cli@0.1.
|
|
80
|
+
npm install --global @usecoil/cli@0.1.4
|
|
81
81
|
coil config set-base-url https://www.usecoil.com --profile prod
|
|
82
82
|
printf '%s' "$COIL_API_KEY" | coil auth login --profile prod --key -
|
|
83
83
|
coil --profile prod agent-context --json
|
|
@@ -124,6 +124,18 @@ result has `reconciliation_required`, relay the required reconciliation action
|
|
|
124
124
|
verbatim and do not retry the webhook. A policy-review action means a human
|
|
125
125
|
must decide the governance policy; it is not an instruction to weaken policy.
|
|
126
126
|
|
|
127
|
+
Provider integration status is a specific success-envelope case. When the
|
|
128
|
+
current credential-scoped `execution_readiness` contains a `blocked` scope,
|
|
129
|
+
`GET /api/integrations/{provider}` returns the same required Coil action at
|
|
130
|
+
`meta.human_action` and the temporary compatibility alias `data.human_action`.
|
|
131
|
+
The current CLI promotes one copy to top-level `human_action`; older clients
|
|
132
|
+
that unwrap `data` still retain the alias. Relay the Coil `url` verbatim even
|
|
133
|
+
when `execution_readiness[].actionUrl` is `null`. A non-null provider
|
|
134
|
+
`actionUrl` is a separate safe external provider-authorization link. Do not
|
|
135
|
+
invent, rewrite, or treat either URL as approval or authority. Automatic
|
|
136
|
+
`open`, `half_open`, `degraded`, `ready`, and `unknown` states do not require
|
|
137
|
+
this handoff.
|
|
138
|
+
|
|
127
139
|
## Common Workflows
|
|
128
140
|
|
|
129
141
|
### Orient
|
|
@@ -193,6 +205,23 @@ coil --profile prod recipe-runs retry <run-id> --json
|
|
|
193
205
|
|
|
194
206
|
Publication and ambiguous-effect reconciliation require a human organization admin. If a run has an unresolved provider effect, relay the server-provided `human_action.url` from the view/wait/watch state (or `error.details.human_action` from a machine reconcile denial) verbatim. The URL opens `/dashboard/recipe-runs/{runId}` for evidence review; it is navigation only and does not prove provider acceptance or authorize a decision. Retry/cancel behavior follows the durable run state and `next_actions`, not the presence of a URL.
|
|
195
207
|
|
|
208
|
+
### Lead-list imports
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
coil --profile prod --json leads import ./prospects.csv --mapping '{"Work email":"email"}' --admission-key import-september-001
|
|
212
|
+
coil --profile prod recipe-runs view <run-id> --json
|
|
213
|
+
coil --profile prod recipe-runs import-outcomes <run-id> --outcome rejected --json
|
|
214
|
+
coil --profile prod recipe-runs leads <run-id> --json
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Imports accept at most 2,000 data rows and 2 MiB of CSV input. Use header
|
|
218
|
+
mapping for ambiguous columns and a stable admission key when a retry could be
|
|
219
|
+
uncertain. A `202` response means durable admission, not terminal success. Do
|
|
220
|
+
not report completion until the run is terminal and its outcomes and attributed
|
|
221
|
+
leads have been inspected. Rejected-row PII is not printed. Successful inputs
|
|
222
|
+
are scrubbed after completion; failed or cancelled normalized replay data is
|
|
223
|
+
retained for up to 30 days. The original CSV is never stored.
|
|
224
|
+
|
|
196
225
|
### Scrapes
|
|
197
226
|
|
|
198
227
|
```bash
|
|
@@ -11,6 +11,12 @@ Content-Type: application/json
|
|
|
11
11
|
|
|
12
12
|
Coil organization API keys (`ak_...`) are accepted by agent-compatible routes.
|
|
13
13
|
|
|
14
|
+
Coil first-party credentials authenticate durable named agents. The agent ID is
|
|
15
|
+
the machine actor ID; the credential ID identifies only one credential.
|
|
16
|
+
Existing credentials were identity-preserving backfilled. Credential
|
|
17
|
+
administration requires a human organization admin, and permanent credential
|
|
18
|
+
plaintext is returned only once.
|
|
19
|
+
|
|
14
20
|
## Auth and Context
|
|
15
21
|
|
|
16
22
|
| Method | Path | Notes |
|
|
@@ -20,6 +26,20 @@ Coil organization API keys (`ak_...`) are accepted by agent-compatible routes.
|
|
|
20
26
|
| DELETE | `/api/auth/api-keys/{id}` | Revokes a Coil organization API key for human org admins. |
|
|
21
27
|
| POST | `/api/auth/verify-key` | Verifies a Coil organization API key without exposing it. |
|
|
22
28
|
|
|
29
|
+
Named-agent management is human-admin only:
|
|
30
|
+
|
|
31
|
+
| Method | Path | CLI |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| GET | `/api/agents` | `coil agents list --json` |
|
|
34
|
+
| POST | `/api/agents` | `coil agents create --name ... --json` |
|
|
35
|
+
| GET | `/api/agents/{id}` | `coil agents view <agent-id> --json` |
|
|
36
|
+
| POST | `/api/agents/{id}/setup` | `coil agents setup <agent-id> --runtime ... --profile ... --json` |
|
|
37
|
+
| POST | `/api/agents/{id}/credentials` | `coil agents issue-credential <agent-id> --json` |
|
|
38
|
+
| DELETE | `/api/agents/{id}/credentials/{credentialId}` | `coil agents revoke-credential <agent-id> <credential-id> --json` |
|
|
39
|
+
|
|
40
|
+
`--replace` changes the generated local setup command. It does not revoke an
|
|
41
|
+
existing credential. Replacement credentials keep the same durable agent ID.
|
|
42
|
+
|
|
23
43
|
CLI discovery wrapper:
|
|
24
44
|
|
|
25
45
|
```bash
|
|
@@ -76,6 +96,20 @@ Machine callers can create scrapes. Admin-gated destructive routes require a hum
|
|
|
76
96
|
| PATCH | `/api/leads/bulk` | `coil leads bulk-update --ids ... --fields '{...}' --json` |
|
|
77
97
|
| POST | `/api/export/csv` | `coil leads export <scrape-id> [--filter/--view/--ids] [--output]` |
|
|
78
98
|
| GET | `/api/leads/emails?scrapeId={id}` | `coil leads emails <scrape-id>` |
|
|
99
|
+
| POST | `/api/leads/import` | `coil --json leads import <file> [--mapping ...] [--admission-key ...]` |
|
|
100
|
+
| GET | `/api/recipe-runs/{id}/import-outcomes` | `coil recipe-runs import-outcomes <run-id> --outcome rejected --json` |
|
|
101
|
+
| GET | `/api/recipe-runs/{id}/leads` | `coil recipe-runs leads <run-id> --json` |
|
|
102
|
+
|
|
103
|
+
Lead-list imports accept at most 2,000 data rows and 2 MiB of CSV input. The
|
|
104
|
+
CLI maps supported headers before admission; use `--mapping` for ambiguous
|
|
105
|
+
headers and a stable `--admission-key` when a retry may be uncertain. A `202`
|
|
106
|
+
response means durable admission, not terminal success. Inspect
|
|
107
|
+
`coil recipe-runs view`, `coil recipe-runs import-outcomes`, and
|
|
108
|
+
`coil recipe-runs leads` and wait for a terminal run state before reporting
|
|
109
|
+
completion. The API is organization-scoped, does not retain the original CSV,
|
|
110
|
+
and does not print rejected-row PII. Successful inputs are scrubbed after
|
|
111
|
+
completion; failed or cancelled normalized replay data is retained for up to
|
|
112
|
+
30 days.
|
|
79
113
|
|
|
80
114
|
## Automations
|
|
81
115
|
|
|
@@ -130,6 +164,17 @@ under `error.details.human_action`.
|
|
|
130
164
|
| GET | `/api/integrations/smartlead/campaigns/sequences?campaignId={id}` | `coil smartlead sequences --campaign <id> --json` |
|
|
131
165
|
| POST | `/api/integrations/smartlead/send` | `coil smartlead send <scrape-id> --campaign <id> --json` |
|
|
132
166
|
|
|
167
|
+
`GET /api/integrations/{provider}` includes current credential-scoped
|
|
168
|
+
`execution_readiness`. For a `blocked` scope, the response returns one
|
|
169
|
+
server-generated absolute Coil operator URL at canonical `meta.human_action`
|
|
170
|
+
and the temporary compatibility alias `data.human_action`. Relay that Coil URL
|
|
171
|
+
verbatim even when `execution_readiness[].actionUrl` is `null`. The CLI exposes
|
|
172
|
+
one top-level `human_action` in JSON and an explicit text-mode URL. A safe,
|
|
173
|
+
non-null `execution_readiness[].actionUrl` remains a separate provider-side
|
|
174
|
+
authorization link and must not be rewritten or treated as Coil approval.
|
|
175
|
+
`open`, `half_open`, `degraded`, `ready`, and `unknown` states do not include a
|
|
176
|
+
required human action.
|
|
177
|
+
|
|
133
178
|
## Feedback
|
|
134
179
|
|
|
135
180
|
| Method | Path | CLI |
|
|
@@ -53,6 +53,23 @@ URL explicitly. Do not invent
|
|
|
53
53
|
one when the server does not return it. Legacy Actor Lab `approval_url` remains
|
|
54
54
|
available during the compatibility window.
|
|
55
55
|
|
|
56
|
+
### Provider integration status
|
|
57
|
+
|
|
58
|
+
`GET /api/integrations/{provider}` reports the current credential-scoped
|
|
59
|
+
`execution_readiness` records. If a current scope is `blocked`, the raw API
|
|
60
|
+
success envelope contains the same `Human action` object at both
|
|
61
|
+
`meta.human_action` (canonical) and `data.human_action` (temporary compatibility
|
|
62
|
+
alias for clients that unwrap `data`). The current CLI exposes one copy as
|
|
63
|
+
top-level `human_action` in JSON and prints its label and URL explicitly in
|
|
64
|
+
text mode.
|
|
65
|
+
|
|
66
|
+
`execution_readiness[].actionUrl` remains the separately validated provider
|
|
67
|
+
authorization URL and may be `null`; it must not be copied into the Coil
|
|
68
|
+
action. Relay the absolute Coil URL verbatim even when the provider URL is
|
|
69
|
+
`null`. Only `blocked` requires this operator handoff. `open`, `half_open`,
|
|
70
|
+
`degraded`, `ready`, and `unknown` retain automatic retry or reconciliation
|
|
71
|
+
semantics and do not advertise required human intervention.
|
|
72
|
+
|
|
56
73
|
## Scrape
|
|
57
74
|
|
|
58
75
|
| Field | Type | Notes |
|
|
@@ -146,8 +163,8 @@ Supported operators include equality, contains, empty/not-empty, booleans, and d
|
|
|
146
163
|
| `scrape_id` | string/null | Required for scrape-scoped automation. |
|
|
147
164
|
| `status` | `draft`/`published`/`disabled` | API-key agents create drafts. |
|
|
148
165
|
| `created_by_actor_type` | `human`/`machine` | Actor attribution. |
|
|
149
|
-
| `created_by_actor_id` | string | User ID or
|
|
150
|
-
| `created_by_actor_name` | string/null |
|
|
166
|
+
| `created_by_actor_id` | string | User ID or durable Coil agent ID. |
|
|
167
|
+
| `created_by_actor_name` | string/null | Durable agent display name when available. |
|
|
151
168
|
| `published_by_user_id` | string/null | Human admin publisher. |
|
|
152
169
|
| `published_at` | ISO string/null | Publication timestamp. |
|
|
153
170
|
|
|
@@ -225,5 +242,9 @@ Settings are stored in org-scoped JSON. Common keys:
|
|
|
225
242
|
## Agent Caveats
|
|
226
243
|
|
|
227
244
|
- API-key agents currently behave as org members, not org admins.
|
|
245
|
+
- A first-party credential authenticates a durable named agent. Credential IDs and agent IDs are separate; existing credentials were identity-preserving backfilled.
|
|
246
|
+
- Browser credential checking does not update `last_used_at` and does not prove that an external agent runtime is connected.
|
|
247
|
+
- Replacement uses temporary credential overlap and explicit old-credential revocation.
|
|
248
|
+
- Clerk organization API keys remain a separate compatibility path.
|
|
228
249
|
- Admin-gated actions include destructive scrape/automation operations, automation policy management, and automation publishing.
|
|
229
250
|
- Prefer `coil feedback` for platform friction discovered while operating Coil.
|