gooseworks 0.4.4 → 0.5.0-dev.5.1ff84a4f

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.
Files changed (94) hide show
  1. package/README.md +27 -10
  2. package/dist/agents/staging.d.ts +38 -0
  3. package/dist/agents/staging.d.ts.map +1 -0
  4. package/dist/agents/staging.js +309 -0
  5. package/dist/agents/staging.js.map +1 -0
  6. package/dist/auth/credentials.d.ts +1 -0
  7. package/dist/auth/credentials.d.ts.map +1 -1
  8. package/dist/auth/credentials.js +26 -8
  9. package/dist/auth/credentials.js.map +1 -1
  10. package/dist/auth/oauth-server.d.ts.map +1 -1
  11. package/dist/auth/oauth-server.js +18 -2
  12. package/dist/auth/oauth-server.js.map +1 -1
  13. package/dist/commands/doctor.d.ts.map +1 -1
  14. package/dist/commands/doctor.js +17 -8
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/formats.js +2 -2
  17. package/dist/commands/formats.js.map +1 -1
  18. package/dist/commands/graphics/publish-flow.js +1 -1
  19. package/dist/commands/graphics/publish-flow.js.map +1 -1
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +20 -0
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/launch.d.ts +3 -0
  24. package/dist/commands/launch.d.ts.map +1 -0
  25. package/dist/commands/launch.js +35 -0
  26. package/dist/commands/launch.js.map +1 -0
  27. package/dist/commands/login.d.ts.map +1 -1
  28. package/dist/commands/login.js +7 -0
  29. package/dist/commands/login.js.map +1 -1
  30. package/dist/commands/logout.d.ts.map +1 -1
  31. package/dist/commands/logout.js +3 -1
  32. package/dist/commands/logout.js.map +1 -1
  33. package/dist/commands/skills.d.ts +16 -0
  34. package/dist/commands/skills.d.ts.map +1 -1
  35. package/dist/commands/skills.js +52 -1
  36. package/dist/commands/skills.js.map +1 -1
  37. package/dist/commands/styles.js +2 -2
  38. package/dist/commands/styles.js.map +1 -1
  39. package/dist/commands/update.d.ts.map +1 -1
  40. package/dist/commands/update.js +20 -0
  41. package/dist/commands/update.js.map +1 -1
  42. package/dist/commands/video-local.d.ts.map +1 -1
  43. package/dist/commands/video-local.js +2 -2
  44. package/dist/commands/video-local.js.map +1 -1
  45. package/dist/config.d.ts.map +1 -1
  46. package/dist/config.js +11 -3
  47. package/dist/config.js.map +1 -1
  48. package/dist/environment.d.ts +9 -0
  49. package/dist/environment.d.ts.map +1 -0
  50. package/dist/environment.js +103 -0
  51. package/dist/environment.js.map +1 -0
  52. package/dist/index.js +12 -45
  53. package/dist/index.js.map +1 -1
  54. package/dist/lib/graphics-cache.d.ts.map +1 -1
  55. package/dist/lib/graphics-cache.js +2 -2
  56. package/dist/lib/graphics-cache.js.map +1 -1
  57. package/dist/program.d.ts +2 -0
  58. package/dist/program.d.ts.map +1 -0
  59. package/dist/program.js +54 -0
  60. package/dist/program.js.map +1 -0
  61. package/dist/skills/custom-video-skill.d.ts +1 -1
  62. package/dist/skills/custom-video-skill.d.ts.map +1 -1
  63. package/dist/skills/custom-video-skill.js +1 -1
  64. package/dist/skills/custom-video-skill.js.map +1 -1
  65. package/dist/skills/installer.d.ts.map +1 -1
  66. package/dist/skills/installer.js +42 -24
  67. package/dist/skills/installer.js.map +1 -1
  68. package/dist/skills/master-skill.d.ts +12 -9
  69. package/dist/skills/master-skill.d.ts.map +1 -1
  70. package/dist/skills/master-skill.js +745 -343
  71. package/dist/skills/master-skill.js.map +1 -1
  72. package/dist/skills/releases.d.ts +1 -1
  73. package/dist/skills/releases.d.ts.map +1 -1
  74. package/dist/skills/releases.js +8 -5
  75. package/dist/skills/releases.js.map +1 -1
  76. package/dist/skills/routes.js +7 -7
  77. package/dist/skills/routes.js.map +1 -1
  78. package/dist/skills/staging-content.d.ts +3 -0
  79. package/dist/skills/staging-content.d.ts.map +1 -0
  80. package/dist/skills/staging-content.js +12 -0
  81. package/dist/skills/staging-content.js.map +1 -0
  82. package/package.json +12 -4
  83. package/skills/goose-ads/SKILL.md +363 -224
  84. package/skills/goose-product-photos/SKILL.md +84 -58
  85. package/skills/goose-video/SKILL.md +223 -14
  86. package/skills/goose-video-local/SKILL.md +195 -24
  87. package/skills/gooseworks/SKILL.md +106 -24
  88. package/skills/make-custom-video/SKILL.md +231 -10
  89. package/skills/manifest.json +7 -7
  90. package/skills/routes.json +7 -7
  91. package/dist/skills/fetcher.d.ts +0 -18
  92. package/dist/skills/fetcher.d.ts.map +0 -1
  93. package/dist/skills/fetcher.js +0 -118
  94. package/dist/skills/fetcher.js.map +0 -1
@@ -11,7 +11,7 @@ description: >
11
11
  video_project_read. A hosted connector with no shell hands this same project to the GooseWorks coworker. To start a NEW video ad in chat,
