@soku-ai/cli 0.1.0-alpha.11 → 0.1.0-alpha.13
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/commands/ads.d.ts.map +1 -1
- package/dist/commands/ads.js +101 -0
- package/dist/commands/ads.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +3 -4
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/generated.d.ts +11 -7
- package/dist/commands/generated.d.ts.map +1 -1
- package/dist/commands/generated.js +10 -6
- package/dist/commands/generated.js.map +1 -1
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +50 -4
- package/dist/commands/update.js.map +1 -1
- package/dist/generated/capabilities.json +9192 -621
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/skills/soku/SKILL.md +83 -541
- package/skills/soku/references/ads-write.md +137 -0
- package/skills/soku/references/auth-workspace.md +79 -0
- package/skills/soku/references/capability-flow.md +42 -35
- package/skills/soku/references/data-capabilities.md +118 -0
- package/skills/soku/references/egress-security.md +51 -0
- package/skills/soku/references/seo-automation-files.md +93 -0
- package/skills/soku/references/skills-updates.md +89 -0
- package/dist/commands/resources.d.ts +0 -4
- package/dist/commands/resources.d.ts.map +0 -1
- package/dist/commands/resources.js +0 -22
- package/dist/commands/resources.js.map +0 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Ads Writes
|
|
2
|
+
|
|
3
|
+
Meta and Google write commands use typed CLI surfaces where available. Most
|
|
4
|
+
delivery-changing writes are review-gated: the command creates a pending review
|
|
5
|
+
and does not execute until a human approves.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
soku auth login --no-wait
|
|
11
|
+
soku workspace status
|
|
12
|
+
soku ads list-ad-accounts --platform meta
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
A default login can reach ads writes (no resource needed); each
|
|
16
|
+
delivery-changing write still returns a pending review for a human to approve.
|
|
17
|
+
|
|
18
|
+
## Meta Account Helpers
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
soku ads meta account pages --account-id <meta_account_id>
|
|
22
|
+
soku ads meta campaign get --account-id <meta_account_id> --campaign-id <campaign_id>
|
|
23
|
+
soku ads meta ad get --account-id <meta_account_id> --ad-id <ad_id>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Meta Assets
|
|
27
|
+
|
|
28
|
+
Image upload mutates the Meta asset library but does not change delivery, so it
|
|
29
|
+
executes immediately and returns `image_hash` values:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
soku ads meta asset upload-images --account-id <meta_account_id> ./hero.png ./square.jpg
|
|
33
|
+
soku ads meta asset upload-images --account-id <meta_account_id> \
|
|
34
|
+
--url https://example.com/hero.png --name-prefix launch
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Meta Single-Object Flow
|
|
38
|
+
|
|
39
|
+
Always inspect help for the exact flags before using a new command:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
soku ads meta campaign create --help
|
|
43
|
+
soku ads meta adset create --help
|
|
44
|
+
soku ads meta creative create --help
|
|
45
|
+
soku ads meta ad create --help
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Common flow:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
soku ads meta campaign create \
|
|
52
|
+
--account-id <meta_account_id> \
|
|
53
|
+
--name "Launch Test" \
|
|
54
|
+
--objective OUTCOME_TRAFFIC \
|
|
55
|
+
--summary "Create paused Meta traffic campaign Launch Test"
|
|
56
|
+
|
|
57
|
+
soku ads meta adset create \
|
|
58
|
+
--account-id <meta_account_id> \
|
|
59
|
+
--campaign-id <campaign_id> \
|
|
60
|
+
--name "US Prospecting" \
|
|
61
|
+
--optimization-goal LINK_CLICKS \
|
|
62
|
+
--billing-event IMPRESSIONS \
|
|
63
|
+
-p targeting='{"geo_locations":{"countries":["US"]}}' \
|
|
64
|
+
--summary "Create paused Meta ad set US Prospecting"
|
|
65
|
+
|
|
66
|
+
soku ads meta creative create \
|
|
67
|
+
--account-id <meta_account_id> \
|
|
68
|
+
--name "Hero image creative" \
|
|
69
|
+
--page-id <page_id> \
|
|
70
|
+
--image-hash <image_hash> \
|
|
71
|
+
--message "Primary text" \
|
|
72
|
+
--headline "Headline" \
|
|
73
|
+
--link https://example.com \
|
|
74
|
+
--call-to-action-type LEARN_MORE \
|
|
75
|
+
--summary "Create Meta image creative for Launch Test"
|
|
76
|
+
|
|
77
|
+
soku ads meta ad create \
|
|
78
|
+
--account-id <meta_account_id> \
|
|
79
|
+
--adset-id <adset_id> \
|
|
80
|
+
--name "Hero image ad" \
|
|
81
|
+
--creative-id <creative_id> \
|
|
82
|
+
--summary "Create paused Meta ad Hero image ad"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Status controls exist at delivery levels:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
soku ads meta campaign activate --campaign-id <campaign_id> --account-id <meta_account_id> --summary "Activate campaign"
|
|
89
|
+
soku ads meta adset pause --adset-id <adset_id> --account-id <meta_account_id> --summary "Pause ad set"
|
|
90
|
+
soku ads meta ad pause --ad-id <ad_id> --account-id <meta_account_id> --summary "Pause ad"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Bulk Meta Create
|
|
94
|
+
|
|
95
|
+
Bulk commands are one layer at a time. Each item in `--items-file` must be an
|
|
96
|
+
object with a unique non-empty `client_ref`.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
soku ads meta campaign bulk-create --account-id <meta_account_id> --items-file campaigns.json --summary "Bulk-create campaigns"
|
|
100
|
+
soku ads meta adset bulk-create --account-id <meta_account_id> --items-file adsets.json --summary "Bulk-create ad sets"
|
|
101
|
+
soku ads meta creative bulk-create --account-id <meta_account_id> --items-file creatives.json --summary "Bulk-create creatives"
|
|
102
|
+
soku ads meta ad bulk-create --account-id <meta_account_id> --items-file ads.json --summary "Bulk-create ads"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
After approval, bulk reviews execute asynchronously. Poll with:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
soku review show <review_id>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Google Ads Writes
|
|
112
|
+
|
|
113
|
+
Use:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
soku ads google --help
|
|
117
|
+
soku ads google campaign --help
|
|
118
|
+
soku ads google ad-group --help
|
|
119
|
+
soku ads google ad --help
|
|
120
|
+
soku ads google keyword --help
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The command path determines platform. Do not add `--platform`; the CLI injects
|
|
124
|
+
`platform=google`.
|
|
125
|
+
|
|
126
|
+
## Review Gate
|
|
127
|
+
|
|
128
|
+
Review-gated commands return a review id:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
soku review list
|
|
132
|
+
soku review show <review_id>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
As an agent, show the review id and summary to the user. Do not approve on the
|
|
136
|
+
user's behalf. Approval is single-use; failed approval is terminal, so create a
|
|
137
|
+
fresh review for retry.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Authentication And Workspace
|
|
2
|
+
|
|
3
|
+
Soku CLI auth is machine-level and org-agnostic. The active org and brand are
|
|
4
|
+
selected separately and sent on each workspace-scoped request.
|
|
5
|
+
|
|
6
|
+
## Agent Login: Non-Blocking Split Flow
|
|
7
|
+
|
|
8
|
+
Do not block a turn waiting for browser approval. Start login with:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
soku auth login --no-wait
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Return the exact `verification_uri` and `user_code` to the user, then stop. Do
|
|
15
|
+
not edit, re-encode, or reconstruct the URL. After the user approves, resume
|
|
16
|
+
with the exact `next` command returned by the CLI:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
soku auth login --device-code <device_code>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
For CI or headless contexts, use `SOKU_TOKEN`; do not echo it.
|
|
23
|
+
|
|
24
|
+
## Resources
|
|
25
|
+
|
|
26
|
+
The CLI resource model has been retired — `--resource` is **no longer needed
|
|
27
|
+
for anything**. A default `soku auth login` reaches the entire CLI surface: all
|
|
28
|
+
data commands (`soku ads / ga4 / posthog / call ...`) **and** every sub-command
|
|
29
|
+
(`soku seo-hosting / automation / files / context / brand skill ...`). Writes
|
|
30
|
+
still return a HITL review the user approves; that is the only gate left
|
|
31
|
+
(besides the active org/brand). The `--resource` flag and the `soku resources`
|
|
32
|
+
command have been removed from the CLI.
|
|
33
|
+
|
|
34
|
+
## Workspace
|
|
35
|
+
|
|
36
|
+
Never infer Soku workspace state from the local shell directory.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
soku workspace status
|
|
40
|
+
soku workspace resolve <brand>
|
|
41
|
+
soku workspace use-brand <brand>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If `resolve` is ambiguous, show the candidates and ask the user which exact
|
|
45
|
+
brand/org to use. For one-off scripts, `SOKU_ORG_ID` and `SOKU_BRAND_ID` can
|
|
46
|
+
override saved config.
|
|
47
|
+
|
|
48
|
+
Legacy commands still work, but prefer `workspace` for agent flows:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
soku org list
|
|
52
|
+
soku org use <slug-or-id>
|
|
53
|
+
soku brand list
|
|
54
|
+
soku brand use <slug-or-id>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Session State
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
soku auth status
|
|
61
|
+
soku auth logout
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
On exit code 2 with an expired or revoked token, the CLI drops the stored token.
|
|
65
|
+
Run the split login flow again.
|
|
66
|
+
|
|
67
|
+
## Brand Memory
|
|
68
|
+
|
|
69
|
+
Memory is scoped to the active Soku workspace:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
soku memory list
|
|
73
|
+
soku memory search "policy"
|
|
74
|
+
soku memory get reference noiz-policy-event
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use memory as background and investigation leads. Do not report memory-derived
|
|
78
|
+
context as verified fact unless the same turn confirms it with data actions,
|
|
79
|
+
change history, billing evidence, or another authoritative source.
|
|
@@ -1,44 +1,53 @@
|
|
|
1
|
-
# Capability
|
|
1
|
+
# Capability Discovery Flow
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Use this discover -> inspect -> run loop for data capabilities. `--help` is the
|
|
4
|
+
authoritative runtime surface for command names, flags, required params, and
|
|
5
|
+
usage notes.
|
|
6
6
|
|
|
7
|
-
## 1. Confirm
|
|
7
|
+
## 1. Confirm Workspace
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
soku
|
|
10
|
+
soku auth status
|
|
11
|
+
soku workspace status
|
|
11
12
|
```
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
A default `soku auth login` reaches the entire CLI surface — there is no
|
|
15
|
+
resource model to grant or check (writes are still HITL-approved). Just make
|
|
16
|
+
sure you are signed in and pointed at the right org/brand.
|
|
16
17
|
|
|
17
|
-
## 2. Discover
|
|
18
|
+
## 2. Discover Namespaces
|
|
18
19
|
|
|
19
20
|
```bash
|
|
20
|
-
soku --help
|
|
21
|
-
soku ads --help
|
|
22
|
-
soku ga4 --help
|
|
21
|
+
soku --help
|
|
22
|
+
soku ads --help
|
|
23
|
+
soku ga4 --help
|
|
24
|
+
soku posthog --help
|
|
23
25
|
```
|
|
24
26
|
|
|
25
|
-
Common
|
|
27
|
+
Common read actions:
|
|
26
28
|
|
|
27
|
-
- `soku ads list-ad-accounts`
|
|
28
|
-
- `soku ads list-dimensions`
|
|
29
|
-
- `soku ads query-single-dimension
|
|
30
|
-
- `soku ads
|
|
31
|
-
- `soku
|
|
29
|
+
- `soku ads list-ad-accounts`
|
|
30
|
+
- `soku ads list-dimensions`
|
|
31
|
+
- `soku ads query-single-dimension`
|
|
32
|
+
- `soku ads query-multi-dimension`
|
|
33
|
+
- `soku ads gaql-search`
|
|
34
|
+
- `soku ga4 list-properties`
|
|
35
|
+
- `soku ga4 get-property-overview`
|
|
36
|
+
- `soku posthog list-projects`
|
|
37
|
+
- `soku posthog list-tools`
|
|
38
|
+
- `soku posthog query`
|
|
32
39
|
|
|
33
|
-
## 3. Inspect
|
|
40
|
+
## 3. Inspect Before Running
|
|
34
41
|
|
|
35
42
|
```bash
|
|
36
43
|
soku ads query-single-dimension --help
|
|
37
44
|
```
|
|
38
45
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
Never guess flags. Object and list flags take JSON strings, for example:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
soku ads query-single-dimension --filters '{"campaign_id":["123"]}'
|
|
50
|
+
```
|
|
42
51
|
|
|
43
52
|
## 4. Run
|
|
44
53
|
|
|
@@ -51,21 +60,19 @@ soku ads query-single-dimension \
|
|
|
51
60
|
--date-end 2026-05-07
|
|
52
61
|
```
|
|
53
62
|
|
|
54
|
-
## Raw
|
|
63
|
+
## Raw Escape Hatch
|
|
55
64
|
|
|
56
|
-
|
|
57
|
-
CLI version ships), call it by its raw snake_case name:
|
|
65
|
+
Use raw calls only when a typed sub-command is missing:
|
|
58
66
|
|
|
59
67
|
```bash
|
|
60
|
-
soku call ads query_single_dimension
|
|
68
|
+
soku call ads query_single_dimension \
|
|
69
|
+
--payload '{"account_id":"1234567890","dimension":"campaign","date_start":"2026-05-01","date_end":"2026-05-07"}'
|
|
61
70
|
```
|
|
62
71
|
|
|
63
|
-
## Typical
|
|
64
|
-
|
|
65
|
-
1. `soku ads list-ad-accounts` → pick an `account_id`.
|
|
66
|
-
2. `soku ads list-dimensions` → learn valid dimension/metric slugs for that account.
|
|
67
|
-
3. `soku ads query-single-dimension` / `query-multi-dimension` with the chosen
|
|
68
|
-
`--account-id` + slugs.
|
|
72
|
+
## Typical Chaining
|
|
69
73
|
|
|
70
|
-
|
|
71
|
-
|
|
74
|
+
1. `soku ads list-ad-accounts` -> pick `account_id`.
|
|
75
|
+
2. `soku ads list-dimensions` -> learn legal dimensions, metrics, and filters.
|
|
76
|
+
3. `soku ads query-single-dimension` or `query-multi-dimension`.
|
|
77
|
+
4. Use `gaql-search` only if cached actions cannot expose the needed
|
|
78
|
+
Google-native field or segment combination.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Data Capabilities
|
|
2
|
+
|
|
3
|
+
Use typed commands for read workflows. Read `capability-flow.md` first when you
|
|
4
|
+
are unfamiliar with the namespace.
|
|
5
|
+
|
|
6
|
+
## Ads: Cached First
|
|
7
|
+
|
|
8
|
+
Start with account and schema discovery:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
soku ads list-ad-accounts --platform google
|
|
12
|
+
soku ads list-dimensions --platform google --account-id <account_id>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Use cached analytics for normal reporting:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
soku ads query-single-dimension \
|
|
19
|
+
--account-id <account_id> \
|
|
20
|
+
--dimension campaign \
|
|
21
|
+
--date-start 2026-05-01 \
|
|
22
|
+
--date-end 2026-05-07
|
|
23
|
+
|
|
24
|
+
soku ads query-multi-dimension \
|
|
25
|
+
--account-id <account_id> \
|
|
26
|
+
--dimensions '["campaign","device"]' \
|
|
27
|
+
--date-start 2026-05-01 \
|
|
28
|
+
--date-end 2026-05-07
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Use `query-single-dimension` for CPA, ROAS, conversion group fan-out, or one
|
|
32
|
+
dimension. Use `query-multi-dimension` for raw multi-dimensional breakdowns.
|
|
33
|
+
|
|
34
|
+
`--platform` accepts `google`, `meta`, `tiktok`, or `chatgpt_ads`:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
soku ads list-ad-accounts --platform chatgpt_ads
|
|
38
|
+
soku ads query-single-dimension \
|
|
39
|
+
--platform chatgpt_ads \
|
|
40
|
+
--account-id <account_id> \
|
|
41
|
+
--dimension campaign \
|
|
42
|
+
--date-start 2026-05-01 \
|
|
43
|
+
--date-end 2026-05-07
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
ChatGPT Ads is synced reporting only — no campaign/ad write actions, and
|
|
47
|
+
`query-multi-dimension` does not support it (use `query-single-dimension`
|
|
48
|
+
instead).
|
|
49
|
+
|
|
50
|
+
## Google Ads GAQL Fallback
|
|
51
|
+
|
|
52
|
+
Use GAQL only when cached actions cannot answer the request:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
soku ads get-resource-metadata --platform google --account-id <account_id> --resource-name campaign
|
|
56
|
+
soku ads gaql-search \
|
|
57
|
+
--platform google \
|
|
58
|
+
--account-id <account_id> \
|
|
59
|
+
--dimensions '["date","campaign"]' \
|
|
60
|
+
--metrics '["cost","clicks"]' \
|
|
61
|
+
--limit 20
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Do not write full `SELECT ... FROM ...` GAQL SQL. `gaql-search` takes structured
|
|
65
|
+
`dimensions`, `metrics`, `filters`, `date_range`, `order_by`, and `limit`; the
|
|
66
|
+
server translates them.
|
|
67
|
+
|
|
68
|
+
## GA4
|
|
69
|
+
|
|
70
|
+
Prefer cached overview commands:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
soku ga4 list-properties
|
|
74
|
+
soku ga4 get-property-overview --property-id <property_id>
|
|
75
|
+
soku ga4 list-top-pages --property-id <property_id>
|
|
76
|
+
soku ga4 list-traffic-sources --property-id <property_id>
|
|
77
|
+
soku ga4 get-daily-trend --property-id <property_id>
|
|
78
|
+
soku ga4 get-conversion-overview --property-id <property_id>
|
|
79
|
+
soku ga4 list-events --property-id <property_id>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Use live fallback only for dimensions, metrics, filters, or custom definitions
|
|
83
|
+
not covered by cached commands:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
soku ga4 get-metadata --property-id <property_id>
|
|
87
|
+
soku ga4 run-report \
|
|
88
|
+
--property-id <property_id> \
|
|
89
|
+
--metrics '["activeUsers"]' \
|
|
90
|
+
--dimensions '["sessionDefaultChannelGroup"]'
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## PostHog
|
|
94
|
+
|
|
95
|
+
Do not ask the user for a project id before listing accessible projects:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
soku posthog list-projects
|
|
99
|
+
soku posthog list-tools --project-id <project_id>
|
|
100
|
+
soku posthog query --project-id <project_id> --tool read-data-schema --arguments '{}'
|
|
101
|
+
soku posthog query --project-id <project_id> --tool execute-sql \
|
|
102
|
+
--arguments '{"query":"SELECT count() FROM events WHERE event = '\''$pageview'\''"}'
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The CLI exposes read allowlisted PostHog tools. Writes and unvetted MCP tools
|
|
106
|
+
stay outside the generated command tree.
|
|
107
|
+
|
|
108
|
+
## Raw Calls
|
|
109
|
+
|
|
110
|
+
Use `soku call <namespace> <action>` only when a typed command is missing:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
soku call ads list_ad_accounts -p platform=google
|
|
114
|
+
soku call ads query_single_dimension --payload '{"account_id":"123","dimension":"campaign"}'
|
|
115
|
+
soku call posthog query --payload '{"project_id":"12345","tool":"execute-sql","arguments":{"query":"SELECT count() FROM events"}}'
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Review-gated writes through `soku call` require `--summary`.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Egress And Security
|
|
2
|
+
|
|
3
|
+
Use `soku egress` for covered third-party APIs. Soku injects provider
|
|
4
|
+
credentials server-side; no third-party API key lives on this machine.
|
|
5
|
+
|
|
6
|
+
## Egress Pattern
|
|
7
|
+
|
|
8
|
+
Prefix the skill's `curl` with `soku egress --`:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
soku egress -- curl -H "Authorization: Bearer $AHREFS_API_KEY" "https://api.ahrefs.com/v3/..."
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`$AHREFS_API_KEY` may be unset locally. That is expected. The CLI strips empty
|
|
15
|
+
placeholder auth and the Soku API injects the real credential.
|
|
16
|
+
|
|
17
|
+
List covered hosts:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
soku egress providers
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
For a host not listed, the proxy does not inject credentials. Follow that
|
|
24
|
+
skill's own auth instructions instead.
|
|
25
|
+
|
|
26
|
+
## Do Not Preflight Local Keys
|
|
27
|
+
|
|
28
|
+
Do not write guards such as:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
test -n "$AHREFS_API_KEY"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Do not abort a skill because a key looks missing. Route the call through
|
|
35
|
+
`soku egress -- curl ...`.
|
|
36
|
+
|
|
37
|
+
## Response Semantics
|
|
38
|
+
|
|
39
|
+
Successful upstream responses are returned verbatim on stdout, not wrapped in a
|
|
40
|
+
success envelope. Soku-level failures use the normal CLI error envelope.
|
|
41
|
+
|
|
42
|
+
## General Security Rules
|
|
43
|
+
|
|
44
|
+
- Never print the Soku access token.
|
|
45
|
+
- Prefer `SOKU_TOKEN` for CI and headless agents.
|
|
46
|
+
- Do not approve review-gated writes on behalf of the user.
|
|
47
|
+
- Avoid literal secret argv values. For Cloudflare Worker setup use
|
|
48
|
+
`--cf-token-env` or `--cf-token-stdin`.
|
|
49
|
+
- Pass user-provided values as separate argv elements.
|
|
50
|
+
- Treat `verification_uri`, signed URLs, review ids, and provider URLs as
|
|
51
|
+
opaque strings.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# SEO Hosting, Automations, And Files
|
|
2
|
+
|
|
3
|
+
These commands operate on the active Soku workspace. Confirm workspace first:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
soku workspace status
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## SEO Hosting Pages
|
|
10
|
+
|
|
11
|
+
SEO Hosting pages are complete HTML documents, not Markdown. They are addressed
|
|
12
|
+
by `section` and `slug`.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
soku seo-hosting status
|
|
16
|
+
soku seo-hosting pages list --section blog --status draft
|
|
17
|
+
soku seo-hosting pages put --section blog --slug how-to --title "How to ..." --html-file page.html
|
|
18
|
+
soku seo-hosting pages publish --section blog --slug how-to
|
|
19
|
+
soku seo-hosting pages unpublish --section blog --slug how-to
|
|
20
|
+
soku seo-hosting pages delete --section blog --slug how-to --confirm
|
|
21
|
+
soku seo-hosting pages upload-asset --path blog/how-to/hero.png --file ./hero.png
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Run `status` before publishing. If no domain is live for the section, do not
|
|
25
|
+
publish yet.
|
|
26
|
+
|
|
27
|
+
`put` creates or overwrites a draft and requires exactly one HTML source:
|
|
28
|
+
`--html`, `--html-file`, or `--html-stdin`. Reference uploaded assets by the
|
|
29
|
+
absolute URL returned from `upload-asset`. No custom JavaScript.
|
|
30
|
+
|
|
31
|
+
Writes run immediately. Confirm user intent before publishing or deleting.
|
|
32
|
+
|
|
33
|
+
## SEO Hosting Domain Connections
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
soku seo-hosting connections list
|
|
37
|
+
soku seo-hosting connections connect-cname --hostname blog.example.com
|
|
38
|
+
soku seo-hosting connections verify <connection_id>
|
|
39
|
+
soku seo-hosting connections disconnect <connection_id> --confirm
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Cloudflare Worker reverse proxy setup:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
soku seo-hosting connections probe --hostname example.com --sections blog,use-cases
|
|
46
|
+
soku seo-hosting connections connect-worker --hostname example.com \
|
|
47
|
+
--sections blog,use-cases --cf-token-env CLOUDFLARE_API_TOKEN
|
|
48
|
+
printf %s "$CLOUDFLARE_API_TOKEN" | soku seo-hosting connections connect-worker \
|
|
49
|
+
--hostname example.com --sections blog --cf-token-stdin
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Never pass Cloudflare tokens as literal argv values. Use `--cf-token-env` or
|
|
53
|
+
`--cf-token-stdin`. Add conflict override flags only after the user confirms the
|
|
54
|
+
risk.
|
|
55
|
+
|
|
56
|
+
## Automations
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
soku automation list
|
|
60
|
+
soku automation create --name "Fast check" --prompt "Check account health" --cron "* * * * *" --timezone UTC
|
|
61
|
+
soku automation trigger <automation_id>
|
|
62
|
+
soku automation runs <automation_id>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`create` requires exactly one schedule option:
|
|
66
|
+
|
|
67
|
+
- `--cron <expr>` with optional `--timezone <iana>` (default `UTC`).
|
|
68
|
+
- `--interval-seconds <seconds>`; at least 3600 and divisible by 60.
|
|
69
|
+
- `--once-at <iso>` for a one-time UTC instant.
|
|
70
|
+
|
|
71
|
+
`runs` prints a Studio link when a conversation exists. The CLI does not read
|
|
72
|
+
conversation content.
|
|
73
|
+
|
|
74
|
+
## Context Hub
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
soku context list
|
|
78
|
+
soku context upload ./brief.pdf --dir research
|
|
79
|
+
soku context mkdir research
|
|
80
|
+
soku context rename old/path new/path
|
|
81
|
+
soku context rm research/brief.pdf
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Paths are context-relative. Do not include a `context/` prefix.
|
|
85
|
+
|
|
86
|
+
## Temporary Public File URLs
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
soku files publish ./creative.png
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
URLs are short-lived signed URLs, usually around 30 minutes. If a downstream API
|
|
93
|
+
later fails to fetch the file, check expiration first.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Skills And Updates
|
|
2
|
+
|
|
3
|
+
Soku distributes two kinds of local agent skills:
|
|
4
|
+
|
|
5
|
+
- Bundled meta skill: `soku` teaches the CLI basics and references.
|
|
6
|
+
- Business skills: catalog skills installed as `soku-<slug>`, for example
|
|
7
|
+
`soku-ads-report`.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
Install the bundled meta skill:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
soku skill install
|
|
15
|
+
soku skill install --global
|
|
16
|
+
soku skill install --agent claude --global
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Install business skills:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
soku skill list
|
|
23
|
+
soku skill install account-audit
|
|
24
|
+
soku skill install ads-report google-ads
|
|
25
|
+
soku skill install --all
|
|
26
|
+
soku skill status
|
|
27
|
+
soku skill list-installed
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Business skill install automatically ensures the `soku` meta skill exists.
|
|
31
|
+
Installed business skill names are Soku-prefixed:
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
use @soku-ads-report skill
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Use catalog slugs for install/remove (`ads-report`) and agent names for
|
|
38
|
+
invocation (`soku-ads-report`).
|
|
39
|
+
|
|
40
|
+
## Update
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
soku update status
|
|
44
|
+
soku update skills
|
|
45
|
+
soku update cli
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Normal `soku` commands schedule a background skill refresh at most once every 24
|
|
49
|
+
hours. Controls:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
SOKU_NO_SKILL_AUTO_UPDATE=1
|
|
53
|
+
SOKU_UPDATE_INTERVAL_HOURS=6
|
|
54
|
+
SOKU_AUTO_UPDATE_CLI=1
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The CLI binary itself is advisory by default. Run `soku update cli` to install
|
|
58
|
+
the latest npm package unless the user explicitly opted into auto CLI updates.
|
|
59
|
+
|
|
60
|
+
## Legacy Meta-Only Installs
|
|
61
|
+
|
|
62
|
+
Older installations may have only:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
<skillsDir>/soku/SKILL.md
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
with no `.soku-skills.json` manifest and no `references/` directory.
|
|
69
|
+
`soku update skills` detects those legacy meta-only installs, refreshes
|
|
70
|
+
`SKILL.md`, copies `references/`, and writes a Soku-managed manifest entry.
|
|
71
|
+
|
|
72
|
+
Global `npm i -g @soku-ai/cli` also refreshes already-installed global meta
|
|
73
|
+
skills after npm finishes installing. It does not install new business skills
|
|
74
|
+
and does not scan project-local directories.
|
|
75
|
+
|
|
76
|
+
`soku update cli` runs that same global `npm i -g` under the hood, so its JSON
|
|
77
|
+
result includes `mustRereadMetaSkill` and `metaSkillRefreshed: [<paths>]`. When
|
|
78
|
+
`mustRereadMetaSkill` is true, re-read this skill from the listed path(s)
|
|
79
|
+
before continuing — the on-disk copy just changed underneath this session.
|
|
80
|
+
|
|
81
|
+
## Remove
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
soku skill remove ads-report
|
|
85
|
+
soku skill remove soku
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Removing the last Soku-managed skill removes the local `.soku-skills.json`
|
|
89
|
+
manifest.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/commands/resources.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B/D"}
|