gooseworks 0.3.0 → 0.3.2
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 +25 -17
- package/dist/agents/codex.d.ts +6 -0
- package/dist/agents/codex.d.ts.map +1 -1
- package/dist/agents/codex.js +57 -0
- package/dist/agents/codex.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +30 -2
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +5 -0
- package/dist/commands/update.js.map +1 -1
- package/dist/skills/installer.js +1 -1
- package/dist/skills/master-skill.d.ts +26 -13
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +195 -160
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/names.d.ts.map +1 -1
- package/dist/skills/names.js +2 -0
- package/dist/skills/names.js.map +1 -1
- package/package.json +1 -1
- package/skills/gooseworks/SKILL.md +15 -0
package/README.md
CHANGED
|
@@ -149,12 +149,17 @@ Standalone skills installed with `--with` skip the catalog search step. After `n
|
|
|
149
149
|
| Enrichment | Contact enrichment, company research, tech stack |
|
|
150
150
|
| Monitoring | Newsletter scanning, review site tracking |
|
|
151
151
|
|
|
152
|
-
## Ads
|
|
152
|
+
## Ads (`goose-ads`)
|
|
153
153
|
|
|
154
|
-
Alongside the GTM `gooseworks` skill, the CLI installs a **separate** `ads
|
|
155
|
-
skill for
|
|
156
|
-
brand for ads
|
|
157
|
-
|
|
154
|
+
Alongside the GTM `gooseworks` skill, the CLI installs a **separate** `goose-ads` entry
|
|
155
|
+
skill for ads — **create** ad creative (remix a static ad template into a branded ad, or
|
|
156
|
+
read a brand for ads) and **analyze** ad performance (Meta/Google campaign diagnostics,
|
|
157
|
+
creative fatigue, CAC & lead quality, competitor ad intelligence, ad angles & hooks). The
|
|
158
|
+
`gooseworks` parent router also hands ad requests to it. Claude auto-loads whichever skill
|
|
159
|
+
matches the task; the two are domain-scoped and never merged.
|
|
160
|
+
|
|
161
|
+
> Renamed from `ads-remix`. Older installs get the stale `ads-remix` skill cleaned up
|
|
162
|
+
> automatically on the next `install`.
|
|
158
163
|
|
|
159
164
|
```bash
|
|
160
165
|
gooseworks install --claude --mcp
|
|
@@ -162,22 +167,25 @@ gooseworks install --claude --mcp
|
|
|
162
167
|
|
|
163
168
|
Then in Claude Code: *"remix template `<id>` for `<your-site>`"*.
|
|
164
169
|
|
|
165
|
-
**The GooseWorks MCP server is REQUIRED for ads.**
|
|
166
|
-
|
|
167
|
-
`
|
|
168
|
-
|
|
169
|
-
|
|
170
|
+
**The GooseWorks MCP server is REQUIRED for ads.** The skill is a thin wrapper over the
|
|
171
|
+
backend's single ad-generation workflow — the same one the GooseWorks ads app uses — reached
|
|
172
|
+
through the `gooseworks` MCP tools (`get_brand_kit`, `submit_remix_batch`, `get_remix_batch`,
|
|
173
|
+
`regenerate_creative`, …). The skill does NOT generate images, drive FAL, or manage renders
|
|
174
|
+
itself; the backend runs the pipeline and stores results. `install` registers the MCP server
|
|
175
|
+
with `--mcp` (or `--all`) and verifies it's reachable; if it isn't, you'll see a warning — the
|
|
176
|
+
ads flow will fail without MCP. Re-run `gooseworks install --claude --mcp` if needed.
|
|
170
177
|
|
|
171
|
-
|
|
172
|
-
|
|
178
|
+
Generation is billed to your GooseWorks credits **server-side**: `submit_remix_batch` reserves
|
|
179
|
+
the estimated cost up front and bills only the images that complete. There's no separate
|
|
180
|
+
ad-credit balance. Use `estimate_remix_batch` (cost preview) and `gooseworks credits` (balance).
|
|
173
181
|
|
|
174
182
|
### Keeping skills up to date
|
|
175
183
|
|
|
176
|
-
- **Entry skills** (`gooseworks`, `ads
|
|
184
|
+
- **Entry skills** (`gooseworks`, `goose-ads`) are vendored in the CLI. They're (re)installed
|
|
177
185
|
on `install`/`update`, and **refreshed on `login`** — but only when their content actually
|
|
178
186
|
changed (a content-hash stamp skips unchanged ones, so re-running is cheap). Bump the CLI
|
|
179
187
|
(`npx gooseworks@latest …`) to get new entry-skill content.
|
|
180
|
-
- **Recipe skills** (e.g. `
|
|
188
|
+
- **Recipe skills** (e.g. ad-analytics like `meta-ads-analyzer`) are **fetched live** from
|
|
181
189
|
goose-skills each time they're used, so they're always current — nothing to update.
|
|
182
190
|
|
|
183
191
|
## File Layout
|
|
@@ -196,8 +204,8 @@ no separate ad-credit balance.
|
|
|
196
204
|
├── gooseworks/
|
|
197
205
|
│ ├── SKILL.md # GTM skill — teaches your agent to use 100+ data tools
|
|
198
206
|
│ └── .gooseworks-version # content-hash stamp (freshness check; skip rewrite if unchanged)
|
|
199
|
-
├── ads
|
|
200
|
-
│ ├── SKILL.md # Ads
|
|
207
|
+
├── goose-ads/
|
|
208
|
+
│ ├── SKILL.md # Ads entry skill (create + analyze; creation requires MCP)
|
|
201
209
|
│ └── .gooseworks-version
|
|
202
210
|
└── goose-graphics/
|
|
203
211
|
└── SKILL.md # Optional standalone skill installed with --with
|
|
@@ -208,7 +216,7 @@ no separate ad-credit balance.
|
|
|
208
216
|
```
|
|
209
217
|
~/.claude/skills/
|
|
210
218
|
├── gooseworks → ~/.agents/skills/gooseworks
|
|
211
|
-
├── ads
|
|
219
|
+
├── goose-ads → ~/.agents/skills/goose-ads
|
|
212
220
|
└── goose-graphics → ~/.agents/skills/goose-graphics
|
|
213
221
|
```
|
|
214
222
|
|
package/dist/agents/codex.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export declare function getCodexSkillsDir(): string;
|
|
2
2
|
export declare function configureCodex(): number;
|
|
3
3
|
export declare function removeCodex(): void;
|
|
4
|
+
/**
|
|
5
|
+
* Add (or overwrite) the GooseWorks MCP entry in ~/.codex/config.toml.
|
|
6
|
+
* Stores the same user-scoped bearer token shape used by Claude/Cursor config,
|
|
7
|
+
* so Codex Desktop can use it without relying on a launcher env var.
|
|
8
|
+
*/
|
|
9
|
+
export declare function configureCodexMcp(): boolean;
|
|
4
10
|
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"AAUA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,cAAc,IAAI,MAAM,CA+CvC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAgBlC;AAwCD;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAiB3C"}
|
package/dist/agents/codex.js
CHANGED
|
@@ -36,12 +36,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.getCodexSkillsDir = getCodexSkillsDir;
|
|
37
37
|
exports.configureCodex = configureCodex;
|
|
38
38
|
exports.removeCodex = removeCodex;
|
|
39
|
+
exports.configureCodexMcp = configureCodexMcp;
|
|
39
40
|
const fs = __importStar(require("fs"));
|
|
40
41
|
const path = __importStar(require("path"));
|
|
41
42
|
const os = __importStar(require("os"));
|
|
43
|
+
const credentials_1 = require("../auth/credentials");
|
|
42
44
|
const installer_1 = require("../skills/installer");
|
|
43
45
|
const names_1 = require("../skills/names");
|
|
44
46
|
const CODEX_SKILLS_DIR = path.join(os.homedir(), '.codex', 'skills');
|
|
47
|
+
const CODEX_CONFIG_PATH = path.join(os.homedir(), '.codex', 'config.toml');
|
|
45
48
|
function getCodexSkillsDir() {
|
|
46
49
|
return CODEX_SKILLS_DIR;
|
|
47
50
|
}
|
|
@@ -110,4 +113,58 @@ function removeCodex() {
|
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
115
|
}
|
|
116
|
+
function normalizeMcpUrl(base) {
|
|
117
|
+
const stripped = base.replace(/\/$/, '');
|
|
118
|
+
return stripped.endsWith('/mcp') ? stripped : `${stripped}/mcp`;
|
|
119
|
+
}
|
|
120
|
+
function tomlString(value) {
|
|
121
|
+
return JSON.stringify(value);
|
|
122
|
+
}
|
|
123
|
+
function readCodexConfig() {
|
|
124
|
+
try {
|
|
125
|
+
if (!fs.existsSync(CODEX_CONFIG_PATH))
|
|
126
|
+
return '';
|
|
127
|
+
return fs.readFileSync(CODEX_CONFIG_PATH, 'utf-8');
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return '';
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function stripTomlTable(raw, tableName) {
|
|
134
|
+
const lines = raw.split(/\r?\n/);
|
|
135
|
+
const kept = [];
|
|
136
|
+
let skipping = false;
|
|
137
|
+
for (const line of lines) {
|
|
138
|
+
const header = line.match(/^\s*\[([^\]]+)\]\s*$/);
|
|
139
|
+
if (header) {
|
|
140
|
+
const name = header[1].trim();
|
|
141
|
+
skipping = name === tableName || name.startsWith(`${tableName}.`);
|
|
142
|
+
}
|
|
143
|
+
if (!skipping) {
|
|
144
|
+
kept.push(line);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return kept.join('\n').replace(/\n{3,}/g, '\n\n').trimEnd();
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Add (or overwrite) the GooseWorks MCP entry in ~/.codex/config.toml.
|
|
151
|
+
* Stores the same user-scoped bearer token shape used by Claude/Cursor config,
|
|
152
|
+
* so Codex Desktop can use it without relying on a launcher env var.
|
|
153
|
+
*/
|
|
154
|
+
function configureCodexMcp() {
|
|
155
|
+
const creds = (0, credentials_1.getCredentials)();
|
|
156
|
+
if (!creds?.mcp_server_url || !creds.api_key)
|
|
157
|
+
return false;
|
|
158
|
+
const configDir = path.dirname(CODEX_CONFIG_PATH);
|
|
159
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
160
|
+
const existing = stripTomlTable(readCodexConfig(), 'mcp_servers.gooseworks');
|
|
161
|
+
const block = [
|
|
162
|
+
'[mcp_servers.gooseworks]',
|
|
163
|
+
`url = ${tomlString(normalizeMcpUrl(creds.mcp_server_url))}`,
|
|
164
|
+
`http_headers = { Authorization = ${tomlString(`Bearer ${creds.api_key}`)} }`,
|
|
165
|
+
].join('\n');
|
|
166
|
+
const next = `${existing ? `${existing}\n\n` : ''}${block}\n`;
|
|
167
|
+
fs.writeFileSync(CODEX_CONFIG_PATH, next, { mode: 0o600 });
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
113
170
|
//# sourceMappingURL=codex.js.map
|
package/dist/agents/codex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,8CAEC;AAED,wCA+CC;AAED,kCAgBC;AA6CD,8CAiBC;AA7ID,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,qDAAqD;AACrD,mDAAwD;AACxD,2CAA2D;AAE3D,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAE3E,SAAgB,iBAAiB;IAC/B,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,UAAU,GAAG,IAAA,6BAAiB,GAAE,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAA,gCAAwB,EAAC,KAAK,CAAC;gBAAE,SAAS;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1B,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;SACzC,MAAM,CAAC,gCAAwB,CAAC,CAAC;IAEpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;YAC/C,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,WAAW;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO;IAE7C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAA,gCAAwB,EAAC,KAAK,CAAC;YAAE,SAAS;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,MAAM,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,SAAiB;IACpD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,QAAQ,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,KAAK,GAAG,IAAA,4BAAc,GAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,cAAc,CAAC,eAAe,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG;QACZ,0BAA0B;QAC1B,SAAS,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE;QAC5D,oCAAoC,UAAU,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI;KAC9E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAE9D,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,oBAAoB,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,oBAAoB,IAAI,OAAO,CAoJ9C;AAED,eAAO,MAAM,cAAc,SAAyB,CAAC"}
|
package/dist/commands/install.js
CHANGED
|
@@ -116,7 +116,7 @@ Examples:
|
|
|
116
116
|
}
|
|
117
117
|
else {
|
|
118
118
|
logger.warn(`GooseWorks MCP server NOT reachable (${mcp.error}). Ads creation requires it — ` +
|
|
119
|
-
'restart Claude Code and check your connection; the ads
|
|
119
|
+
'restart Claude Code and check your connection; the goose-ads skill will fail without MCP.');
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
else {
|
|
@@ -128,6 +128,22 @@ Examples:
|
|
|
128
128
|
if (agent === 'codex') {
|
|
129
129
|
logger.info('Creating symlinks in ~/.codex/skills/');
|
|
130
130
|
(0, codex_1.configureCodex)();
|
|
131
|
+
if (wantMcp) {
|
|
132
|
+
if ((0, codex_1.configureCodexMcp)()) {
|
|
133
|
+
logger.success("Registered 'gooseworks' MCP server in ~/.codex/config.toml");
|
|
134
|
+
const mcp = await (0, claude_mcp_1.verifyMcpReachable)();
|
|
135
|
+
if (mcp.ok) {
|
|
136
|
+
logger.success('GooseWorks MCP server reachable');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
logger.warn(`GooseWorks MCP server NOT reachable (${mcp.error}). Ads creation requires it — ` +
|
|
140
|
+
'restart Codex and check your connection; the goose-ads skill will fail without MCP.');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
logger.info("Skipped MCP (no mcp_server_url in credentials — older backend?)");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
131
147
|
logger.success('Codex configured');
|
|
132
148
|
}
|
|
133
149
|
if (agent === 'cursor') {
|
|
@@ -153,10 +169,22 @@ Examples:
|
|
|
153
169
|
}
|
|
154
170
|
const agentNames = targetAgents.map((a) => a === 'claude' ? 'Claude Code' : a === 'codex' ? 'Codex' : 'Cursor').join(' and ');
|
|
155
171
|
logger.done(`Setup complete! Open ${agentNames} and try one of these:`);
|
|
172
|
+
logger.info('Data & GTM:');
|
|
156
173
|
logger.example('/gooseworks find people who know <linkedin-profile-url>');
|
|
157
|
-
logger.example('/gooseworks find what <linkedin-profile-url> has been posting about');
|
|
158
174
|
logger.example('/gooseworks find leads similar to <linkedin-company-url>');
|
|
159
175
|
logger.example('/gooseworks research <company name>');
|
|
176
|
+
// goose-ads is a vendored entry skill — always installed, so always shown.
|
|
177
|
+
console.log('');
|
|
178
|
+
logger.info('Ads (create, edit & analyze):');
|
|
179
|
+
logger.example('/goose-ads remix template <id-or-url> for <your-product>');
|
|
180
|
+
logger.example('/goose-ads make an ad for <your-product>');
|
|
181
|
+
logger.example('/goose-ads why is my Meta campaign underperforming?');
|
|
182
|
+
// Graphics is a standalone skill — only suggest it if it was installed.
|
|
183
|
+
if ((opts.with || []).includes('goose-graphics')) {
|
|
184
|
+
console.log('');
|
|
185
|
+
logger.info('Graphics:');
|
|
186
|
+
logger.example('/goose-graphics make a chart from <data>');
|
|
187
|
+
}
|
|
160
188
|
console.log('');
|
|
161
189
|
});
|
|
162
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -47,7 +47,7 @@ const config_1 = require("../config");
|
|
|
47
47
|
/**
|
|
48
48
|
* Refresh vendored entry skills on login for users who have already set up
|
|
49
49
|
* (`gooseworks` skill present). This is the "update skills on login": it picks up
|
|
50
|
-
* new or content-changed entry skills (e.g. the ads
|
|
50
|
+
* new or content-changed entry skills (e.g. the goose-ads skill) without
|
|
51
51
|
* rewriting unchanged ones, then re-symlinks Claude so the new skill is visible.
|
|
52
52
|
* Bootstrapping a first-time install stays the job of `gooseworks install`.
|
|
53
53
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,aAAa,SAqDtB,CAAC"}
|
package/dist/commands/update.js
CHANGED
|
@@ -70,6 +70,11 @@ exports.updateCommand = new commander_1.Command('update')
|
|
|
70
70
|
if ((0, detect_1.isAgentInstalled)('codex')) {
|
|
71
71
|
(0, codex_1.configureCodex)();
|
|
72
72
|
logger.success('Codex symlinks updated');
|
|
73
|
+
if (creds.mcp_server_url) {
|
|
74
|
+
if ((0, codex_1.configureCodexMcp)()) {
|
|
75
|
+
logger.success('Codex MCP config refreshed');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
73
78
|
}
|
|
74
79
|
if ((0, detect_1.isAgentInstalled)('cursor')) {
|
|
75
80
|
if ((0, cursor_1.hasExistingCursorMcpEntry)()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,qDAAqD;AACrD,mDAAiF;AACjF,6CAAmD;AACnD,qDAA0D;AAC1D,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,qDAAqD;AACrD,mDAAiF;AACjF,6CAAmD;AACnD,qDAA0D;AAC1D,2CAAoE;AACpE,6CAA8E;AAC9E,6CAAoD;AACpD,yDAAwD;AACxD,wDAA0C;AAE7B,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,KAAK,GAAG,IAAA,4BAAc,GAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACxC,IAAA,2BAAe,GAAE,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,IAAA,qCAAyB,EAAC,IAAA,6BAAc,GAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7E,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAE7C,IAAI,IAAA,yBAAgB,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAA,wBAAe,GAAE,CAAC;QAClB,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAE/C,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,IAAA,+BAAkB,GAAE,EAAE,CAAC;gBACzB,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAA,yBAAgB,EAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,IAAA,sBAAc,GAAE,CAAC;QACjB,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,IAAA,yBAAiB,GAAE,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAA,yBAAgB,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,IAAA,kCAAyB,GAAE,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAA,wBAAe,EAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC"}
|
package/dist/skills/installer.js
CHANGED
|
@@ -59,7 +59,7 @@ function installMasterSkill(masterSkillMd) {
|
|
|
59
59
|
fs.writeFileSync(path.join(masterDir, 'SKILL.md'), masterSkillMd, 'utf-8');
|
|
60
60
|
}
|
|
61
61
|
// ── Vendored entry-skill freshness ──────────────────────────────────────────
|
|
62
|
-
// Entry skills (gooseworks, ads
|
|
62
|
+
// Entry skills (gooseworks, goose-ads) are vendored in the CLI and written to
|
|
63
63
|
// ~/.agents/skills/<name>/. We stamp each install with a content hash so we can
|
|
64
64
|
// skip rewriting an unchanged skill ("already local → don't call") and rewrite
|
|
65
65
|
// only when the vendored content changed ("updated → call again"). Recipe skills
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The CLI installs two vendored ENTRY skills into ~/.agents/skills/:
|
|
3
|
-
* - `gooseworks` — the
|
|
4
|
-
*
|
|
3
|
+
* - `gooseworks` — the PARENT router (getMasterSkillContent): GTM/data toolkit
|
|
4
|
+
* PLUS a domain router that hands ads/graphics/video work to the dedicated
|
|
5
|
+
* `goose-*` skills below.
|
|
6
|
+
* - `goose-ads` — the ads entry/contract (getGooseAdsSkillContent): ad creative
|
|
7
|
+
* (remix, brand research) AND ad analytics/intelligence. Formerly `ads-remix`.
|
|
5
8
|
* Each is a separate Claude Code skill; Claude auto-loads whichever matches the
|
|
6
9
|
* task by its description. They are domain-scoped on purpose — do NOT merge them.
|
|
7
10
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
+
* Sibling domain skills NOT vendored here (fetched live from goose-skills):
|
|
12
|
+
* - `goose-graphics` — charts/slides/infographics/branded visuals. Installed via
|
|
13
|
+
* `gooseworks install --with goose-graphics` or fetched on demand.
|
|
14
|
+
* - `goose-video` — ad/UGC/talking-head video. Coming soon.
|
|
15
|
+
*
|
|
16
|
+
* Recipe skills (remix-graphic-ad-from-reference, brand-research, meta-ads-analyzer,
|
|
17
|
+
* …) are NOT vendored here — they live in goose-skills and are fetched live on
|
|
18
|
+
* demand via `gooseworks fetch <slug>`, so they're always current.
|
|
11
19
|
*/
|
|
12
20
|
export interface EntrySkill {
|
|
13
21
|
/** Install dir name under ~/.agents/skills/ AND the skill `name`. */
|
|
@@ -27,14 +35,19 @@ export declare function getEntrySkills(): EntrySkill[];
|
|
|
27
35
|
*/
|
|
28
36
|
export declare function getMasterSkillContent(): string;
|
|
29
37
|
/**
|
|
30
|
-
* Returns the ads
|
|
38
|
+
* Returns the goose-ads entry SKILL.md content (the `goose-ads` entry skill,
|
|
39
|
+
* formerly `ads-remix`).
|
|
31
40
|
*
|
|
32
|
-
* This is the ads
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
41
|
+
* This is the ads domain skill and a THIN WRAPPER over the backend's single ad
|
|
42
|
+
* generation workflow (adRemixBatchesService, exposed via the new
|
|
43
|
+
* mcp__gooseworks__*_remix_batch / regenerate_creative tools — the SAME workflow
|
|
44
|
+
* the ads frontend uses). The skill no longer generates images, manages renders,
|
|
45
|
+
* or uploads files itself; the backend reserves credits, runs the cloud pipeline,
|
|
46
|
+
* and bills. The skill ALSO routes ad analytics/intelligence to recipe skills
|
|
47
|
+
* fetched on demand from goose-skills. It is SEPARATE from the `gooseworks` GTM
|
|
48
|
+
* skill — different domain, different tools — and Claude loads it (or the
|
|
49
|
+
* `gooseworks` parent router hands off to it) when the user wants to make/edit an
|
|
50
|
+
* ad, research a brand for ads, or analyze ad performance.
|
|
38
51
|
*/
|
|
39
|
-
export declare function
|
|
52
|
+
export declare function getGooseAdsSkillContent(): string;
|
|
40
53
|
//# sourceMappingURL=master-skill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master-skill.d.ts","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"master-skill.d.ts","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,wBAAgB,cAAc,IAAI,UAAU,EAAE,CAK7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAwJ9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAsLhD"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getEntrySkills = getEntrySkills;
|
|
4
4
|
exports.getMasterSkillContent = getMasterSkillContent;
|
|
5
|
-
exports.
|
|
5
|
+
exports.getGooseAdsSkillContent = getGooseAdsSkillContent;
|
|
6
6
|
/** Every entry skill the CLI vendors + installs. */
|
|
7
7
|
function getEntrySkills() {
|
|
8
8
|
return [
|
|
9
9
|
{ name: 'gooseworks', content: getMasterSkillContent() },
|
|
10
|
-
{ name: 'ads
|
|
10
|
+
{ name: 'goose-ads', content: getGooseAdsSkillContent() },
|
|
11
11
|
];
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
@@ -39,6 +39,21 @@ tags: [gooseworks, data, scraping, search, reddit, twitter, linkedin, email, peo
|
|
|
39
39
|
|
|
40
40
|
You have access to GooseWorks — a toolkit with 100+ data skills for scraping, research, lead generation, enrichment, and more. **ALWAYS use GooseWorks skills** for any data task before trying web search or other tools.
|
|
41
41
|
|
|
42
|
+
This skill is also the **parent router** for the GooseWorks family. Data/GTM work you handle here (see "How to Use"); specialized work you hand off to a dedicated \`goose-*\` skill.
|
|
43
|
+
|
|
44
|
+
## Route to the right skill FIRST
|
|
45
|
+
|
|
46
|
+
Before anything else, check whether the request belongs to a specialized domain. If so, **switch to that skill** instead of the data flow below:
|
|
47
|
+
|
|
48
|
+
| If the user wants… | Route to | How |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| Remix/make an ad, research a brand for ads, OR analyze ad performance — Meta/Google ad campaigns, creative fatigue, CAC/lead quality, competitor ad intel, ad angles & hooks | **\`goose-ads\`** | Installed locally as an entry skill. Just use it. If unavailable, run \`gooseworks install --claude\`. |
|
|
51
|
+
| Charts, infographics, slides, social graphics, branded visual designs from a style/format | **\`goose-graphics\`** | If installed locally, use it. Otherwise \`gooseworks fetch goose-graphics\` (or \`gooseworks install --claude --with goose-graphics\`). |
|
|
52
|
+
| Ad/UGC/talking-head **video** | **\`goose-video\`** | Coming soon. Until it ships, search the catalog (\`gooseworks search "ugc video"\`) and \`gooseworks fetch\` the matching recipe. |
|
|
53
|
+
| Anything else — scraping, research, lead gen, enrichment, any data lookup | (stay here) | Follow "How to Use" below. |
|
|
54
|
+
|
|
55
|
+
Examples — all of these route to \`goose-ads\`, not the data flow: "remix this ad with project id 123", "make an ad for my product", "research my brand", "why is my Meta campaign underperforming", "which creatives should I cut".
|
|
56
|
+
|
|
42
57
|
## Setup
|
|
43
58
|
|
|
44
59
|
All commands below auto-load credentials from \`~/.gooseworks/credentials.json\`. If a command exits with "Not logged in", tell the user to run: \`npx gooseworks login\`. To log out: \`npx gooseworks logout\`.
|
|
@@ -158,181 +173,201 @@ gooseworks call apify acts/parseforge~reddit-posts-scraper/runs --body='{"subred
|
|
|
158
173
|
`;
|
|
159
174
|
}
|
|
160
175
|
/**
|
|
161
|
-
* Returns the ads
|
|
176
|
+
* Returns the goose-ads entry SKILL.md content (the `goose-ads` entry skill,
|
|
177
|
+
* formerly `ads-remix`).
|
|
162
178
|
*
|
|
163
|
-
* This is the ads
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
179
|
+
* This is the ads domain skill and a THIN WRAPPER over the backend's single ad
|
|
180
|
+
* generation workflow (adRemixBatchesService, exposed via the new
|
|
181
|
+
* mcp__gooseworks__*_remix_batch / regenerate_creative tools — the SAME workflow
|
|
182
|
+
* the ads frontend uses). The skill no longer generates images, manages renders,
|
|
183
|
+
* or uploads files itself; the backend reserves credits, runs the cloud pipeline,
|
|
184
|
+
* and bills. The skill ALSO routes ad analytics/intelligence to recipe skills
|
|
185
|
+
* fetched on demand from goose-skills. It is SEPARATE from the `gooseworks` GTM
|
|
186
|
+
* skill — different domain, different tools — and Claude loads it (or the
|
|
187
|
+
* `gooseworks` parent router hands off to it) when the user wants to make/edit an
|
|
188
|
+
* ad, research a brand for ads, or analyze ad performance.
|
|
169
189
|
*/
|
|
170
|
-
function
|
|
190
|
+
function getGooseAdsSkillContent() {
|
|
171
191
|
return `---
|
|
172
|
-
name: ads
|
|
173
|
-
slug: ads
|
|
192
|
+
name: goose-ads
|
|
193
|
+
slug: goose-ads
|
|
174
194
|
description: >
|
|
175
|
-
|
|
176
|
-
ad for the user's product,
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
195
|
+
GooseWorks ads skill — create, edit, AND analyze ad creative. Remix a static (image) ad
|
|
196
|
+
template into a branded ad for the user's product, edit/re-roll an existing creative,
|
|
197
|
+
research a brand for ads, OR analyze ad performance (Meta/Google campaign diagnostics,
|
|
198
|
+
creative fatigue, CAC & lead quality, competitor ad intelligence, ad angles & hooks). Use
|
|
199
|
+
when the user says "remix this ad", references a static ad template id/slug, asks to "make
|
|
200
|
+
an ad", "edit this ad", "research my brand", or asks to analyze/diagnose ad campaigns.
|
|
201
|
+
Generation runs through the GooseWorks backend's single cloud workflow (the same one the ads
|
|
202
|
+
app uses) — credits are reserved and billed server-side. Analytics recipes are fetched from
|
|
203
|
+
goose-skills on demand.
|
|
180
204
|
category: ads
|
|
181
|
-
version:
|
|
205
|
+
version: 2.0.0
|
|
182
206
|
author: GooseWorks
|
|
183
|
-
tags: [gooseworks, ads, remix, static-ad, brand, creative, image]
|
|
207
|
+
tags: [gooseworks, ads, remix, static-ad, brand, creative, image, analytics, meta-ads, performance]
|
|
184
208
|
---
|
|
185
209
|
|
|
186
|
-
# GooseWorks Ads —
|
|
210
|
+
# GooseWorks Ads — create, edit & analyze
|
|
211
|
+
|
|
212
|
+
The GooseWorks ads skill. Two jobs:
|
|
187
213
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
214
|
+
1. **Create / edit ad creative** — a **thin wrapper** over the backend's single generation
|
|
215
|
+
workflow. You pick the brand + template(s) and submit ONE batch; the **backend** runs the
|
|
216
|
+
whole pipeline (compose → generate → persist → judge), reserves and bills credits, and
|
|
217
|
+
stores the renders. You do NOT generate images, call FAL, manage render rows, or upload
|
|
218
|
+
files — those are gone. This is the exact same workflow the GooseWorks ads app uses, so the
|
|
219
|
+
skill and the app can never drift.
|
|
220
|
+
2. **Analyze ad performance** — fetch ad-analytics recipes from goose-skills on demand
|
|
221
|
+
(these are unrelated to generation; see "Analyze / intelligence" below).
|
|
192
222
|
|
|
193
223
|
## Prerequisite — the GooseWorks MCP server is REQUIRED
|
|
194
224
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
\`
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
225
|
+
Everything goes through the \`mcp__gooseworks__*\` tools. If they are not available, **stop and
|
|
226
|
+
tell the user to run \`gooseworks install --claude --mcp\`** (and restart Claude Code). There is
|
|
227
|
+
no HTTP/file fallback — the REST ad endpoints are session-cookie-only and reject your token.
|
|
228
|
+
|
|
229
|
+
## Identity & credits
|
|
230
|
+
|
|
231
|
+
- One agent-scoped token authenticates the \`gooseworks\` MCP tools. Never print it. The tools
|
|
232
|
+
resolve your org automatically — you do NOT resolve an "Ads agent" or pass \`target\` for the
|
|
233
|
+
generation tools.
|
|
234
|
+
- **Credits are handled entirely by the backend.** \`submit_remix_batch\` reserves the estimated
|
|
235
|
+
cost up front (it errors with \`insufficient_credits\` if the wallet is short — relay the
|
|
236
|
+
message and stop) and bills only the images that actually complete. Call
|
|
237
|
+
\`estimate_remix_batch\` first to tell the user the cost; \`gooseworks credits\` shows balance.
|
|
238
|
+
|
|
239
|
+
## Defaults — match the app (priority: frontend, then backend)
|
|
240
|
+
|
|
241
|
+
When the user doesn't specify, submit with the **ads app's** defaults so skill output matches
|
|
242
|
+
what they'd get in the UI. **Pass these explicitly:**
|
|
243
|
+
|
|
244
|
+
- \`variants\`: **1** per template
|
|
245
|
+
- \`ratios\`: **["4:5"]** (Meta feed vertical)
|
|
246
|
+
- \`engine\`: **"gpt_image_2"**
|
|
247
|
+
- \`quality\`: **"medium"**
|
|
248
|
+
- \`preserve_source_styling\`: **true** (keep the template's own colours/fonts; only restyle to
|
|
249
|
+
the brand palette if the user explicitly asks to "match my brand colours")
|
|
250
|
+
|
|
251
|
+
If the user asks for something the app exposes (more variants, a different ratio like 1:1 or
|
|
252
|
+
9:16, a faster engine, higher quality), pass that instead. Omitting a field lets backend policy
|
|
253
|
+
decide — fine, but prefer sending the app defaults for predictable parity.
|
|
254
|
+
|
|
255
|
+
## The generation tools (the new, single-workflow surface)
|
|
256
|
+
|
|
257
|
+
- \`submit_remix_batch { brand_id, items, prompt?, product_name?, preserve_source_styling?,
|
|
258
|
+
reference_image_urls?, allow_without_product_image?, engine?, quality? }\` — **the one call
|
|
259
|
+
that makes ads.** \`items\` is \`[{ template_id, variants?, ratios? }]\` (≤20 templates).
|
|
260
|
+
Returns the batch with a \`links\` block (\`brand_url\` + per-creative \`app_url\`). If the brand's
|
|
261
|
+
research isn't finished yet the batch comes back \`status: "queued"\` — it auto-runs the moment
|
|
262
|
+
research completes; tell the user it'll appear shortly, don't error.
|
|
263
|
+
- \`estimate_remix_batch { items, engine?, quality? }\` — cost preview (images, credits_per_image,
|
|
264
|
+
total_credits, available_credits). \`template_id\` accepts a uuid OR a slug. Reserves nothing. Use
|
|
265
|
+
to quote the cost first. Check \`unknown_template_ids\` in the response — any token there didn't
|
|
266
|
+
resolve (submit would 404 on it); don't quote a cost that silently dropped a bad id.
|
|
267
|
+
- \`get_remix_batch { batch_id }\` — poll status. Returns each creative with its renders and
|
|
268
|
+
\`completed\`/\`failed\`/\`pending\` counts, plus \`links\`. A creative is done when its \`pending\` is 0
|
|
269
|
+
— NOT when \`current_render_url\` is set (during a regenerate that field still points at the prior
|
|
270
|
+
image). Each render carries \`age_seconds\` (since queued) and \`elapsed_seconds\` (time generating):
|
|
271
|
+
use them to tell a slow-but-healthy render from a stuck one. A render only failed when its
|
|
272
|
+
\`status\` is \`"failed"\` — never assume a stall and re-submit, that double-bills.
|
|
273
|
+
- \`list_brand_creatives { brand_id, limit?, offset? }\` — the brand's gallery feed (newest
|
|
274
|
+
first) + \`brand_url\`. Alternative poll target; also use to show everything made for a brand.
|
|
275
|
+
- \`regenerate_creative { project_id, mode?, prompt?, source_render_id?, ... }\` — **edit / re-roll
|
|
276
|
+
one existing creative** through the same pipeline. \`mode: "variation"\` (default) re-rolls from
|
|
277
|
+
the template; \`"edit"\` makes a targeted change to a specific render (\`prompt\` + \`source_render_id\`
|
|
278
|
+
required); \`"exact"\` runs \`prompt\` verbatim against that render's references. Returns a
|
|
279
|
+
single-item batch — poll it with \`get_remix_batch\`.
|
|
280
|
+
|
|
281
|
+
## Reading the brand & picking inputs (still MCP, read-only)
|
|
282
|
+
|
|
283
|
+
- \`get_brand_kit { brand_id }\` — the CANONICAL brand context (name, description, audience,
|
|
284
|
+
voice, brandType, valueProps, colors, typography, logoUrl, \`products[]\`, presigned
|
|
285
|
+
\`referenceImages[]\`). Read this to choose \`product_name\` and any \`reference_image_urls\`.
|
|
286
|
+
- \`list_ad_brands { query? }\` / \`get_ad_brand { brand_id }\` — find/fetch a brand. Pass \`query\` to
|
|
287
|
+
filter by name (case-insensitive) instead of listing every brand; rows are lean (no \`brand_kit\` —
|
|
288
|
+
read \`get_brand_kit\` for the full kit).
|
|
289
|
+
- \`get_static_ad_template { template_id }\` — resolve a template (slug OR uuid; public catalog
|
|
290
|
+
AND your org's private templates). Confirms it exists before you submit.
|
|
291
|
+
- \`remix_community_ad { community_id }\` — a **Community** ad id is an \`ad_project\` id, not a
|
|
292
|
+
template id. Call this FIRST to snapshot it into a private template, then use the returned
|
|
293
|
+
template \`id\` in \`items\`.
|
|
294
|
+
- \`create_user_ad_template { workspace_path }\` — "bring your own ad": upload the user's own
|
|
295
|
+
image as a private template, then remix it like any other.
|
|
296
|
+
- \`get_ad_project\` / \`append_project_message\` — inspect a creative / leave a note on its thread.
|
|
297
|
+
|
|
298
|
+
## Workflow — make ads from a template
|
|
299
|
+
|
|
300
|
+
1. **Resolve the brand.** \`list_ad_brands\` by name/site → \`get_brand_kit { brand_id }\`. If the
|
|
301
|
+
kit's \`researchStatus\` isn't \`complete\`, you can still submit (the batch queues and runs when
|
|
302
|
+
research finishes) — just tell the user. Use the kit to pick \`product_name\` (a real entry from
|
|
303
|
+
\`products[]\`, not a guess) and, if the user supplied product photos, \`reference_image_urls\`.
|
|
304
|
+
2. **Resolve the template(s).** \`get_static_ad_template { template_id }\` for each. For a Community
|
|
305
|
+
ad, \`remix_community_ad\` first; for an uploaded image, \`create_user_ad_template\` first.
|
|
306
|
+
3. **(Optional) Craft the steering prompt.** The \`prompt\` is OPTIONAL — this is where the skill
|
|
307
|
+
adds value: turn the user's intent into a concise steering note (e.g. tone, season, emphasis).
|
|
308
|
+
Don't over-specify; the backend pipeline + brand kit handle palette, fonts, product swap.
|
|
309
|
+
4. **(Optional) Quote the cost.** \`estimate_remix_batch { items, engine, quality }\` → tell the user.
|
|
310
|
+
5. **Submit ONE batch.** \`submit_remix_batch { brand_id, items, prompt?, product_name?, engine,
|
|
311
|
+
quality, preserve_source_styling }\` using the app defaults above. Keep the returned \`batch_id\`
|
|
312
|
+
and \`links\`.
|
|
313
|
+
6. **Poll until done.** \`get_remix_batch { batch_id }\` (or \`list_brand_creatives\`) every ~20-30s
|
|
314
|
+
until every creative's \`pending\` is 0. Most images finish in a few minutes; text-heavy templates
|
|
315
|
+
and \`quality: high\` take longer. Read each render's \`elapsed_seconds\` rather than guessing — a
|
|
316
|
+
render that's still \`running\` is healthy; do NOT re-submit thinking it stalled (that double-bills).
|
|
317
|
+
7. **Hand back the links** from the batch's \`links\` block — \`brand_url\` (gallery) and each
|
|
318
|
+
creative's \`app_url\` — copied verbatim. Never end on just "done" or a file path.
|
|
319
|
+
|
|
320
|
+
## Workflow — edit an existing ad
|
|
321
|
+
|
|
322
|
+
User wants to tweak a creative they already made → \`regenerate_creative\`:
|
|
323
|
+
- "make another version / different take" → \`mode: "variation"\` (optionally new \`prompt\`,
|
|
324
|
+
\`product_name\`, \`ratios\`).
|
|
325
|
+
- "change X in this exact image" → \`mode: "edit"\`, \`source_render_id\` = the render to edit,
|
|
326
|
+
\`prompt\` = the change.
|
|
327
|
+
- "run exactly this prompt on the product" → \`mode: "exact"\`, \`source_render_id\` + \`prompt\`.
|
|
328
|
+
Then poll with \`get_remix_batch\` and hand back the links, same as above.
|
|
329
|
+
|
|
330
|
+
## Brand research
|
|
331
|
+
|
|
332
|
+
Research normally runs in the GooseWorks backend (on onboarding). Just read the result with
|
|
333
|
+
\`get_brand_kit\`. If a brand doesn't exist yet, you may \`create_ad_brand\` and let backend
|
|
334
|
+
research run; you don't need to research locally. (A standalone local recipe still exists via
|
|
335
|
+
\`gooseworks fetch brand-research\` if the user explicitly wants the agent to do it.)
|
|
336
|
+
|
|
337
|
+
## Analyze / intelligence (fetched recipes — NOT generation)
|
|
338
|
+
|
|
339
|
+
These are analysis recipes you fetch from goose-skills with \`gooseworks fetch <slug>\` and
|
|
340
|
+
follow; they do NOT touch the generation tools or credits-for-images. Pick the closest match;
|
|
341
|
+
if unsure, \`gooseworks search "<what the user wants>"\` first:
|
|
342
|
+
- **Campaign performance diagnosis** ("why is my Meta/Google campaign underperforming",
|
|
343
|
+
creative fatigue, learning phase, pacing, auction overlap) → \`gooseworks fetch meta-ads-analyzer\`
|
|
344
|
+
(or \`ad-campaign-analyzer\` for cross-platform).
|
|
345
|
+
- **Lead/CAC quality** ("are these ads driving qualified leads", true CAC vs vanity CPA,
|
|
346
|
+
Scale/Keep/Investigate/Cut) → \`gooseworks fetch ad-lead-quality-analyzer\`.
|
|
347
|
+
- **Competitor ad intelligence** ("what ads are competitors running") →
|
|
348
|
+
\`gooseworks fetch competitor-ad-intelligence\` (Meta Ad Library: \`meta-ad-scraper\`;
|
|
349
|
+
Google: \`google-ad-scraper\`).
|
|
350
|
+
- **Creative ideation** (ad angles, winning hooks) → \`gooseworks fetch ad-angle-miner\` /
|
|
351
|
+
\`gooseworks fetch trending-ad-hook-spotter\`.
|
|
352
|
+
- **Policy / landing-page checks** → \`gooseworks fetch meta-ad-policy-checker\` /
|
|
353
|
+
\`gooseworks fetch ad-to-landing-page-auditor\`.
|
|
354
|
+
|
|
355
|
+
Save their scripts to \`/tmp/gooseworks-scripts/<slug>/\` and follow their instructions. These
|
|
356
|
+
run through the \`gooseworks\` CLI (\`gooseworks fetch\` / \`gooseworks call\`), like the GTM skills.
|
|
318
357
|
|
|
319
358
|
## Rules
|
|
320
359
|
|
|
321
360
|
- **MCP required** — if \`mcp__gooseworks__*\` is unavailable, stop and tell the user to run
|
|
322
361
|
\`gooseworks install --claude --mcp\`.
|
|
323
|
-
- **
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
- **
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
URL itself to verify (it's browser/session-scoped and 401s on your token) — verify via
|
|
333
|
-
\`get_download_url\` on ADS_AGENT.
|
|
334
|
-
- On a hard error (auth/quota/model, or a polling timeout), set the render \`failed\` with a
|
|
335
|
-
short \`error_message\` and stop. Don't return the source unchanged.
|
|
362
|
+
- **One backend workflow** — generation is \`submit_remix_batch\` / \`regenerate_creative\` ONLY.
|
|
363
|
+
Do NOT call FAL, the media proxy, \`submit_render\`, \`update_render_status\`, or upload render
|
|
364
|
+
files yourself; do NOT \`gooseworks fetch\` a local remix recipe to generate. The backend owns it.
|
|
365
|
+
- **Always end a successful run with the links** from the batch's \`links\` block (\`brand_url\` +
|
|
366
|
+
each creative's \`app_url\`), copied verbatim. Never end on just "done" or a file path.
|
|
367
|
+
- **Quote cost before generating** when it's non-trivial (use \`estimate_remix_batch\`), and
|
|
368
|
+
relay \`insufficient_credits\` plainly if the submit is rejected — don't retry blindly.
|
|
369
|
+
- **Don't busy-loop** — poll \`get_remix_batch\` on a sensible interval (~20-30s); a \`queued\`
|
|
370
|
+
batch is waiting on research and will start on its own.
|
|
336
371
|
`;
|
|
337
372
|
}
|
|
338
373
|
//# sourceMappingURL=master-skill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"master-skill.js","sourceRoot":"","sources":["../../src/skills/master-skill.ts"],"names":[],"mappings":";;AA0BA,wCAKC;AAWD,sDAwJC;AAiBD,0DAsLC;AAhXD,oDAAoD;AACpD,SAAgB,cAAc;IAC5B,OAAO;QACL,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,EAAE;QACxD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,EAAE,EAAE;KAC1D,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsJR,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,uBAAuB;IACrC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoLR,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAS9D"}
|
package/dist/skills/names.js
CHANGED
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isManagedGooseworksSkill = isManagedGooseworksSkill;
|
|
4
4
|
function isManagedGooseworksSkill(name) {
|
|
5
5
|
return (name === 'gooseworks' ||
|
|
6
|
+
// `ads-remix` was renamed to `goose-ads`; keep it managed so a stale
|
|
7
|
+
// ads-remix dir from an older install is cleaned up on the next install.
|
|
6
8
|
name === 'ads-remix' ||
|
|
7
9
|
name.startsWith('gooseworks-') ||
|
|
8
10
|
name.startsWith('goose-'));
|
package/dist/skills/names.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":";;AAAA,4DASC;AATD,SAAgB,wBAAwB,CAAC,IAAY;IACnD,OAAO,CACL,IAAI,KAAK,YAAY;QACrB,qEAAqE;QACrE,yEAAyE;QACzE,IAAI,KAAK,WAAW;QACpB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC1B,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -22,6 +22,21 @@ metadata:
|
|
|
22
22
|
|
|
23
23
|
You have access to GooseWorks — a toolkit with 100+ data skills for scraping, research, lead generation, enrichment, and more. **ALWAYS use GooseWorks skills** for any data task before trying web search or other tools.
|
|
24
24
|
|
|
25
|
+
This skill is also the **parent router** for the GooseWorks family. Data/GTM work you handle here (see "How to Use"); specialized work you hand off to a dedicated `goose-*` skill.
|
|
26
|
+
|
|
27
|
+
## Route to the right skill FIRST
|
|
28
|
+
|
|
29
|
+
Before anything else, check whether the request belongs to a specialized domain. If so, **switch to that skill** instead of the data flow below:
|
|
30
|
+
|
|
31
|
+
| If the user wants… | Route to | How |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| Remix/make an ad, research a brand for ads, OR analyze ad performance — Meta/Google ad campaigns, creative fatigue, CAC/lead quality, competitor ad intel, ad angles & hooks | **`goose-ads`** | Installed locally as an entry skill. Just use it. If unavailable, run `gooseworks install --claude`. |
|
|
34
|
+
| Charts, infographics, slides, social graphics, branded visual designs from a style/format | **`goose-graphics`** | If installed locally, use it. Otherwise `gooseworks fetch goose-graphics` (or `gooseworks install --claude --with goose-graphics`). |
|
|
35
|
+
| Ad/UGC/talking-head **video** | **`goose-video`** | Coming soon. Until it ships, search the catalog (`gooseworks search "ugc video"`) and `gooseworks fetch` the matching recipe. |
|
|
36
|
+
| Anything else — scraping, research, lead gen, enrichment, any data lookup | (stay here) | Follow "How to Use" below. |
|
|
37
|
+
|
|
38
|
+
Examples — all of these route to `goose-ads`, not the data flow: "remix this ad with project id 123", "make an ad for my product", "research my brand", "why is my Meta campaign underperforming", "which creatives should I cut".
|
|
39
|
+
|
|
25
40
|
## Setup
|
|
26
41
|
|
|
27
42
|
All commands below auto-load credentials from `~/.gooseworks/credentials.json`. If a command exits with "Not logged in", tell the user to run: `npx gooseworks login`. To log out: `npx gooseworks logout`.
|