12
12
  use goose-video first.
13
13
  category: ads
14
- version: 0.6.1
14
+ version: 0.6.7
15
15
  author: GooseWorks
16
16
  tags: [gooseworks, ads, video, remix, imessage, podcast, ugc, local-render, sandbox, byoa]
17
17
  ---
@@ -70,6 +70,136 @@ and approval before spending. Hosted installed snapshots use the existing Skills
70
70
  Skill content and a host's cached MCP tool schemas are separate: refreshing one does not refresh
71
71
  the other. Check the actual advertised tools before using new fields.
72
72
 
73
+ ## Prepare the video workflow and brand before creative work
74
+
75
+ **Installed entry files are bootstrap instructions.** For new work started from an installed
76
+ file or an old chat, fetch `catalog_fetch { type: "skill", slug: "goose-video-local" }` on the selected
77
+ connection and read its returned content and dependencies before continuing. Use the already
78
+ fetched body when this entry came from that connection in this run; do not recursively fetch
79
+ the same entry. A CLI freshness warning does not block using the current connected package.
80
+ Keep the fetched package and hashes in a new run folder; do not replace edited installed files.
81
+ If current instructions cannot be loaded, resolve the connection before format suggestions,
82
+ script writing or production. Do not continue from an old installed workflow or session notes.
83
+
84
+ **Follow the connector's full-guide requirement when available.** Fetch
85
+ `catalog_fetch { type: "skill", slug: "gooseworks-guide" }` when the connector requires it.
86
+ The only older-server exception is below; it never removes brand preparation or approvals.
87
+
88
+ | Returned guide/workflow state on the selected connection | Required action |
89
+ | --- | --- |
90
+ | 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. |
91
+ | 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. |
92
+
93
+ A missing custom entry or required custom tool/schema remains unavailable: never substitute
94
+ a template or an import to bypass it. Never hide other fetch errors or continue from cached
95
+ instructions merely because the guide was not found.
96
+
97
+ **For an existing project or batch, read `video_project_read` first.** Determine its actual
98
+ route and saved review state before fetching a recipe or doing local work. Resume an approved
99
+ run with its recorded packages, brand inputs, script and ingredients; do not silently replace
100
+ them with today's release or brand rules. Follow returned preparation requirements and use
101
+ the existing affected review/approval flow for an intentional change. Reads, free drafts,
102
+ imports and existing-job retrieval do not grant permission for new paid production.
103
+
104
+ **For every new plan, resolve the brand and call**
105
+ `brand_read { brand_id, sections: ["summary", "kit", "products", "learnings"] }` **before**
106
+ suggesting formats, mining video angles, writing any script, creating a production plan or
107
+ handing the work to another agent. Use `brand_get_context` with those same four sections only
108
+ when advertised. Reuse a complete read from this run on the same connection and brand.
109
+ Onboarding completion, a summary-only response and earlier session notes do not supply the
110
+ kit, selected product facts or saved rules. If the full read is unavailable, resolve it before
111
+ creative work. Use known kit facts while research is incomplete; do not restart research
112
+ solely because its status is pending. Never invent a product fact or accept a campaign to
113
+ bypass preparation. Then search the Brand Brain (next section) before suggesting formats,
114
+ choosing an angle or asking the user for a brand fact.
115
+
116
+ Carry that context through custom/template/idea routing and delegation. Before writing, make
117
+ the workflow's brand-rules file from those sources: pronunciations, required spoken copy,
118
+ prohibited claims, real logo, font, palette and the selected product's supported facts.
119
+ Entries prefixed `Video preference:` and visual/pacing instructions are creative direction,
120
+ not spoken lines. Use the kit's audience, offer and voice as defaults without an interview.
121
+ The rules file mirrors context; it is not proof of a read or permission to spend. Keep the
122
+ route's existing script, ingredient and budget approvals, including its allowed previews.
123
+
124
+ **Use the server's brand bundle when the selected API returns it.** Project create/read may
125
+ return top-level
126
+ `brand_context`: `{ version: 1, brand_id, digest, loaded_at, sections, brand, kit, products,
127
+ learnings }`. Its sections cover summary, kit, products and learnings.
128
+
129
+ | Returned brand/project response on the selected connection | Required action |
130
+ | --- | --- |
131
+ | A complete authoritative version-1 `brand_context` is returned | Binding is required: use its contents for the plan/rules and include `script_drafts.brand_context_digest = brand_context.digest` with each new/changed script save. |
132
+ | An older API returns the actual four brand sections but no `brand_context` in either the brand read or project response | Prepare from those full sections, write the brand rules and follow the selected connection's existing approval flow and advertised fields. Do not fabricate a receipt or send nonexistent bundle/digest fields. |
133
+
134
+ An incomplete/malformed bundle or missing brand section is a preparation failure, never the
135
+ older-API exception. Once this connection returns an authoritative bundle, use its binding
136
+ contract. `script_drafts.video_brand_context` is server-owned: do not author, replace or forge
137
+ it, and do not invent a read receipt or hash local brand facts into one. Keep the full bundle
138
+ out of client review payloads. If managed generation returns HTTP 409
139
+ `video_brand_context_required`, reload the project and bind the plan to its returned bundle
140
+ through the normal review flow before retrying. That refusal never permits the older-API
141
+ fallback, skipping sections or retrying paid calls blindly. Unchanged approved legacy resumes
142
+ retain their package, context and approvals; an upgrade alone needs no extra approval.
143
+
144
+ **To apply a deliberate brand correction to a new or revised plan**, make a fresh, unfiltered
145
+ `brand_read` of those four sections. When it returns the authoritative bundle, use its
146
+ returned `brand_context.digest` in the complete revised `script_drafts` through the existing
147
+ `video_project_upsert` `patch.script` save; the server verifies the current brand and replaces
148
+ its snapshot with the saved plan. On an older API with no bundle contract, apply the actual
149
+ four-section correction and save the revised draft through its existing flow without inventing
150
+ digest fields. If a connection that already returned a bundle cannot supply the fresh bundle,
151
+ resolve that failure before rebinding. Review and approve the affected script, ingredients and
152
+ budget through the normal flow. Never refresh an ongoing approved run automatically; its
153
+ recorded package and brand inputs stay pinned until an intentional change.
154
+
155
+ ## Search the Brand Brain, then propose — before any creative choice or question
156
+
157
+ The Brand Kit is a summary. The brand's saved knowledge (its Brain) holds what the Kit does not:
158
+ rules from past feedback, approved and rejected creatives, customer evidence, approved claims,
159
+ reports and documents. **After `brand_read`, and before you choose an angle, claim, hook,
160
+ product emphasis, format or source ad — and before you ask the user for any brand fact — call
161
+ `knowledge_search { brand_id, query }`** when it is registered. It is free and read-only: no
162
+ approval, no announcement to the customer and no questionnaire.
163
+
164
+ 1. **Search for this task, not the whole Brain.** Run one short query (under 500 characters) in
165
+ the user's own words plus the product (for example "ads for <product>: what worked, what to
166
+ avoid") and one with
167
+ `source_types: ["evidence", "claim", "learning", "creative", "document"]` for proof and past
168
+ creative results. Add a query only for a specific open question. Reuse results from this run.
169
+ 2. **Keep these states distinct** and record which one each query returned:
170
+
171
+ | Result | Means | Do |
172
+ | --- | --- | --- |
173
+ | `status: "ok"` with matches | Saved knowledge exists | Use it; keep each fact's citation in your working brief |
174
+ | `status: "empty"` | Nothing saved matches this query | Say "no saved evidence for <topic>", never "the brand has no proof" |
175
+ | `refresh_required` | The results shown are current; some changed sources were left out | Use them; search again shortly for anything missing |
176
+ | `building` | The index is not ready | Retry once shortly, then continue with the gap stated |
177
+ | 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 |
178
+ | An empty Kit field | Only that field is blank | Not a search result: still search before asking |
179
+
180
+ 3. **Let the findings change the plan.** A `dont`/`must` learning or a rejected creative rules
181
+ options out; an approved or well-rated past creative is a proven angle to lead with; a report
182
+ shows what worked. Claim-grade proof is a result with `approved_ad_claim: true` or the kit's
183
+ `approvedClaims` within their stated applicability; the kit's `proofPoints` are what the
184
+ backend allows an ad to state, used as written. Other Kit text, documents and performance
185
+ numbers are context, never public claims. Never invent an offer, price or result. Judge
186
+ relevance and skip results about another product or business.
187
+ 4. **Propose; don't interview.** Lead with one recommended direction (angle, product, source or
188
+ format) and a one-line reason naming what you found, with up to two alternatives. When several
189
+ directions fit (two audiences, products or campaigns), pick the one the evidence favours, such
190
+ as an active campaign or approved past creatives, and name the other as an alternative instead
191
+ of asking. Ask only for a decision the brand read and the search cannot settle, or for spend
192
+ approval. Never ask the user for a fact the Brain already answered.
193
+ Keep directions already chosen (the user's words, a project's creative brief, handed-off
194
+ defaults, approved plans): search only to fill empty fields and to apply saved rules. When a
195
+ returned card or picker presents the choice, your recommendation is its one acknowledgement
196
+ line and the saved plan's defaults, not a separate list.
197
+ 5. **Carry an evidence brief** into the routed skill, writer or plan: findings with citations,
198
+ the state of each query, what it ruled out and the open gaps. Tell the customer the findings
199
+ in plain words; the citations stay in the brief.
200
+
201
+ On an approved resume, keep the saved brief and evidence; search again only for a new decision.
202
+
73
203
  ## Chat hosts and cards
