gooseworks 0.4.2 → 0.4.5-dev.15.facf60fb
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 +84 -22
- package/dist/agents/staging.d.ts +38 -0
- package/dist/agents/staging.d.ts.map +1 -0
- package/dist/agents/staging.js +309 -0
- package/dist/agents/staging.js.map +1 -0
- package/dist/auth/credentials.d.ts +1 -0
- package/dist/auth/credentials.d.ts.map +1 -1
- package/dist/auth/credentials.js +26 -8
- package/dist/auth/credentials.js.map +1 -1
- package/dist/auth/device-flow.d.ts +79 -0
- package/dist/auth/device-flow.d.ts.map +1 -0
- package/dist/auth/device-flow.js +411 -0
- package/dist/auth/device-flow.js.map +1 -0
- package/dist/auth/login-mode.d.ts +25 -0
- package/dist/auth/login-mode.d.ts.map +1 -0
- package/dist/auth/login-mode.js +87 -0
- package/dist/auth/login-mode.js.map +1 -0
- package/dist/auth/oauth-server.d.ts +2 -2
- package/dist/auth/oauth-server.d.ts.map +1 -1
- package/dist/auth/oauth-server.js +28 -5
- package/dist/auth/oauth-server.js.map +1 -1
- package/dist/auth/paste-login.d.ts +27 -0
- package/dist/auth/paste-login.d.ts.map +1 -0
- package/dist/auth/paste-login.js +203 -0
- package/dist/auth/paste-login.js.map +1 -0
- package/dist/commands/doctor.d.ts +29 -5
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +116 -63
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/fetch.d.ts +1 -0
- package/dist/commands/fetch.d.ts.map +1 -1
- package/dist/commands/fetch.js +64 -29
- package/dist/commands/fetch.js.map +1 -1
- package/dist/commands/formats.js +2 -2
- package/dist/commands/formats.js.map +1 -1
- package/dist/commands/graphics/publish-flow.js +1 -1
- package/dist/commands/graphics/publish-flow.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +126 -26
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/launch.d.ts +3 -0
- package/dist/commands/launch.d.ts.map +1 -0
- package/dist/commands/launch.js +35 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/login.d.ts +21 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +112 -30
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +7 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/skills.d.ts +50 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +160 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/styles.js +2 -2
- package/dist/commands/styles.js.map +1 -1
- package/dist/commands/tool.d.ts +17 -0
- package/dist/commands/tool.d.ts.map +1 -0
- package/dist/commands/tool.js +239 -0
- package/dist/commands/tool.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +37 -6
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/video-local.d.ts +9 -0
- package/dist/commands/video-local.d.ts.map +1 -0
- package/dist/commands/video-local.js +83 -0
- package/dist/commands/video-local.js.map +1 -0
- package/dist/commands/video-save.d.ts +3 -0
- package/dist/commands/video-save.d.ts.map +1 -0
- package/dist/commands/video-save.js +83 -0
- package/dist/commands/video-save.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -3
- package/dist/config.js.map +1 -1
- package/dist/environment.d.ts +9 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +105 -0
- package/dist/environment.js.map +1 -0
- package/dist/index.js +12 -38
- package/dist/index.js.map +1 -1
- package/dist/lib/graphics-cache.d.ts.map +1 -1
- package/dist/lib/graphics-cache.js +2 -2
- package/dist/lib/graphics-cache.js.map +1 -1
- package/dist/lib/mcp-client.d.ts +53 -0
- package/dist/lib/mcp-client.d.ts.map +1 -0
- package/dist/lib/mcp-client.js +196 -0
- package/dist/lib/mcp-client.js.map +1 -0
- package/dist/lib/video-local-captions.d.ts +83 -0
- package/dist/lib/video-local-captions.d.ts.map +1 -0
- package/dist/lib/video-local-captions.js +261 -0
- package/dist/lib/video-local-captions.js.map +1 -0
- package/dist/lib/video-local-runtime.d.ts +8 -0
- package/dist/lib/video-local-runtime.d.ts.map +1 -0
- package/dist/lib/video-local-runtime.js +201 -0
- package/dist/lib/video-local-runtime.js.map +1 -0
- package/dist/lib/video-save-mcp.d.ts +9 -0
- package/dist/lib/video-save-mcp.d.ts.map +1 -0
- package/dist/lib/video-save-mcp.js +162 -0
- package/dist/lib/video-save-mcp.js.map +1 -0
- package/dist/lib/video-save.d.ts +77 -0
- package/dist/lib/video-save.d.ts.map +1 -0
- package/dist/lib/video-save.js +440 -0
- package/dist/lib/video-save.js.map +1 -0
- package/dist/program.d.ts +2 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +56 -0
- package/dist/program.js.map +1 -0
- package/dist/skills/custom-video-skill.d.ts +3 -0
- package/dist/skills/custom-video-skill.d.ts.map +1 -0
- package/dist/skills/custom-video-skill.js +6 -0
- package/dist/skills/custom-video-skill.js.map +1 -0
- package/dist/skills/installer.d.ts +12 -6
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +82 -38
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/master-skill.d.ts +34 -28
- package/dist/skills/master-skill.d.ts.map +1 -1
- package/dist/skills/master-skill.js +2264 -858
- package/dist/skills/master-skill.js.map +1 -1
- package/dist/skills/package-freshness.d.ts +16 -0
- package/dist/skills/package-freshness.d.ts.map +1 -0
- package/dist/skills/package-freshness.js +36 -0
- package/dist/skills/package-freshness.js.map +1 -0
- package/dist/skills/releases.d.ts +12 -0
- package/dist/skills/releases.d.ts.map +1 -0
- package/dist/skills/releases.js +155 -0
- package/dist/skills/releases.js.map +1 -0
- package/dist/skills/routes.d.ts.map +1 -1
- package/dist/skills/routes.js +12 -6
- package/dist/skills/routes.js.map +1 -1
- package/dist/skills/staging-content.d.ts +3 -0
- package/dist/skills/staging-content.d.ts.map +1 -0
- package/dist/skills/staging-content.js +12 -0
- package/dist/skills/staging-content.js.map +1 -0
- package/dist/utils/browser-preflight.d.ts +29 -0
- package/dist/utils/browser-preflight.d.ts.map +1 -0
- package/dist/utils/browser-preflight.js +338 -0
- package/dist/utils/browser-preflight.js.map +1 -0
- package/dist/utils/http.d.ts +7 -1
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +5 -1
- package/dist/utils/http.js.map +1 -1
- package/package.json +11 -3
- package/skills/goose-ads/SKILL.md +509 -239
- package/skills/goose-product-photos/SKILL.md +161 -60
- package/skills/goose-video/SKILL.md +592 -259
- package/skills/goose-video-local/SKILL.md +1409 -236
- package/skills/gooseworks/SKILL.md +327 -34
- package/skills/make-custom-video/SKILL.md +735 -0
- package/skills/manifest.json +12 -0
- package/skills/routes.json +13 -6
- package/dist/skills/fetcher.d.ts +0 -18
- package/dist/skills/fetcher.d.ts.map +0 -1
- package/dist/skills/fetcher.js +0 -118
- package/dist/skills/fetcher.js.map +0 -1
|
@@ -5,9 +5,10 @@ description: >
|
|
|
5
5
|
GooseWorks growth coworker and specialist-skill router. Research brands, customers, competitors,
|
|
6
6
|
creators, markets, and prospects; analyze ads and performance; create ads, product photos,
|
|
7
7
|
graphics, and video; search and scrape public web and social data; find and enrich leads.
|
|
8
|
+
Capture founder answers, brand rules, audience depth, and video taste in the existing brand.
|
|
8
9
|
Use it as the single GooseWorks entry point for brand growth, B2B, sales, research, and GTM work.
|
|
9
10
|
category: general
|
|
10
|
-
version: 1.
|
|
11
|
+
version: 1.1.2
|
|
11
12
|
author: GooseWorks
|
|
12
13
|
tags: [gooseworks, data, scraping, search, reddit, twitter, linkedin, email, people, research, gtm, leads, prospecting]
|
|
13
14
|
---
|
|
@@ -18,47 +19,197 @@ You have access to GooseWorks — an AI coworker with specialist skills for rese
|
|
|
18
19
|
|
|
19
20
|
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.
|
|
20
21
|
|
|
22
|
+
## How to talk to the customer (applies to every message you send them)
|
|
23
|
+
|
|
24
|
+
The customer is a marketer or founder, not an engineer. Everything in this skill about tools,
|
|
25
|
+
fields, files, polling, models and pipeline steps is for YOU. Never pass it on to them.
|
|
26
|
+
|
|
27
|
+
- **Say what they get and what they need to decide, never how it's made.**
|
|
28
|
+
Bad: "Checking the media-proxy helpers for voiceover timestamps and lipsync." / "Generated with
|
|
29
|
+
gpt-image-2 at high quality, mouth closed, passes QC."
|
|
30
|
+
Good: "Recording the voices now." / "Here are your two hosts."
|
|
31
|
+
- **Never mention** tool, file or field names, ids, JSON, commands, scripts, installed software,
|
|
32
|
+
uploads, model or vendor names, timings in seconds or frames, retries, polling, internal statuses
|
|
33
|
+
or your own quality checks. Fix what you can quietly. If they ask how something works, explain it
|
|
34
|
+
simply.
|
|
35
|
+
- **Update them only at milestones they care about**: choices confirmed, script and voices done,
|
|
36
|
+
visuals done, ready to review, finished. One short line each, then stay quiet until the next
|
|
37
|
+
milestone. No update for setup, downloads, uploads or saving.
|
|
38
|
+
- **Money is in credits, with a number**: "the full video uses about N credits". Never "the cheap
|
|
39
|
+
pieces" or "the expensive render".
|
|
40
|
+
- **Problems:** say what it means for them and what they can do, in one or two sentences. No error
|
|
41
|
+
codes or stack traces. Only raise a problem that changes something for them.
|
|
42
|
+
- **Use their words**: script, voice, hook, scene, host, ending, logo, the product shot.
|
|
43
|
+
- **No filler**: no "Great question!", "Certainly!", "I hope this helps!", no restating what they
|
|
44
|
+
just said at length.
|
|
45
|
+
|
|
46
|
+
Example. Instead of a dozen lines about render tools, scripts, uploads and portraits, send:
|
|
47
|
+
"Got it: warm tone, home podcast studio, Brielle as the skeptic and Mark as the believer." then
|
|
48
|
+
"Script and voices are done (about 34 seconds)." then "Ready for you to review: the script, voices,
|
|
49
|
+
both hosts and the ending. You can also review your recipe ingredients in the app: <link>. Say go
|
|
50
|
+
here and I'll make the full video (about N credits)."
|
|
51
|
+
|
|
52
|
+
## Use current instructions for new work
|
|
53
|
+
|
|
54
|
+
Before a new task in a terminal host, run `gooseworks skills status` once. It compares the
|
|
55
|
+
installed entry files, running CLI and published npm release. An older CLI needs a package
|
|
56
|
+
upgrade before `gooseworks update`; update alone only uses that CLI's bundled instructions.
|
|
57
|
+
Preserve local edits or unknown install provenance. Review/back up before explicitly replacing
|
|
58
|
+
modified files; never quietly reinstall over them. If the release check is unavailable, report
|
|
59
|
+
that freshness is unknown rather than claiming the local copy is latest.
|
|
60
|
+
|
|
61
|
+
For a new recipe run, fetch its package from the connected catalog. Retain the returned
|
|
62
|
+
`version` / `contentHash` and every dependency's hash with the saved package. When reusing a
|
|
63
|
+
saved fetch JSON, `gooseworks fetch <slug> --saved-package <file>` returns the current package
|
|
64
|
+
and a hash comparison without changing that file. With MCP, if the advertised `catalog_fetch`
|
|
65
|
+
schema accepts them, send `saved_content_hash` and `saved_dependency_hashes`; otherwise fetch
|
|
66
|
+
normally and compare the returned hashes yourself. Missing hashes mean unknown, not current.
|
|
67
|
+
The server cannot inspect a client's saved files; hash metadata does not certify later edits.
|
|
68
|
+
Fetch current packages into a new run directory and report stale saved instructions. Preserve
|
|
69
|
+
an existing approved run's recorded package; changing that harness requires a reviewed change
|
|
70
|
+
and approval before spending. Hosted installed snapshots use the existing Skills Update action.
|
|
71
|
+
Skill content and a host's cached MCP tool schemas are separate: refreshing one does not refresh
|
|
72
|
+
the other. Check the actual advertised tools before using new fields.
|
|
73
|
+
|
|
74
|
+
## No GooseWorks tools in this session? Call them through the CLI
|
|
75
|
+
|
|
76
|
+
The GooseWorks tools named here (for example `account_whoami`, `brand_onboarding`,
|
|
77
|
+
`brand_read`) normally come from the GooseWorks connector. If they are not registered in this
|
|
78
|
+
session but you have a shell with the `gooseworks` CLI signed in (a cloud sandbox such as
|
|
79
|
+
ChatGPT agent, Meta AI or Grok), call the same tool from the shell:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx gooseworks tool <name> '<arguments as a JSON object>'
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- Run `npx gooseworks tool --list` once first. It prints the server's rules for using the tools
|
|
86
|
+
and every tool name; `npx gooseworks tool <name> --schema` shows one tool's arguments.
|
|
87
|
+
- The result prints as JSON. When a tool answers with a one-line summary, the fields you act on
|
|
88
|
+
(such as `next_step` and ids) follow under "Data:". It exits 1 when the tool reports an error.
|
|
89
|
+
- Nothing renders as a widget here, so tell the user the result in plain words.
|
|
90
|
+
- The same rules apply as over the connector: state the credit total and get the user's yes
|
|
91
|
+
before paid work.
|
|
92
|
+
- If it says you are not logged in, run `npx gooseworks login --device --no-wait`, show the
|
|
93
|
+
user the link and code it prints, and run `npx gooseworks login --device` once they approve.
|
|
94
|
+
|
|
95
|
+
When the tools are registered in this session, call them directly instead.
|
|
96
|
+
|
|
21
97
|
## Route to the right skill FIRST
|
|
22
98
|
|
|
23
|
-
First apply the **Common company onboarding** gate below. Preserve the user's original request while onboarding, then continue with it as soon as onboarding is complete. Then load the brand context (**"Load the brand context FIRST"**, immediately below)
|
|
99
|
+
First apply the **Common company onboarding** gate below. Preserve the user's original request while onboarding, then continue with it as soon as onboarding is complete. For video work, load the current matching workflow from the selected connection first: `goose-video` for a new request, `make-custom-video` for an explicit original/reference brief, or `goose-video-local` for an existing template project/batch. Read an existing project first to determine its actual route and retain its approved packages. Fetch with the advertised `catalog_fetch { type: "skill", slug }`; an installed copy or old chat is only a bootstrap. Then load the brand context (**"Load the brand context FIRST"**, immediately below), search the Brand Brain for the task (**"Search the Brand Brain, then propose"**), and follow the matching workflow with both. For other specialized work, **switch to that skill** after loading the brand instead of the data flow below:
|
|
100
|
+
|
|
101
|
+
**Follow the connector's full-guide requirement when available.** Fetch
|
|
102
|
+
`catalog_fetch { type: "skill", slug: "gooseworks-guide" }` when the connector requires it.
|
|
103
|
+
The only older-server exception is below; it never removes brand preparation or approvals.
|
|
104
|
+
|
|
105
|
+
| Returned guide/workflow state on the selected connection | Required action |
|
|
106
|
+
| --- | --- |
|
|
107
|
+
| Guide returns `not_found`, and this same connection already returned the complete current matching video entry with its required dependencies | Continue with that authoritative entry's workflow, full brand preparation and existing approvals. |
|
|
108
|
+
| Guide has another error, no response, or incomplete content; or the matching entry/dependencies are missing, incomplete or from another connection | Stop before creative work, project writes or paid calls; resolve a compatible connection on this same environment. |
|
|
109
|
+
|
|
110
|
+
A missing custom entry or required custom tool/schema remains unavailable: never substitute
|
|
111
|
+
a template or an import to bypass it. Never hide other fetch errors or continue from cached
|
|
112
|
+
instructions merely because the guide was not found.
|
|
113
|
+
|
|
114
|
+
For "interview me about the brand", "save our brand rules", "refine our audience", or "remember
|
|
115
|
+
our video taste", stay here and follow **Guided brand capture** below. This extends the current
|
|
116
|
+
brand and onboarding flow; it does not create another onboarding checklist.
|
|
24
117
|
|
|
25
118
|
| If the user wants… | Route to | How |
|
|
26
119
|
| --- | --- | --- |
|
|
27
|
-
| 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`** |
|
|
120
|
+
| 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`** | In a chat app, fetch it with `catalog_fetch { type: "skill", slug: "goose-ads" }`. In a terminal, use the installed entry skill; if it is missing, run `gooseworks install --claude`. |
|
|
28
121
|
| 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`). |
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
122
|
+
| Make a **video** ad from a template or an original brief. Template-free briefs and Instagram/direct video references route to make-custom-video. An agent that can run shell commands on the customer's computer makes it there; otherwise the GooseWorks coworker makes it. | **`goose-video`** | For new work, fetch the current goose-video entry from the selected connection, then load the full brand before format suggestions. An installed entry is a bootstrap; keep approved project packages on resume. |
|
|
123
|
+
| Create an original branded video without a template, adapt an Instagram/direct video reference, or resume a generated custom project; separate script and ingredient approvals are required in the same chat | **`make-custom-video`** | Fetch the current make-custom-video entry and its production harness for new work, then read summary, kit, products and learnings before script writing. Read an existing project first and retain its approved package/context on resume. |
|
|
124
|
+
| Render an EXISTING app video project or batch on this machine — the app's "copy for Claude" command names it | **`goose-video-local`** | Read the existing project first. Use the current goose-video-local entry as the connection adapter, retain approved recipe packages/context and apply brand preparation before a new plan or script. |
|
|
125
|
+
| Make **product photos** — studio, lifestyle, marketplace, social, or on-model product photography | **`goose-product-photos`** | In a chat app, fetch it with `catalog_fetch { type: "skill", slug: "goose-product-photos" }`. In a terminal, use the installed entry skill; if it is missing, run `gooseworks install --claude`. |
|
|
126
|
+
| Animate an approved static ad or product image | **`animate-image`** | Fetch it (`catalog_fetch { type: "skill", slug: "animate-image" }` in a chat app, `gooseworks fetch animate-image` in a terminal) and follow its GooseWorks MCP workflow. |
|
|
33
127
|
| Anything else — scraping, research, lead gen, enrichment, any data lookup | (stay here) | Follow "How to Use" below. |
|
|
34
128
|
|
|
35
129
|
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".
|
|
36
130
|
|
|
37
131
|
## Load the brand context FIRST (mandatory — before you route, and before you ask anything)
|
|
38
132
|
|
|
39
|
-
**Call `
|
|
133
|
+
**Call `brand_read { brand_id, sections: ["summary", "kit", "products", "learnings", "onboarding"] }` before the first substantive step of ANY task**, and before you route to a specialist skill. Older clients can use `brand_get_context` with the same sections only when that tool is advertised. It is a read-only call that returns the brand's canonical facts and saved rules:
|
|
134
|
+
|
|
135
|
+
For videos, read the current workflow first as described above, then load all four creative
|
|
136
|
+
sections (summary, kit, products and learnings) before suggesting formats, choosing angles or
|
|
137
|
+
writing a script. Onboarding facts alone are insufficient. Carry saved rules and kit assets
|
|
138
|
+
into the specialist's brand preparation. `Video preference:` rules describe the look, voice
|
|
139
|
+
and pacing; they are not lines to read aloud. On an approved resume, preserve the saved brand
|
|
140
|
+
inputs and packages; an intentional change uses the existing affected review/approval gates.
|
|
40
141
|
|
|
41
142
|
| It returns | Use it for |
|
|
42
143
|
| --- | --- |
|
|
43
144
|
| **voice** — tone, style, banned phrasing | Any copy, script, caption, hook, or headline. Don't ask "what tone?" |
|
|
44
145
|
| **products** — names, descriptions, pricing, links, imagery | Picking the product to feature. Don't ask "which product?" — offer the list. |
|
|
45
146
|
| **audience** — segments, demographics, jobs-to-be-done | Targeting, angles, creator fit. Don't ask "who is this for?" |
|
|
46
|
-
| **positioning** — category, value props, proof points, tagline | Angles, offers, competitive framing. Don't ask "what makes you different?" |
|
|
147
|
+
| **positioning** — category, value props, proof points, tagline | Angles, offers, competitive framing. Don't ask "what makes you different?" Kit proof points are proof an ad may state as written; other positioning text is context. |
|
|
47
148
|
| **research status** — whether the brand's research pass has completed | Whether the facts are trustworthy yet, or still being filled in. |
|
|
48
149
|
|
|
49
150
|
Then:
|
|
50
151
|
|
|
51
|
-
1. **Pass what it returned INTO the routed skill.** When you hand off to `goose-ads`, `goose-video`, `goose-product-photos`, `goose-graphics`, or a fetched Brand Growth recipe, carry the voice / products / audience / positioning with you. Do **not** make the routed skill re-derive them, and do **not** re-run brand research when the context is already there.
|
|
52
|
-
2. **Never re-ask the user for something the brand context already answers.** If a routed skill's own prose asks a question the context answers,
|
|
152
|
+
1. **Pass what it returned INTO the routed skill.** When you hand off to `goose-ads`, `goose-video`, `goose-product-photos`, `goose-graphics`, or a fetched Brand Growth recipe, carry the voice / products / audience / positioning with you, plus the evidence brief from the Brain search below. Do **not** make the routed skill re-derive them, and do **not** re-run brand research when the context is already there.
|
|
153
|
+
2. **Never re-ask the user for something the brand context already answers.** If a routed skill's own prose asks a question the context or the Brain search answers, they win — answer it yourself and move on. Ask only for what is genuinely missing after both, or a decision that is the user's to make.
|
|
53
154
|
3. **If research status is not complete**, say so in one line, use what you have, and continue. Only run brand research when the context comes back empty or the user asks for it.
|
|
54
|
-
4. **If `
|
|
55
|
-
5. **
|
|
56
|
-
|
|
57
|
-
Never invent a brand fact. If it isn't in the brand context and the user hasn't said it,
|
|
155
|
+
4. **If `brand_read` is unavailable**, refresh the GooseWorks connection or tool list. An older connection may expose `brand_get_context` / `get_brand_kit`; use those only when actually advertised. Never require a legacy tool name or guess brand facts.
|
|
156
|
+
5. **A read grants no write permission.** Save explicit durable answers/corrections with the capture policy below. Propose agent-derived changes for review; never overwrite confirmed knowledge with research or a guess.
|
|
157
|
+
|
|
158
|
+
Never invent a brand fact. If it isn't in the brand context and the user hasn't said it, search
|
|
159
|
+
the Brand Brain next. Ask the user only when that search cannot answer it and the answer is
|
|
160
|
+
theirs to give.
|
|
161
|
+
|
|
162
|
+
## Search the Brand Brain, then propose — before any creative choice or question
|
|
163
|
+
|
|
164
|
+
The Brand Kit is a summary. The brand's saved knowledge (its Brain) holds what the Kit does not:
|
|
165
|
+
rules from past feedback, approved and rejected creatives, customer evidence, approved claims,
|
|
166
|
+
reports and documents. **After `brand_read`, and before you choose an angle, claim, hook,
|
|
167
|
+
product emphasis, format or source ad — and before you ask the user for any brand fact — call
|
|
168
|
+
`knowledge_search { brand_id, query }`** when it is registered. It is free and read-only: no
|
|
169
|
+
approval, no announcement to the customer and no questionnaire.
|
|
170
|
+
|
|
171
|
+
1. **Search for this task, not the whole Brain.** Run one short query (under 500 characters) in
|
|
172
|
+
the user's own words plus the product (for example "ads for <product>: what worked, what to
|
|
173
|
+
avoid") and one with
|
|
174
|
+
`source_types: ["evidence", "claim", "learning", "creative", "document"]` for proof and past
|
|
175
|
+
creative results. Add a query only for a specific open question. Reuse results from this run.
|
|
176
|
+
2. **Keep these states distinct** and record which one each query returned:
|
|
177
|
+
|
|
178
|
+
| Result | Means | Do |
|
|
179
|
+
| --- | --- | --- |
|
|
180
|
+
| `status: "ok"` with matches | Saved knowledge exists | Use it; keep each fact's citation in your working brief |
|
|
181
|
+
| `status: "empty"` | Nothing saved matches this query | Say "no saved evidence for <topic>", never "the brand has no proof" |
|
|
182
|
+
| `refresh_required` | The results shown are current; some changed sources were left out | Use them; search again shortly for anything missing |
|
|
183
|
+
| `building` | The index is not ready | Retry once shortly, then continue with the gap stated |
|
|
184
|
+
| An error, or the tool is not registered | Retrieval failed or is unavailable | Retry an error once, then continue from `brand_read` and treat evidence as unchecked |
|
|
185
|
+
| An empty Kit field | Only that field is blank | Not a search result: still search before asking |
|
|
186
|
+
|
|
187
|
+
3. **Let the findings change the plan.** A `dont`/`must` learning or a rejected creative rules
|
|
188
|
+
options out; an approved or well-rated past creative is a proven angle to lead with; a report
|
|
189
|
+
shows what worked. Claim-grade proof is a result with `approved_ad_claim: true` or the kit's
|
|
190
|
+
`approvedClaims` within their stated applicability; the kit's `proofPoints` are what the
|
|
191
|
+
backend allows an ad to state, used as written. Other Kit text, documents and performance
|
|
192
|
+
numbers are context, never public claims. Never invent an offer, price or result. Judge
|
|
193
|
+
relevance and skip results about another product or business.
|
|
194
|
+
4. **Propose; don't interview.** Lead with one recommended direction (angle, product, source or
|
|
195
|
+
format) and a one-line reason naming what you found, with up to two alternatives. When several
|
|
196
|
+
directions fit (two audiences, products or campaigns), pick the one the evidence favours, such
|
|
197
|
+
as an active campaign or approved past creatives, and name the other as an alternative instead
|
|
198
|
+
of asking. Ask only for a decision the brand read and the search cannot settle, or for spend
|
|
199
|
+
approval. Never ask the user for a fact the Brain already answered.
|
|
200
|
+
Keep directions already chosen (the user's words, a project's creative brief, handed-off
|
|
201
|
+
defaults, approved plans): search only to fill empty fields and to apply saved rules. When a
|
|
202
|
+
returned card or picker presents the choice, your recommendation is its one acknowledgement
|
|
203
|
+
line and the saved plan's defaults, not a separate list.
|
|
204
|
+
5. **Carry an evidence brief** into the routed skill, writer or plan: findings with citations,
|
|
205
|
+
the state of each query, what it ruled out and the open gaps. Tell the customer the findings
|
|
206
|
+
in plain words; the citations stay in the brief.
|
|
207
|
+
|
|
208
|
+
On an approved resume, keep the saved brief and evidence; search again only for a new decision.
|
|
58
209
|
|
|
59
210
|
## Setup
|
|
60
211
|
|
|
61
|
-
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`.
|
|
212
|
+
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`. In a cloud sandbox or over SSH, sign in with a code instead: run `npx gooseworks login --device --no-wait` yourself, show the user the link and code it prints, and run `npx gooseworks login --device` once they have approved. To log out: `npx gooseworks logout`.
|
|
62
213
|
|
|
63
214
|
### Choose the available runtime — MCP first, then CLI
|
|
64
215
|
|
|
@@ -66,20 +217,33 @@ Skills may describe a managed provider request as an environment-neutral operati
|
|
|
66
217
|
`provider`, `method`, `path`, and optional `query` or `body`. Execute the operation through
|
|
67
218
|
the first available runtime:
|
|
68
219
|
|
|
69
|
-
1. If the matching GooseWorks MCP tool is registered, use it. For ScrapeCreators, pass
|
|
70
|
-
operation directly to `
|
|
71
|
-
|
|
220
|
+
1. If the matching GooseWorks MCP tool is registered, use it. For ScrapeCreators, pass a GET
|
|
221
|
+
operation directly to `data_call_provider` (`provider`, `path`, `query`) and a POST
|
|
222
|
+
operation to `data_post_provider` (`provider`, `path`, `body`, optional `query`).
|
|
223
|
+
This is the preferred path in ChatGPT, Cowork, and other terminal-free clients.
|
|
224
|
+
Do not shell out and do not ask for a separate provider key.
|
|
72
225
|
2. Otherwise, if a local terminal and the `gooseworks` CLI are available, translate the same
|
|
73
226
|
operation into `gooseworks call <provider> <path>` with its method, query, and body options.
|
|
74
227
|
3. Otherwise, follow the provider dependency's direct-key path only when the user has supplied
|
|
75
228
|
their own key. If no runtime is available, explain what connection is missing; never pretend
|
|
76
229
|
the provider call ran.
|
|
77
230
|
|
|
231
|
+
Managed provider calls are paid on the MCP and CLI runtimes alike (a ScrapeCreators call costs 1
|
|
232
|
+
credit today, and each result reports what it charged). Before a skill's first paid call, tell the
|
|
233
|
+
user roughly how many calls it will make and the credit total, and get their yes.
|
|
234
|
+
|
|
78
235
|
The same selection applies to catalog and account operations. When the CLI is unavailable but the
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- `gooseworks
|
|
82
|
-
- `gooseworks
|
|
236
|
+
GooseWorks MCP tools are connected, use these equivalents. Match on the tool name: a coding agent
|
|
237
|
+
may show a server prefix (for example `mcp__gooseworks__catalog_search`), a chat app may not.
|
|
238
|
+
- `gooseworks search <q>` → **`catalog_search { type: "skill", query: "<q>" }`**.
|
|
239
|
+
- `gooseworks fetch <slug>` → **`catalog_fetch { type: "skill", slug: "<slug>" }`** (same content/scripts/files/deps).
|
|
240
|
+
- `gooseworks credits` → **`account_whoami`** (the balance is `credits.available_credits`).
|
|
241
|
+
|
|
242
|
+
If one of these tools is missing, the GooseWorks connection or its tool list is stale: ask the
|
|
243
|
+
user to reconnect or refresh GooseWorks. Installing or updating the `gooseworks` CLI never fixes
|
|
244
|
+
a missing connector tool, so never send a chat-app user to a terminal for it. An agent that has
|
|
245
|
+
its own shell and a signed-in CLI can call the tool with `npx gooseworks tool` instead (see
|
|
246
|
+
"No GooseWorks tools in this session?" above).
|
|
83
247
|
|
|
84
248
|
Discovery, skill fetching, and ScrapeCreators-backed Brand Growth workflows work fully CLI-free
|
|
85
249
|
this way. Task skills own the endpoint and analysis workflow; this runtime rule owns how the same
|
|
@@ -109,16 +273,145 @@ When onboarding returns a review link, show that single link and ask the user to
|
|
|
109
273
|
Use the host's native question controls. Ask one short group at a time and rely on the live tool schema for accepted values.
|
|
110
274
|
|
|
111
275
|
1. **Start** — If status returns `start`, ask for the company website or Apple App Store URL. Also offer the optional hero product URL and “Where do you do your work?” choices: Slack, WhatsApp, iMessage, Claude Code, Claude, Codex, and ChatGPT. Call `action: "start"`; server-side research begins immediately. If status returns `select_brand`, ask which company/client to use. Otherwise reuse the only brand automatically.
|
|
112
|
-
2. **Your coworker** —
|
|
113
|
-
3. **Your company** — Use the returned `company_draft`
|
|
114
|
-
4. **Your taste** — In a terminal or CLI host, use the returned `taste_url`: open it when the host supports opening links and always show one clickable **Choose your taste in GooseWorks** link. Ask the user to heart or skip ads on that page, click **Continue** or **Skip this**, return to the agent, and reply `done`. Do not print, enumerate, or summarize `taste_deck` in the terminal. After `done`, call `brand_onboarding { action: "status" }` again and follow the refreshed `next_step`. In a chat host that renders images, show only the one image attached by the tool and save each Love/Skip decision with `action: "save_taste"`;
|
|
115
|
-
5. **First campaign** — Ask **“What’s happening right now?”**: launch `launch`, promotion `promo`, seasonal moment `seasonal`, or nothing special `nothing`, plus an optional note. Call `action: "propose_campaign"`, show the returned editable card (name, objective, offer, audience, 2–3 angles, CTA, and product URL), and save edits with `action: "save_campaign"`. Send `accept: true` only after approval; acceptance can start the complimentary first creatives.
|
|
116
|
-
6. **
|
|
117
|
-
7. **
|
|
118
|
-
|
|
276
|
+
2. **Your coworker** — The current flow accepts the default coworker automatically. If an older session returns `coworker`, refresh `status`; do not introduce a naming/avatar question. Rename only when the user asks and the live tool supports it.
|
|
277
|
+
3. **Your company** — Use the returned `company_draft` plus the user's existing answers. Ask only to verify missing or ambiguous details: what they sell (`marketCategory`), where people buy (`appPlatforms`), primary customer, customer problem, promised outcome, and optional differentiator. Monthly Meta ad spend belongs here when absent: `none`, `under_10k`, `10k_50k`, `50k_150k`, `150k_plus`, or `not_sure`. Save the merged required company object with `action: "save_company", company: { … }`; read `status` back.
|
|
278
|
+
4. **Your taste** — In a terminal or CLI host, use the returned `taste_url`: open it when the host supports opening links and always show one clickable **Choose your taste in GooseWorks** link. Ask the user to heart or skip ads on that page, click **Continue** or **Skip this**, return to the agent, and reply `done`. Do not print, enumerate, or summarize `taste_deck` in the terminal. After `done`, call `brand_onboarding { action: "status" }` again and follow the refreshed `next_step`. In a chat host that renders images, show only the one image attached by the tool and save each Love/Skip decision with `action: "save_taste", taste: { hearted_ids, skipped_ids, complete }`; set `taste.complete: true` after three hearts or an explicit skip.
|
|
279
|
+
5. **First campaign** — Ask **“What’s happening right now?”**: launch `launch`, promotion `promo`, seasonal moment `seasonal`, or nothing special `nothing`, plus an optional note. Call `action: "propose_campaign"`, show the returned editable card (name, objective, offer, audience, 2–3 angles, CTA, and product URL), and save edits with `action: "save_campaign"`. Send `campaign.accept: true` only after approval; acceptance can start the complimentary first creatives.
|
|
280
|
+
6. **Review** — Show the returned founder, researched, and inferred facts with their provenance. The user may correct positioning, audience, voice, value propositions, proof points, or competitors through `action: "review_research", review: { action: "correct", field, value }`. A proof-point edit does not approve a claim. Complete with `review: { action: "complete" }` even when research is still running, failed, or sparse; never trap the user waiting for it.
|
|
281
|
+
7. **Channels** — If `channel_connected` is already true, this is complete automatically. Otherwise ask whether they want to connect Slack, WhatsApp, or iMessage later, or skip for now. An explicit skip is valid; call `action: "complete_channels"`.
|
|
282
|
+
|
|
283
|
+
The former revenue / 90-day-goal / `save_progress` screen is retired. Do not insert it into
|
|
284
|
+
onboarding. Ask those human-only questions later only when the user's task needs them.
|
|
119
285
|
|
|
120
286
|
Do not ask for role, discovery source, who makes creatives, who manages ads, or a separate “what do you want to do first?” menu. Those belonged to the retired CLI questionnaire. The task the user already asked for is their first task.
|
|
121
287
|
|
|
288
|
+
## Guided brand capture
|
|
289
|
+
|
|
290
|
+
Use this when the user requests a founder interview, audience/rules capture, or video taste.
|
|
291
|
+
Keep their original task pending. Load the current brand first, compare it with information
|
|
292
|
+
already volunteered in this chat, and **save known information first** using the canonical
|
|
293
|
+
mapping below. Do not run a long questionnaire as a prerequisite for making an ad.
|
|
294
|
+
|
|
295
|
+
For facts needed by the task but absent from the read, call `knowledge_search` first if it is
|
|
296
|
+
registered, as in **"Search the Brand Brain, then propose"**. Use returned citations and states
|
|
297
|
+
honestly: an empty, building or failed index is not proof that the brand has no answer. Do not re-scrape or ask the founder for a fact already
|
|
298
|
+
answered by trustworthy saved knowledge.
|
|
299
|
+
|
|
300
|
+
Ask one short group of missing human-only facts at a time, in plain language, with the relevant
|
|
301
|
+
known answer in that same question. "Skip" or "not sure" is valid. Examples, **only for gaps**:
|
|
302
|
+
|
|
303
|
+
| Gap | Useful question |
|
|
304
|
+
| --- | --- |
|
|
305
|
+
| Founder origin or conviction | "What made you start this, and what do you believe that alternatives get wrong?" |
|
|
306
|
+
| Audience depth | "Who buys first, what problem pushes them to act, and what nearly stops them?" |
|
|
307
|
+
| Buying trigger or alternatives | "What happens just before they look for you, and what do they use instead?" |
|
|
308
|
+
| Rules | "What must we always say or show, and what must we never say or imply?" |
|
|
309
|
+
| Proof | "What evidence supports that result, and do we have permission to quote the customer?" Keep unsupported claims pending. |
|
|
310
|
+
| Video taste | "Share a video you like and what you would keep or avoid: pace, voice, captions, or look." |
|
|
311
|
+
|
|
312
|
+
Keep skipped or uncertain answers as gaps in the brief; do not save them as confirmed facts.
|
|
313
|
+
Save each answered group and read it back before the next group. Stop when the requested capture
|
|
314
|
+
is covered or the user skips; resume from canonical saved answers after interruption. Present a
|
|
315
|
+
short brief containing verified answers, attribution, pending proposals and remaining gaps, then
|
|
316
|
+
continue the original task. Review happens in this chat plus any proposal review link returned
|
|
317
|
+
by the tools. Do not promise an unavailable evidence, claims or plan write.
|
|
318
|
+
|
|
319
|
+
## Save durable brand answers, then verify them
|
|
320
|
+
|
|
321
|
+
Read the selected brand with `brand_read { brand_id, sections: ["summary", "kit", "products", "learnings", "onboarding"] }`
|
|
322
|
+
(older clients: `brand_get_context` with the same sections, only when that tool is advertised).
|
|
323
|
+
Keep founder answers, user corrections, research and your own hypotheses distinct. Reuse
|
|
324
|
+
matching saved answers; ask only about gaps.
|
|
325
|
+
|
|
326
|
+
When the user asks to remember a rule, answers a brand interview, or explicitly corrects a
|
|
327
|
+
standing fact, save that answer in the same turn. The capture request authorizes those answers;
|
|
328
|
+
do not ask for approval again. A direction for this one video stays in its brief. If the scope
|
|
329
|
+
is genuinely ambiguous, ask whether it applies to future videos before saving a standing rule.
|
|
330
|
+
|
|
331
|
+
Use the **live registered schema**. Where supported, call `brand_update` with
|
|
332
|
+
`knowledge_intent: "user_correction"` and `user_statement` containing the user's exact,
|
|
333
|
+
verbatim answer, not your paraphrase or researched text.
|
|
334
|
+
For an inference or suggested improvement, use `knowledge_intent: "agent_proposal"`. Show the
|
|
335
|
+
before/after change from your prior read and proposed value; retain the returned proposal IDs
|
|
336
|
+
and say the user must accept it in the app. Link only a review surface actually returned by a
|
|
337
|
+
tool; the compact `knowledge_updates` response does not itself contain a diff or URL.
|
|
338
|
+
A pending proposal is not a saved fact. Never call an unavailable
|
|
339
|
+
tool or silently relabel research or your inference as something the user said.
|
|
340
|
+
|
|
341
|
+
The safe structured shape is `patch: { knowledge: { positioning?, audience?, voice?,
|
|
342
|
+
instructions?, brandType?, tagline?, valueProps? } }`, using only fields present in the live
|
|
343
|
+
schema. Inferred rules/taste go in an `instructions` proposal with a rationale, never in
|
|
344
|
+
`patch.facts`. Prefix every video-only preference in that proposed text with "Video preference:"
|
|
345
|
+
so it remains production direction after acceptance. Preserve unrelated instructions when
|
|
346
|
+
proposing a merged replacement.
|
|
347
|
+
|
|
348
|
+
| User answer | Canonical write |
|
|
349
|
+
| --- | --- |
|
|
350
|
+
| Primary audience, positioning or voice correction | `patch.knowledge: { audience/positioning/voice: <answer> }` (one actual key). During onboarding, `brand_onboarding { action: "review_research", review: { action: "correct", field, value } }` writes these existing corrections with provenance. |
|
|
351
|
+
| Founder story, customer pains, objections, buying trigger or useful audience detail without a structured field | `patch.facts: [{ kind: "insight", text }]`; retain attribution such as "Founder reports: …" rather than turn a belief into a verified result. |
|
|
352
|
+
| Required wording or pronunciation | `patch.facts: [{ kind: "must", text }]`; pronunciation is exactly `Pronounce "<term>" as "<say_as>"`. |
|
|
353
|
+
| Forbidden claim, word or visual | `patch.facts: [{ kind: "dont", text }]`. |
|
|
354
|
+
| Durable visual, voice or pacing preference | `patch.facts: [{ kind: "do", text }]` for a preference; `dont` for an avoidance; `template_hint` for a preferred format. Prefix video-only preferences with "Video preference:". |
|
|
355
|
+
|
|
356
|
+
Facts are existing `ad_brand_learning` rows with user provenance; they are not a second profile.
|
|
357
|
+
Update a matching rule by its returned `id` instead of adding duplicates. Preserve unrelated
|
|
358
|
+
rules and the user's exact meaning. Only use the legacy facts shape for explicitly user-authored
|
|
359
|
+
answers when the live schema lacks intent fields; agent suggestions still need a proposal path.
|
|
360
|
+
|
|
361
|
+
**Claims and plans have separate gates.** A founder assertion or proof point is not an approved,
|
|
362
|
+
evidence-backed claim or consent to quote a customer. Use the existing evidence/claims and
|
|
363
|
+
operating-plan tools only if registered, following their proposal, evidence and confirmation
|
|
364
|
+
requirements. Never encode a spend cap, approver or emergency stop as a learning. If that write
|
|
365
|
+
path is missing, report the specific unsaved item and keep it pending for the supported review
|
|
366
|
+
surface; do not claim it was saved or create a parallel local profile.
|
|
367
|
+
|
|
368
|
+
After every write, **read back before saying saved**: use `brand_read` with `kit`, `learnings`
|
|
369
|
+
or `onboarding` as appropriate, or `brand_onboarding { action: "status", brand_id }` after an
|
|
370
|
+
onboarding answer. Verify the intended field/rule, its source and the absence of a conflicting
|
|
371
|
+
duplicate. A generic success response, pending proposal, ignored key or truncated result is not
|
|
372
|
+
proof. Report partial saves honestly. Carry the verified rules into the current task and the
|
|
373
|
+
routed skill; claims still pass their own safety gate.
|
|
374
|
+
|
|
375
|
+
## Video taste — reuse examples and preferences
|
|
376
|
+
|
|
377
|
+
When asked to capture video taste, or when the user volunteers a durable video preference,
|
|
378
|
+
first read the saved learnings and `media_list { brand_id, scope: "brand", scope_id: brand_id,
|
|
379
|
+
tags: ["video-taste"], limit: 100 }`. Follow `next_cursor` before deciding an example is absent.
|
|
380
|
+
Do not force a taste interview before an unrelated task or ask again for an existing preference.
|
|
381
|
+
|
|
382
|
+
Save what the user has already supplied first. Then ask only the missing useful question, for
|
|
383
|
+
example: "What do you like about this video—its pace, voice, captions, or look?" An inaccessible
|
|
384
|
+
link can still be saved as a link with the user's explanation; do not pretend you watched it.
|
|
385
|
+
|
|
386
|
+
- **Direct clip or video file:** register with `media_upload { brand_id, scope: "brand",
|
|
387
|
+
scope_id: brand_id, kind: "video", source: { type: "url", url }, tags: ["video-taste", "reference-only"],
|
|
388
|
+
metadata: { purpose: "video_taste", source_url: url, provenance: "user", captured_at: <ISO timestamp>,
|
|
389
|
+
preference: <the user's explanation> } }`. For a file use the live file/bytes upload flow and
|
|
390
|
+
`media_confirm` after a presigned upload. Registration of a URL does not copy or inspect it.
|
|
391
|
+
- **Instagram/post/page link:** the same registration with `kind: "document"`; it is a link
|
|
392
|
+
bookmark, not downloadable footage or an indexed transcript. Do not fabricate a direct clip URL.
|
|
393
|
+
- **Preferences:** save the user's reasons, likes and dislikes through the facts mapping above.
|
|
394
|
+
Read and preserve existing facts before updating one. Do not invent `video_preferences` or
|
|
395
|
+
new `video_lab` keys; the live kit patch accepts only its documented asset fields.
|
|
396
|
+
- **Deduplicate:** reuse a matching returned media row, then `media_update` its title/tags/metadata
|
|
397
|
+
if needed; preserve existing metadata and tags. Do not create another row for the same example.
|
|
398
|
+
Read back with `media_list` and `brand_read` learnings before claiming it was saved.
|
|
399
|
+
Check the returned row belongs to this brand: URL deduplication may return another brand's
|
|
400
|
+
existing row. Do not relabel that row or claim success unless the current brand's scoped read
|
|
401
|
+
actually returns it. Report an unsaved association if no supported attach path is available.
|
|
402
|
+
|
|
403
|
+
Never put third-party taste examples into kit reference images: `kind: "reference"` at brand
|
|
404
|
+
scope writes there. The tags and metadata above record purpose and provenance; **they do not
|
|
405
|
+
grant or enforce usage rights**. Study the structure, pacing and look only. Never use the example's
|
|
406
|
+
footage, face, product, testimonial or claims in a new ad without independently verified permission.
|
|
407
|
+
|
|
408
|
+
Read video-only entries prefixed `Video preference:` from both saved learnings and
|
|
409
|
+
`kit.instructions`, including accepted proposals. Keep them out of required or forbidden
|
|
410
|
+
dialogue. Build a brief from the verified readback: preferred pace, voice, caption treatment, visual style,
|
|
411
|
+
formats to favour/avoid, reference links and the user's reasons. Say what is still unknown.
|
|
412
|
+
Pass it with the brand rules into the existing video workflow. A one-video request overrides a
|
|
413
|
+
default for that project; it does not silently rewrite the brand's standing preference.
|
|
414
|
+
|
|
122
415
|
## Brand Growth discovery
|
|
123
416
|
|
|
124
417
|
Brand Growth is a collection inside the normal skill catalog, not a command or installable pack. Use these known routes when relevant, while preserving all existing B2B, sales, research, lead-generation, and data behavior:
|
|
@@ -140,7 +433,7 @@ Brand Growth is a collection inside the normal skill catalog, not a command or i
|
|
|
140
433
|
| Written content and repurposing | `content-repurposing` |
|
|
141
434
|
| Graphics and animation | `goose-graphics`, `animate-image` |
|
|
142
435
|
|
|
143
|
-
Fetch the named public skill before following it. You already called `
|
|
436
|
+
Fetch the named public skill before following it. You already called `brand_read` — hand the brand's voice, products, audience, and positioning to the fetched skill instead of letting it re-derive or re-ask them. Provider helpers such as `scrapecreators-api` and `transcript-intelligence` are dependencies, not user-facing results.
|
|
144
437
|
|
|
145
438
|
For a multi-part request, repeat this routing check before each new job. Fetch and follow the
|
|
146
439
|
closest outcome skill first (for example, `comment-mining`, `creator-profile-teardown`, or
|
|
@@ -270,10 +563,10 @@ The `gooseworks` CLI sends authenticated requests (Bearer `GOOSEWORKS_API_KEY`)
|
|
|
270
563
|
|
|
271
564
|
## Rules
|
|
272
565
|
|
|
273
|
-
0. **
|
|
566
|
+
0. **Read the canonical brand context before substantive work**, pass what it returns into whatever skill you route to, and never re-ask the user for a fact it already answers (see "Load the brand context FIRST").
|
|
274
567
|
1. **Consider a GooseWorks skill when it fits the task** — scraping, research, lead gen, enrichment, especially at scale, behind auth, or from a specific source. For a quick lookup your built-in tools are fine; use your judgement and pick the best tool for the user.
|
|
275
|
-
2. **Before paid operations**, tell the user the estimated credit cost
|
|
276
|
-
3. **If a `gooseworks` command exits with "Not logged in"**: tell the user to run `npx gooseworks login`
|
|
568
|
+
2. **Before paid operations**, tell the user the estimated credit cost and get their yes
|
|
569
|
+
3. **If a `gooseworks` command exits with "Not logged in"**: tell the user to run `npx gooseworks login` (in a cloud sandbox or over SSH, use the code sign-in described in Setup)
|
|
277
570
|
4. **Parse JSON responses** and present data in a readable format to the user
|
|
278
571
|
5. **When running scripts**: save to `/tmp/gooseworks-scripts/`, install pip deps, then execute. NEVER pollute the user's project directory
|
|
279
572
|
6. **Output files default to `~/Gooseworks/`** — always confirm with the user before saving
|