74
204
 
75
205
  First perform the mandatory route check below. Then, without a shell, hand a verified template
@@ -323,7 +453,7 @@ the skill. It's fire-and-forget, never counts against you, and never blocks your
323
453
  1. **Sandbox →** see "Running in a GooseWorks sandbox": ffmpeg + ffprobe (+ PIL on demand); no
324
454
  Chromium, so browser formats stop there.
325
455
  2. **CLI present →** run `gooseworks doctor --no-browser` for login, MCP, Node 18+, ffmpeg
326
- with libx264 + libass, and ffprobe. This is common setup only. After fetching the selected
456
+ with libx264, and ffprobe. Require libass only for a selected ASS caption route; caption-burn uses Pillow overlays and does not need it. This is common setup only. After fetching the selected
327
457
  capabilities in Step 2, check each browser renderer's actual launch before ANY paid
328
458
  ingredient. An unscoped `gooseworks doctor` checks only the calling folder's browser;
329
459
  it cannot certify a different fetched renderer.
@@ -560,7 +690,7 @@ the app's "N concepts" flow: one composer submission fans out into **N independe
560
690
  **Loop shape (ONE approval for the batch, isolated work per concept):**
561
691
  1. Run **Step 1 + Step 1.5 + Step 2 + Step 2.5 + Step 3-assemble** for EACH concept project (each
562
692
  has its own `project_id`, brief, `GW_PROJECT_ID` and `working/` folder — never cross-write
563
- between concepts). The brand read (Step 1 item 3) and `brand-rules.json` (Step 1.7) are per
693
+ between concepts). The brand read (Step 1 item 2) and `brand-rules.json` (Step 1.7) are per
564
694
  BRAND: do them once for the batch and copy the file into each concept's `working/`. The read is
565
695
  ~90K characters. Step 2.5's angle bank is shared per brand AND product: load or build it once, and
566
696
  give every concept whose angle is `auto` a DIFFERENT angle from that list, so the batch is N
@@ -603,8 +733,8 @@ written per-project; a batch just runs it N times with the shared approval gate
603
733
 
604
734
  The composer already collected the user's creative direction onto the project. **Read it and treat
605
735
  it as ground truth — it OVERRIDES the template recipe's defaults, and it REPLACES the clarifying
606
- questions you would otherwise ask.** Only fall back to the recipe default (then, last, to asking)
607
- for a field the brief leaves empty. Map the fields you WILL honor:
736
+ questions you would otherwise ask.** For a field the brief leaves empty, use the Brain search's
737
+ evidence brief first, then the recipe default, then (last) asking. Map the fields you WILL honor:
608
738
 
609
739
  - `creative_brief.productName` / `.offer` / `.angle` → the product, offer/code, and angle. Do
610
740
  **not** ask "which product / what offer / what angle" if these are set.
@@ -622,20 +752,24 @@ for a field the brief leaves empty. Map the fields you WILL honor:
622
752
  "also 1:1" option included).
623
753
  - `polish_policy` (`standard` | `extra`) → `extra` means spend the extra pass on QC/polish.
624
754
 
625
- 2. `catalog_fetch { type: "template", slug: <source_sample_id> }` → the source video: `media_url`,
626
- `recipe`, `format` (e.g. "podcast-skit", "imessage"), `extracted_script`, `how_to`, `remix_spec`.
627
- 3. Brand gate: `brand_read { brand_id, sections: ["summary", "kit", "products", "learnings"] }`
755
+ 2. Brand gate: `brand_read { brand_id, sections: ["summary", "kit", "products", "learnings"] }`
628
756
  (older clients: `brand_get_context` with the same sections). Ask for all four: the default
629
757
  leaves out the kit and the brand's saved rules, and a video made without them is off-brand.
630
758
  If the kit's `researchStatus` (or the brand's `research_status`) is `complete`, REUSE it —
631
- never re-research. If not, run brand research first (`catalog_fetch { type: "skill", slug:
632
- "brand-research" }`) and follow its stored-pack workflow. Only when that verified pack is
759
+ never re-research. A pending status alone does not require research; use verified stored
760
+ facts and ask only for an actual gap. If the context is empty or the customer requests
761
+ research, load `catalog_fetch { type: "skill", slug:
762
+ "brand-research" }` and follow its stored-pack workflow. Only when that verified pack is
633
763
  saved in the supported research workspace, finalize with
634
764
  `brand_update { brand_id, patch: { finalize_research: true } }`, then read the brand back.
635
765
  Never send raw research JSON through `kit_patch`: the public tool accepts only the existing
636
766
  `video_lab` asset slot there. If there is no verified stored pack, submit researched facts
637
767
  through typed `patch.knowledge` / `patch.kit` as pending agent proposals; do not pretend
638
768
  research is finalized or its proposals are approved. Then do Step 1.7 with verified facts.
769
+ 3. For a new plan, `catalog_fetch { type: "template", slug: <source_sample_id> }` → the source
770
+ video: `media_url`, `recipe`, `format` (e.g. "podcast-skit", "imessage"),
771
+ `extracted_script`, `how_to`, `remix_spec`. For an approved resume, restore the recorded
772
+ package and dependencies instead of fetching today's recipe over the saved plan.
639
773
 
640
774
  ### Step 1.6 — a remix of a FINISHED video (the project read has a `remix` block)
641
775
 
@@ -664,8 +798,9 @@ Its `video_project_read` returns a top-level `remix` block
664
798
 
665
799
  ### Step 1.7 — the brand rules file and the brand assets (every run, before any writing)
666
800
 
667
- Write `working/brand-rules.json` from the Step 1 brand read. Every later step reads THIS file,
668
- not your memory of the chat:
801
+ Before new writing, write `working/brand-rules.json` from the Step 1 brand read. Preserve an
802
+ approved run's saved rules on resume; reconcile an intentional rule change through the existing
803
+ review gate. Every later step reads THIS file, not your memory of the chat:
669
804
 
670
805
  ```json
671
806
  {
@@ -745,8 +880,9 @@ in the SAME turn, before anything else:
745
880
  ## Save durable brand answers, then verify them
746
881
 
747
882
  Read the selected brand with `brand_read { brand_id, sections: ["summary", "kit", "products", "learnings", "onboarding"] }`
748
- (fallback: `brand_get_context` with the same sections). Keep founder answers, user corrections,
749
- research and your own hypotheses distinct. Reuse matching saved answers; ask only about gaps.
883
+ (older clients: `brand_get_context` with the same sections, only when that tool is advertised).
884
+ Keep founder answers, user corrections, research and your own hypotheses distinct. Reuse
885
+ matching saved answers; ask only about gaps.
750
886
 
751
887
  When the user asks to remember a rule, answers a brand interview, or explicitly corrects a
752
888
  standing fact, save that answer in the same turn. The capture request authorizes those answers;
@@ -910,7 +1046,16 @@ of ad performance. The existing Step 3 review and approval remain unchanged.
910
1046
  evidence and proof plan, not only its hook. Reuse the shared video-angle-bank.v1 from
911
1047
  the brand's video-scripts workspace or this run. Prepare angle-context.json with the
912
1048
  writer's preparation script with `--brief working/script/creative-brief.json` and use
913
- its strict rule check before review. Save the sourced brief in the writer's documented
1049
+ its strict rule check before review. First run the fetched writer's free
1050
+ `python3 <saved-writer-package>/scripts/verify_handoff.py --package-dir <saved-writer-package> --out working/script/writer-handoff-check.json` check against those
1051
+ actual saved prepare/lint scripts. Retain the result and script hashes with the run.
1052
+ A provided writer package with a missing checker, failed check or unsupported flag
1053
+ is incompatible: stop this handoff and refresh the package on the same connection.
1054
+ Never use the provisional agent path after a provided package fails validation.
1055
+ Only an actual `not_found` for an optional writer permits the explicit provisional
1056
+ agent check below; a required writer remains blocked. Never silently remove the brief,
1057
+ strict check or new shape requirement to run an older parser.
1058
+ Save the sourced brief in the writer's documented
914
1059
  shape: exact product/variant, buyer situation, supported mechanism, offer/CTA, constraints,
915
1060
  delivery intent, source references, locked copy, applicable prior decisions and unknowns.
916
1061
  New custom/template shapes set `requires_creative_brief: true`; both writer and critic
@@ -925,16 +1070,20 @@ of ad performance. The existing Step 3 review and approval remain unchanged.
925
1070
  a catalogue card alone cannot establish fit. An impossible essential visual blocks
926
1071
  the proposal until repaired. Do not force a testimonial into every format.
927
1072
  - **Research only what is missing.** Fetching the miner does not spend or rerun research.
928
- Reuse current facts and prior evidence. If paid collection is needed, its permission
1073
+ Reuse current facts and prior evidence. The Brain search's evidence brief (citations, the
1074
+ state of each query and open gaps) is the first source for the brief's source references and
1075
+ prior decisions. If paid collection is needed, its permission
929
1076
  rides in the existing choices round. A new product with no reviews can use verified
930
1077
  facts and a feasible demo; do not require paid research merely to fill a quote quota.
931
1078
  - **Choose eligible concepts only.** Take the strongest supported concept and validated
932
1079
  hook into review, with up to two viable alternatives when the direction is open.
933
1080
  Do not pad three concepts or select the highest-ranked rejected one. If all fail,
934
1081
  repair within the brief and recipe before Step 3.
935
- - **Unavailable writer or research.** Complete an explicit agent check of claim support,
936
- recipe limits, visual feasibility and hook payoff. Record missing provenance and say
937
- in the review when research is provisional. Never report a failed check as a pass.
1082
+ - **Optional writer not found or unavailable research.** Only when the optional writer
1083
+ returns `not_found`, complete an explicit agent check of claim support, recipe limits,
1084
+ visual feasibility and hook payoff. Record missing provenance and say in the review when
1085
+ research is provisional. A provided incompatible writer or another fetch error stops
1086
+ the handoff. Never report a failed check as a pass.
938
1087
  - **The user's exact lines** remain verbatim; use report-only checks and raise material
939
1088
  timing, claim or format conflicts without silently rewriting them.
940
1089
  - **No spoken words.** Still fit the visual promise, reveal, cards and CTA to the silent
@@ -946,9 +1095,14 @@ of ad performance. The existing Step 3 review and approval remain unchanged.
946
1095
 
947
1096
  Fetch `video-production-harness` and read its `references/editorial-review.md`,
948
1097
  `references/specialist-handoff.md` and `references/hook-compatibility.md`, plus the
949
- review/edit/polish/promote/wrap steps when used. Save the fetched version/content hash with
950
- this run's capability records. These supply craft and evidence rules inside the template
951
- flow; this entry's existing review, paid approval, storage and two-repair limit still apply.
1098
+ review/edit/polish/promote/wrap steps when used. Verify every named file is returned as
1099
+ nonempty text before relying on that package. A version/content hash alone cannot establish
1100
+ that the required guides were published. Missing guides block new template creative work
1101
+ before project writes or paid previews; resolve the package on this same connection. Keep
1102
+ an unchanged approved resume on its recorded package and approvals.
1103
+ Save the fetched version/content hash with this run's capability records. These supply
1104
+ craft and evidence rules inside the template flow; this entry's existing review, paid
1105
+ approval, storage and two-repair limit still apply.
952
1106
  Do not turn a template into a custom project or import the custom host's extra gates.
953
1107
 
954
1108
  Before executing a fetched recipe atom, pass the exact brief/script revision, scene/beat IDs,
@@ -1077,8 +1231,25 @@ ingredient here is only a genuinely separate SOURCE clip the format needs (e.g.
1077
1231
  about start / blocked / complete.
1078
1232
  After EVERY progress callback inspect stop. If true, start no new paid step; record
1079
1233
  status:"stopped" with a plain note and report what is kept and credits used. SPEND_CAP_REACHED
1080
- stops the same way; raising the cap requires patch.approve scope:"raise_cap" and the customer's
1081
- words. Send render.steps with the same neutral names each time and a live count only in the
1234
+ stops the same way. Never raise a video's budget on your own judgment. Raise it only when a paid
1235
+ step was refused with SPEND_CAP_REACHED or the progress card offers "Finish it" or a choice past the budget.
1236
+ Then read the project and say cost.raise_quote in one line: "Finishing needs up to <by_credits>
1237
+ more credits, so your budget goes from <from_credits> to <to_credits>. OK?" Only after the
1238
+ customer's yes to that number: patch.approve { scope:"raise_cap", total_credits: <to_credits>,
1239
+ user_quote: "<their exact words>" }. total_credits is the new budget itself, never credits to
1240
+ add; do not send raise_cap_credits for one video. If they pick a smaller choice past the
1241
+ budget, send that choice's new budget as total_credits (never above to_credits). Sending the same
1242
+ total_credits again changes nothing (already_raised: carry on). An earlier yes, or "I don't care
1243
+ about the cost", is not approval of a new budget. If cost.raise_quote is null because the plan was saved
1244
+ again since its approval (plan_status is not "approved"), show the plan with its total and
1245
+ approve it again; otherwise the approved budget already covers the work: carry on, do not ask.
1246
+ After a raise, open a new render that reuses the saved pieces. A refused raise changes nothing:
1247
+ cap_raise_not_needed means carry on within the budget, or, when it says the plan was saved again,
1248
+ show the plan with its total and approve the plan again; cap_raise_total_required means read the
1249
+ project again and send total_credits equal to cost.raise_quote.to_credits after the customer
1250
+ approves that number; cap_raise_changed or cap_raise_too_large mean read the project again and
1251
+ show the current cost.raise_quote. Custom videos never use raise_cap.
1252
+ Send render.steps with the same neutral names each time and a live count only in the
1082
1253
  current detail; use render.choices when blocked.
1083
1254
  2. Now generate every PAID piece you showed as a prompt in Step 3 — the AI stills/video, lipsync
1084
1255
  clips, voice, music — through the media proxies (below), each from its approved prompt, with
@@ -8,7 +8,7 @@ description: >
8
8
  Capture founder answers, brand rules, audience depth, and video taste in the existing brand.
9
9
  Use it as the single GooseWorks entry point for brand growth, B2B, sales, research, and GTM work.
10
10
  category: general
11
- version: 1.0.0
11
+ version: 1.1.2
12
12
  author: GooseWorks
13
13
  tags: [gooseworks, data, scraping, search, reddit, twitter, linkedin, email, people, research, gtm, leads, prospecting]
14
14
  ---
@@ -73,7 +73,20 @@ the other. Check the actual advertised tools before using new fields.
73
73
 
74
74
  ## Route to the right skill FIRST
75
75
 
76
- 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). After that, check whether the request belongs to a specialized domain. If so, **switch to that skill** instead of the data flow below:
76
+ 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:
77
+
78
+ **Follow the connector's full-guide requirement when available.** Fetch
79
+ `catalog_fetch { type: "skill", slug: "gooseworks-guide" }` when the connector requires it.
80
+ The only older-server exception is below; it never removes brand preparation or approvals.
81
+
82
+ | Returned guide/workflow state on the selected connection | Required action |
83
+ | --- | --- |
84
+ | 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. |
85
+ | 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. |
86
+
87
+ A missing custom entry or required custom tool/schema remains unavailable: never substitute
88
+ a template or an import to bypass it. Never hide other fetch errors or continue from cached
89
+ instructions merely because the guide was not found.
77
90
 
78
91
  For "interview me about the brand", "save our brand rules", "refine our audience", or "remember
79
92
  our video taste", stay here and follow **Guided brand capture** below. This extends the current
@@ -81,13 +94,13 @@ brand and onboarding flow; it does not create another onboarding checklist.
81
94
 
82
95
  | If the user wants… | Route to | How |
83
96
  | --- | --- | --- |
84
- | 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`. |
97
+ | 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`. |
85
98
  | 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`). |
86
- | Make a **video** ad from a template or an original brief. Template-free briefs and Instagram/direct video references route to make-custom-video. Growth renders in its sandbox; connected coding agents use their local toolchain. | **`goose-video`** | Installed locally as an entry skill. Just use it. If unavailable, run `gooseworks install --claude`. |
87
- | Create an original branded video without a template, adapt an Instagram/direct video reference, or resume a generated custom project; separate Studio script and ingredient approvals are required | **`make-custom-video`** | Use the installed GooseWorks connection entry, or fetch make-custom-video through the catalog. It loads video-production-harness; Growth uses its sandbox and connected agents use their local tools. |
88
- | Render an EXISTING app video project or batch on this machine — the app's "copy for Claude" command names it | **`goose-video-local`** | Installed locally as an entry skill. Just use it. If unavailable, run `gooseworks install --claude`. |
89
- | Make **product photos** — studio, lifestyle, marketplace, social, or on-model product photography | **`goose-product-photos`** | Installed locally as an entry skill. Just use it. If unavailable, run `gooseworks install --claude`. |
90
- | Animate an approved static ad or product image | **`animate-image`** | Fetch with `gooseworks fetch animate-image` and follow its GooseWorks MCP workflow. |
99
+ | Make a **video** ad from a template or an original brief. Template-free briefs and Instagram/direct video references route to make-custom-video. Growth renders in its sandbox; connected coding agents use their local toolchain. | **`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. |
100
+ | 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. |
101
+ | 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. |
102
+ | 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`. |
103
+ | 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. |
91
104
  | Anything else — scraping, research, lead gen, enrichment, any data lookup | (stay here) | Follow "How to Use" below. |
92
105
 
93
106
  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".
@@ -96,23 +109,80 @@ Examples — all of these route to `goose-ads`, not the data flow: "remix this a
96
109
 
97
110
  **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:
98
111
 
112
+ For videos, read the current workflow first as described above, then load all four creative
113
+ sections (summary, kit, products and learnings) before suggesting formats, choosing angles or
114
+ writing a script. Onboarding facts alone are insufficient. Carry saved rules and kit assets
115
+ into the specialist's brand preparation. `Video preference:` rules describe the look, voice
116
+ and pacing; they are not lines to read aloud. On an approved resume, preserve the saved brand
117
+ inputs and packages; an intentional change uses the existing affected review/approval gates.
118
+
99
119
  | It returns | Use it for |
100
120
  | --- | --- |
101
121
  | **voice** — tone, style, banned phrasing | Any copy, script, caption, hook, or headline. Don't ask "what tone?" |
102
122
  | **products** — names, descriptions, pricing, links, imagery | Picking the product to feature. Don't ask "which product?" — offer the list. |
103
123
  | **audience** — segments, demographics, jobs-to-be-done | Targeting, angles, creator fit. Don't ask "who is this for?" |
104
- | **positioning** — category, value props, proof points, tagline | Angles, offers, competitive framing. Don't ask "what makes you different?" |
124
+ | **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. |
105
125
  | **research status** — whether the brand's research pass has completed | Whether the facts are trustworthy yet, or still being filled in. |
106
126
 
107
127
  Then:
108
128
 
109
- 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.
110
- 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, the context wins — answer it yourself and move on. Ask only for what is genuinely missing or ambiguous.
129
+ 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.
130
+ 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.
111
131
  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.
112
132
  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.
113
133
  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.
114
134
 
115
- Never invent a brand fact. If it isn't in the brand context and the user hasn't said it, ask.
135
+ Never invent a brand fact. If it isn't in the brand context and the user hasn't said it, search
136
+ the Brand Brain next. Ask the user only when that search cannot answer it and the answer is
137
+ theirs to give.
138
+
139
+ ## Search the Brand Brain, then propose — before any creative choice or question
140
+
141
+ The Brand Kit is a summary. The brand's saved knowledge (its Brain) holds what the Kit does not:
142
+ rules from past feedback, approved and rejected creatives, customer evidence, approved claims,
143
+ reports and documents. **After `brand_read`, and before you choose an angle, claim, hook,
144
+ product emphasis, format or source ad — and before you ask the user for any brand fact — call
145
+ `knowledge_search { brand_id, query }`** when it is registered. It is free and read-only: no
146
+ approval, no announcement to the customer and no questionnaire.
147
+
148
+ 1. **Search for this task, not the whole Brain.** Run one short query (under 500 characters) in
149
+ the user's own words plus the product (for example "ads for <product>: what worked, what to
150
+ avoid") and one with
151
+ `source_types: ["evidence", "claim", "learning", "creative", "document"]` for proof and past
152
+ creative results. Add a query only for a specific open question. Reuse results from this run.
153
+ 2. **Keep these states distinct** and record which one each query returned:
154
+
155
+ | Result | Means | Do |
156
+ | --- | --- | --- |
157
+ | `status: "ok"` with matches | Saved knowledge exists | Use it; keep each fact's citation in your working brief |
158
+ | `status: "empty"` | Nothing saved matches this query | Say "no saved evidence for <topic>", never "the brand has no proof" |
159
+ | `refresh_required` | The results shown are current; some changed sources were left out | Use them; search again shortly for anything missing |
160
+ | `building` | The index is not ready | Retry once shortly, then continue with the gap stated |
161
+ | 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 |
162
+ | An empty Kit field | Only that field is blank | Not a search result: still search before asking |
163
+
164
+ 3. **Let the findings change the plan.** A `dont`/`must` learning or a rejected creative rules
165
+ options out; an approved or well-rated past creative is a proven angle to lead with; a report
166
+ shows what worked. Claim-grade proof is a result with `approved_ad_claim: true` or the kit's
167
+ `approvedClaims` within their stated applicability; the kit's `proofPoints` are what the
168
+ backend allows an ad to state, used as written. Other Kit text, documents and performance
169
+ numbers are context, never public claims. Never invent an offer, price or result. Judge
170
+ relevance and skip results about another product or business.
171
+ 4. **Propose; don't interview.** Lead with one recommended direction (angle, product, source or
172
+ format) and a one-line reason naming what you found, with up to two alternatives. When several
173
+ directions fit (two audiences, products or campaigns), pick the one the evidence favours, such
174
+ as an active campaign or approved past creatives, and name the other as an alternative instead
175
+ of asking. Ask only for a decision the brand read and the search cannot settle, or for spend
176
+ approval. Never ask the user for a fact the Brain already answered.
177
+ Keep directions already chosen (the user's words, a project's creative brief, handed-off
178
+ defaults, approved plans): search only to fill empty fields and to apply saved rules. When a
179
+ returned card or picker presents the choice, your recommendation is its one acknowledgement
180
+ line and the saved plan's defaults, not a separate list.
181
+ 5. **Carry an evidence brief** into the routed skill, writer or plan: findings with citations,
182
+ the state of each query, what it ruled out and the open gaps. Tell the customer the findings
183
+ in plain words; the citations stay in the brief.
184
+
185
+ On an approved resume, keep the saved brief and evidence; search again only for a new decision.
116
186
 
117
187
  ## Setup
118
188
 
@@ -124,20 +194,31 @@ Skills may describe a managed provider request as an environment-neutral operati
124
194
  `provider`, `method`, `path`, and optional `query` or `body`. Execute the operation through
125
195
  the first available runtime:
126
196
 
127
- 1. If the matching GooseWorks MCP tool is registered, use it. For ScrapeCreators, pass the
128
- operation directly to `call_data_provider`. This is the preferred path in ChatGPT, Cowork,
129
- and other terminal-free clients. Do not shell out and do not ask for a separate provider key.
197
+ 1. If the matching GooseWorks MCP tool is registered, use it. For ScrapeCreators, pass a GET
198
+ operation directly to `data_call_provider` (`provider`, `path`, `query`) and a POST
199
+ operation to `data_post_provider` (`provider`, `path`, `body`, optional `query`).
200
+ This is the preferred path in ChatGPT, Cowork, and other terminal-free clients.
201
+ Do not shell out and do not ask for a separate provider key.
130
202
  2. Otherwise, if a local terminal and the `gooseworks` CLI are available, translate the same
131
203
  operation into `gooseworks call <provider> <path>` with its method, query, and body options.
132
204
  3. Otherwise, follow the provider dependency's direct-key path only when the user has supplied
133
205
  their own key. If no runtime is available, explain what connection is missing; never pretend
134
206
  the provider call ran.
135
207
 
208
+ Managed provider calls are paid on the MCP and CLI runtimes alike (a ScrapeCreators call costs 1
209
+ credit today, and each result reports what it charged). Before a skill's first paid call, tell the
210
+ user roughly how many calls it will make and the credit total, and get their yes.
211
+
136
212
  The same selection applies to catalog and account operations. When the CLI is unavailable but the
137
- `mcp__gooseworks__*` tools are connected, use these equivalents:
138
- - `gooseworks search <q>` → the **`search_skills`** MCP tool.
139
- - `gooseworks fetch <slug>` → the **`fetch_skill`** MCP tool (same content/scripts/files/deps).
140
- - `gooseworks credits` → the **`get_ad_credits`** MCP tool.
213
+ GooseWorks MCP tools are connected, use these equivalents. Match on the tool name: a coding agent
214
+ may show a server prefix (for example `mcp__gooseworks__catalog_search`), a chat app may not.
215
+ - `gooseworks search <q>` → **`catalog_search { type: "skill", query: "<q>" }`**.
216
+ - `gooseworks fetch <slug>` → **`catalog_fetch { type: "skill", slug: "<slug>" }`** (same content/scripts/files/deps).
217
+ - `gooseworks credits` → **`account_whoami`** (the balance is `credits.available_credits`).
218
+
219
+ If one of these tools is missing, the GooseWorks connection or its tool list is stale: ask the
220
+ user to reconnect or refresh GooseWorks. Installing or updating the `gooseworks` CLI never fixes
221
+ a missing connector tool, so never send a chat-app user to a terminal for it.
141
222
 
142
223
  Discovery, skill fetching, and ScrapeCreators-backed Brand Growth workflows work fully CLI-free
143
224
  this way. Task skills own the endpoint and analysis workflow; this runtime rule owns how the same
@@ -187,8 +268,8 @@ already volunteered in this chat, and **save known information first** using the
187
268
  mapping below. Do not run a long questionnaire as a prerequisite for making an ad.
188
269
 
189
270
  For facts needed by the task but absent from the read, call `knowledge_search` first if it is
190
- registered. Use returned citations and states honestly: an empty, building or failed index is
191
- not proof that the brand has no answer. Do not re-scrape or ask the founder for a fact already
271
+ registered, as in **"Search the Brand Brain, then propose"**. Use returned citations and states
272
+ 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
192
273
  answered by trustworthy saved knowledge.
193
274
 
194
275
  Ask one short group of missing human-only facts at a time, in plain language, with the relevant
@@ -213,8 +294,9 @@ by the tools. Do not promise an unavailable evidence, claims or plan write.
213
294
  ## Save durable brand answers, then verify them
214
295
 
215
296
  Read the selected brand with `brand_read { brand_id, sections: ["summary", "kit", "products", "learnings", "onboarding"] }`
216
- (fallback: `brand_get_context` with the same sections). Keep founder answers, user corrections,
217
- research and your own hypotheses distinct. Reuse matching saved answers; ask only about gaps.
297
+ (older clients: `brand_get_context` with the same sections, only when that tool is advertised).
298
+ Keep founder answers, user corrections, research and your own hypotheses distinct. Reuse
299
+ matching saved answers; ask only about gaps.
218
300
 
219
301
  When the user asks to remember a rule, answers a brand interview, or explicitly corrects a
220
302
  standing fact, save that answer in the same turn. The capture request authorizes those answers;
@@ -458,7 +540,7 @@ The `gooseworks` CLI sends authenticated requests (Bearer `GOOSEWORKS_API_KEY`)
458
540
 
459
541
  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").
460
542
  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.
461
- 2. **Before paid operations**, tell the user the estimated credit cost
543
+ 2. **Before paid operations**, tell the user the estimated credit cost and get their yes
462
544
  3. **If a `gooseworks` command exits with "Not logged in"**: tell the user to run `npx gooseworks login`
463
545
  4. **Parse JSON responses** and present data in a readable format to the user
464
546
  5. **When running scripts**: save to `/tmp/gooseworks-scripts/`, install pip deps, then execute. NEVER pollute the user's project directory