Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a…
MITAuto-check passed
Install Extract Source Sample
skills CLI
$ npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a claude-code
Project install by default; add -g for ~/.claude/skills/.
Install the "extract-source-sample" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/composites/extract-source-sample into .claude/skills/extract-source-sample/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "extract-source-sample", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "extract-source-sample" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/composites/extract-source-sample into .agents/skills/extract-source-sample/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "extract-source-sample", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "extract-source-sample" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/composites/extract-source-sample into .cursor/skills/extract-source-sample/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "extract-source-sample", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "extract-source-sample" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/composites/extract-source-sample into .gemini/skills/extract-source-sample/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "extract-source-sample", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "extract-source-sample" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/composites/extract-source-sample into .github/skills/extract-source-sample/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "extract-source-sample", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "extract-source-sample" agent skill from https://github.com/gooseworks-ai/goose-skills/tree/main/skills/ads/composites/extract-source-sample into .opencode/skills/extract-source-sample/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "extract-source-sample", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
extract-source-sample
GitHub stars
1.2k
Used in
1 other repo
Token cost
~6k tokens
SKILL.md length
2,212 words
Files
5 (incl. references)
Skills in repo
193
Repo updated
First seen
Licence
MIT
At a glance
Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a…
Works in 4 steps: Read the run → Build source-sample.json → Link characters + voices to the… → …
The user wants to remix one of their existing ads — this skill produces the source JSON that the script-rewriting step and remix-ad consume
SKILL.md covers When to use, Inputs, What the agent must do and Decision rules, plus 2 more sections
Calls git; reaches git-lfs.github.com
What it does
Extract Source Sample is an agent skill from gooseworks-ai/goose-skills. Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a source-sample.json in the exact shape the upload-ad-sample skill writes to the Goose Ads library. Also links every character and voice to the central character library at <repo-root/assets/character-library/ (repo-root derived from the run-dir, not a hardcoded path), and if a character isn't in the library yet, adds it…
Its SKILL.md is about 6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `README.md`, `examples/extract-ladder-run.md` and `references/source-sample-schema.md`).
The repository describes itself as: Library of Growth & GTM skills + data APIs for Claude Code, Codex, Cursor to run ads, social, content, lead gen, seo and data scraping. The licence is MIT.
When your agent uses it
The user wants to remix one of their existing ads — this skill produces the source JSON that the script-rewriting step and remix-ad consume
Example prompts
“/extract-source-sample”
Requirements
Python 3
Workflow steps
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4b07e0b. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
git
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
git-lfs.github.com
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Extract Source Sample loads about 6k tokens when it runs, and up to ~7.8k if it reads all its reference files. Until then it costs about 178 tokens; SKILL.md has 2,212 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~178
When it runs· the whole SKILL.md, loaded when a task matches
~6k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~7.8k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/extract-source-sample/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
extract-source-sample
description
Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a `source-sample.json` in the exact shape the `upload-ad-sample` skill writes to the Goose Ads library. Also links every character and voice to the central character library at `<repo-root>/assets/character-library/` (repo-root derived from the run-dir, not a hardcoded path), and if a character isn't in the library yet, adds it first then links. Use when the user wants to remix one of their existing ads — this skill produces the source JSON that the script-rewriting step and `remix-ad` consume.
extract-source-sample
This is an agent-executed skill. There are no Python scripts. The agent
reads the run folder, builds the JSON, and stamps catalog links by hand. The
content-goose run folders aren't always cleanly structured (some have empty
production/ JSON, some carry everything in working/) — an agent adapts, a
script would brittle out.
When to use
"Extract the source-sample.json for <run>."
"Get the upload-sample JSON for this ad so I can remix it."
"Prep <run> for remix."
Do NOT use to:
Rewrite the script for a new brand (that's a separate agent step that
consumes this skill's output).
Render the remix (that's the existing remix-ad skill).
Upload an ad to the library (that's upload-ad-sample).
Inputs
Input
Required
Notes
run-dir
yes
Absolute path to a content-goose ad-run folder (e.g. clients/ladder/ad-runs/run-02-podcast-skit).
out
no
Where to write the JSON. Default: <run-dir>/remix/source-sample.json.
That's the entire interface.
What the agent must do
1. Read the run
Open each file if it exists; tolerate missing files (most production/*.json
in older runs are empty stubs — fall back to working/):
working/script.json — primary source of truth for scenes, voices, set.
production/asset-manifest.json — assets[] with role active_master
points at the master mp4; per-asset provider + metadata.model produce
the atom-skill rows.
HOW_TO_MAKE_THIS_VIDEO.md — gets dumped verbatim into how_to.
video-project.json — fallback for title / format when script.json doesn't
carry them.
finals/*.mp4 — fallback for the master mp4 if asset-manifest is empty.
working/characters/*.png — anchor portraits per character.
working/*.py — driver scripts (render_vo.py, render_variants.py,
render_clips.py, stitch.py, build_end_card.py, etc.). These are the
source's runnable code; the remix consumer ports them. Capture in
production_scripts[] (step 2 below).
For sources with character-pose stills (any run with a
working/characters/ folder of <character>-<pose>.png files —
podcast-skit, founder-led, testimonial, recreate-ugc, etc.), audit every
PNG with file. Do NOT stop at the base portraits. The recipe shot list
references variant expression PNGs (e.g. brittney-eyebrow-up.png,
brad-phone-up.png) by filename; the consumer assumes they exist on disk
and will spend real money on lipsync calls before discovering they don't.
For sources without character-pose stills (music-video b-roll, abstract
animated, product-only) — skip this audit; variant_assets[] stays empty.
file <path> says PNG image data, … for real binaries and ASCII text
for LFS pointers. A real binary is >10KB in practice; an LFS pointer is
<200 bytes.
Materialize LFS pointers before reading any binary. An LFS pointer is a
tiny (<200 byte) ASCII file beginning with version https://git-lfs.github.com.
If a PNG or mp4 looks like one, run:
before referencing it. If git lfs pull no-ops and the LFS endpoint
returns 404 (objects committed as pointers but never pushed — common on
content-goose), leave the entry as kind: "lfs-pointer" in
variant_assets[]. The consumer will regenerate or scrape; this skill
does NOT fabricate. See [[feedback_lfs_pointer_audit_before_paid_calls]]
and [[feedback_fal_subscribe_error_envelope]] for the downstream cost when
this audit is skipped — Hume run-03 lost ~$3 + 25 min to it.
2. Build source-sample.json
Shape (every key always present, arrays may be empty):
formatProfile — open string, drives downstream pipeline choices
A short slug naming the source's ad format. Open vocabulary — the
content-goose molecule library has ~40 distinct ad formats and growing;
don't try to fit a closed enum. Pick a slug that matches the source's
molecule name (e.g. create-podcast-skit-ad → podcast-skit-fabricated,
create-cinematic-music-video → music-video-sung), or invent a new
short slug when none fits.
The consumer (remix-script, remix-ad) routes on the slug. Two routing
properties downstream cares about — record them alongside the profile so
the consumer doesn't have to re-derive:
audioType drives the caption pipeline (spoken-vo → Whisper word-level;
sung-music → script.json scene windows, because Whisper returns 🎵 Music Playing 🎵; mixed → split per segment).
sceneCount drives whether the remix can flex (most spoken formats) or
must lock 1:1 (sung-music, anywhere lyric meter sets timing).
If you can't confidently assign either property, leave it null — the
consumer surfaces to the user rather than guessing.
Known slugs from past runs (extend as new formats appear):
The two known slugs are what real retros produced. Add new rows here when
you extract a source that fits a new molecule (single-host-ugc, animated-
explainer-villain, stop-motion-tabletop, goose-vs-tool, hook-variant, etc.).
Don't pre-invent slugs that haven't shipped yet.
Per-section derivation:
recipe.shots[] — one shot per scene in script.json.scenes[]:
{ "id": "s01", "shot": "<still filename>", "type": "<shot type>", "speaker": "HER|HIM|null", "duration_sec": <parsed from time field e.g. "0:02-0:05"→3> }.
Sum durations into total_duration_sec.
Add pose_tag ONLY when the filename matches <character>-<pose>.png
(the character-pose convention used by podcast-skit and other character-led
formats). Derive it by stripping the character prefix from the filename
stem (e.g. brittney-eyebrow-up.png → pose_tag: "eyebrow-up",
brad-phone-up.png → pose_tag: "phone-up"). For formats whose shots
aren't keyed to character poses (music-video b-roll, product hyperframes,
abstract animated scenes), omit pose_tag from the shot.
extracted_script — concatenate <who>: <text> per scene, newlines
between.
remix_spec.worlds[0] — derive from script.json.set_description:
{ key: <slug of the run's setting label>, name: <human label>, set: <full set_description>, lighting: null, color_grade: null, reference_image_url: null, catalog_id: null }.
remix_spec.characters[] — one per voice role (HER, HIM, …) in
script.json.voices:
key: "her" / "him" (lowercase role)
name: voices.<role>.name
gender: HER→"f", HIM→"m", NB→"nb"
soul_id: null unless the run has a Higgsfield Soul anchor
anchor_asset_id: "asset-char-<key>-base-01" if an anchor PNG exists, else null
anchor_image_url: file:// URL to working/characters/<name>-base.png
(or the first png matching the lowercase name), else null
method: "anchor-ref" if anchor PNG present, else null
description: null unless surfaced in the run's how-to
catalog_id: stamped in step 3.
variant_assets[]: emit ONLY when the source uses character-pose
stills (the <character>-<pose>.png filename convention). One entry
per PNG in working/characters/ whose filename starts with the
character's lowercase name. Each entry {file, pose_tag, kind: real|lfs-pointer|missing, size_bytes} — derived from the file
audit in step 1. This is the canary the consumer needs to decide
whether to regenerate variants before paid lipsync calls. Include
the base entry too (pose_tag: "base"). For formats without
per-character pose stills (music-video, animated, product-only),
set variant_assets: [] or omit the key.
remix_spec.voices[] — one per voice in script.json.voices:
settings: copy from script's settings, rename to camelCase
(similarity_boost→similarityBoost, use_speaker_boost→useSpeakerBoost)
selected: true for the first voice in script order, false otherwise
— exactly one selected: true.
catalog_id: stamped in step 3.
remix_spec.skills[] — derive atom rows from
production/asset-manifest.json.assets[]: each asset's provider +
metadata.model (+ skill or metadata.skill for the slug) produces one
row, deduped. Drop molecule slugs — only atoms allowed. The canonical
atom inventory is:
When the asset-manifest is empty (common in older runs), derive atoms
generically — don't hard-code per-format recipes. The repo has ~40
ad-format molecules and growing; canonical recipes drift fast. Use this
cascade:
Read production_scripts[] (next section) — each driver script's
actual provider calls are authoritative. Open render_vo.py, grep
for elevenlabs/fal/higgsfield imports + endpoint URLs, and
derive one atom row per provider × model the script actually invokes.
This is more reliable than any guessed recipe because it reflects
what the source ACTUALLY did, not what the format usually does.
If production_scripts[] is also empty, fall back to the
podcast-skit-fabricated canonical recipe ONLY when
formatProfile === "podcast-skit-fabricated" — the one format with
enough run data to canonicalize:
Note model: null — model ids drift (eleven_multilingual_v2 →
eleven_multilingual_v3, veed/fabric-1.0 → veed/fabric-2.0); don't
freeze them in the SKILL.
For any other formatProfile with neither asset-manifest nor
production_scripts, surface to the user and ask which atoms ran.
Don't invent — skills_source: "guessed" is worse than null.
Mirror skills_used as the flat slug list.
skills_source — top-level field recording how the atom list was
obtained, so the consumer knows how much to trust it:
"measured" — derived from a populated asset-manifest.json (cascade
step would have used the real provider/model fields).
"derived-from-production-scripts" — grepped from the source's
working/*.py driver scripts (cascade step 1). Reliable: reflects
actual API calls.
"inferred-canonical" — fell back to the canonical podcast-skit
recipe (cascade step 2). Only valid when formatProfile === "podcast-skit-fabricated".
"guessed" — none of the above worked and the user supplied the
list. Should be rare; surface in the summary.
The consumer reads this field. Without it, a guessed atom list
propagates downstream as if it were measured (Ladder extract retro
flagged this — skills_source=inferred quietly made it into Hume's
remix-plan as fact). When skills_source !== "measured", the consumer
should cross-check against production_scripts[] before trusting any
individual row.
production_scripts[] — list every working/*.py file in the run
with {path, role}. Roles: voiceover | stills | variants | lipsync | stitch | end_card | music | composites | other. Match by filename:
Filename
Role
render_vo.py, gen_vo.py
voiceover
render_keyframes.py, gen_keyframes.py
stills
render_variants.py
variants
render_clips.py
lipsync
stitch.py, compose.py, compose_master.py
stitch
build_end_card.py
end_card
gen_music.py
music
burn_captions.py, make_subtitles.py
(none — these are atom-level scripts)
build_composites.py
composites
anything else
other
These are the source's runnable code. The consumer ports them as the
starting template — molecule SKILL.mds are recipes, not executables.
Show full SKILL.md (775 more words)Show less
3. Link characters + voices to the character library — and add any that are missing
Library location: <repo-root>/assets/character-library/, where <repo-root>
is the content-goose checkout that contains the run-dir (derive it by walking up
from run-dir to the directory that holds assets/ — do not hardcode an
absolute machine path, and never write outside this repo).
Layout:
Primary key — voice_id. Search index.json for a row whose
voice_id equals the source character's voice_id. If exactly one match,
that row's key is the catalog id. Done.
Fallback — name (case-insensitive). If voice_id didn't match, search
for a row whose name equals the source character's name (case-insensitive).
If exactly one match, that row's key is the catalog id.
No match → extend the library, then link. See below.
When a match is found, stamp catalog_id on BOTH the character row AND the
voices[] row that shares the same voice_id.
Extending the library (no-match path):
Pick a key: lowercase the name, replace non-alphanumeric with -, strip.
If the key already exists in index.json, append -2, -3, etc.
Create assets/character-library/<key>/shots/.
Copy the source anchor PNG to
assets/character-library/<key>/shots/front.png. Materialize the
source PNG first if it's an LFS pointer (see step 1).
Write assets/character-library/<key>/character.json with the schema
above. Fill in what you can confidently derive — leave the rest null
rather than guessing:
key, name, gender, default_voice — from the source.
ethnicity, age_band, archetype, description — leave null
unless the run's HOW_TO.md or character description explicitly states
them.
source: "reuse" (we're pulling from an existing run, not generating
fresh).
origin_anchor_path: the source PNG's path relative to the
content-goose repo root (e.g.
clients/ladder/ad-runs/run-02-podcast-skit/working/characters/brittney-base.png).
Append a row to assets/character-library/index.json matching that
character.json's outer fields. Bump total by 1. Keep characters[] in
the existing order — append at the end.
Tell the user: INDEX.md is hand-curated; refresh it manually or run the library indexer if there is one. Do NOT edit INDEX.md.
Now stamp catalog_id: "<new-key>" on the source-sample.json's character
row + the voice row sharing that voice_id.
Refuse to fabricate library fields. If you don't know a character's
ethnicity / age band / archetype, write null. A wrong guess pollutes
future remixes — the user prefers a null they can fill in over a
confident wrong value.
4. Write the output + summary
Default output path: <run-dir>/remix/source-sample.json (create the
remix/ folder if it doesn't exist; do not touch anything else in the run
folder).
If any catalog link is null, surface that too — the user wants to know
what didn't link. If variant audit shows any LFS pointers or missing
PNGs, lead with that in the summary — it's the single biggest cost
multiplier for the downstream remix if missed.
Decision rules
Agent-executed; no scripts. The run folders aren't perfectly
structured — adapt to what's actually present rather than imposing a
rigid extractor.
Atoms only in remix_spec.skills + skills_used. Drop molecule
slugs silently; surface a note if you couldn't recover at least one atom.
Exactly one selected: true voice. First voice in script order
unless the user passes a different selection.
camelCase voice settings. Never emit similarity_boost / use_speaker_boost.
catalog_id is null only when matching genuinely fails AND the
library-extension step also failed (e.g. no anchor PNG to seed
shots/front.png). Otherwise every character + voice should end up
linked.
Materialize LFS pointers before reading binaries or copying them
into the library.
Don't touch INDEX.md. It's hand-curated; tell the user to refresh
it.
Don't touch anything else in the run folder. This skill is read-only
on the source run, write-only on <run-dir>/remix/source-sample.json +
the character library.
Failure modes
working/script.json missing → can't extract; ask the user where
the script is or refuse.
No anchor PNG for a character → the character row's
anchor_image_url + anchor_asset_id + method stay null, AND library
extension can't proceed (no shots/front.png to copy). Stamp the row's
catalog_id: null and tell the user in the summary.
Multiple library matches on voice_id → very rare; surface both keys
and ask which one to link to.
production/asset-manifest.json empty (common in older runs) →
fall back to the canonical podcast-skit atom list; flag in the summary
that skills were inferred rather than read.
LFS pointer for an anchor PNG and git lfs isn't installed or the
repo isn't an LFS clone → surface the error; don't copy the pointer
bytes into the library.
Output
<run-dir>/remix/source-sample.json — the upload-sample-shape JSON.
Optionally, new folder(s) under assets/character-library/<key>/ and
updated assets/character-library/index.json if any source character
wasn't in the library yet.
The output JSON is what the next agent step (script rewrite / character
swap) and remix-ad consume.
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in gooseworks-ai/goose-skills, which our catalogue first saw on October 7, 2026.
Extract Source Sample next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Extract Source Sample compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Extract Source Sample this skillgooseworks-ai/goose-skills
Extract design tokens (color / typography / spacing) from imported source code, screenshots, or Figma exports into the canonical token bag token-map consumes.
Extract structured data via stored browser-templates or one-shot DOM queries, with mandatory AIDefence PII + prompt-injection gates before content reaches the model
Replace an existing video's opening with a supplied clip or free kinetic text hook while retaining and verifying every original body frame, audio, captions and ending.
Assemble a ChatGPT chat-reveal video ad from a thread + timeline JSON — one continuous Playwright recording of a ChatGPT mobile chat (user types with the iOS keyboard up → taps send → keyboard…
Find ICP-fit leads from KOL audiences on LinkedIn. An agent skill from gooseworks-ai/goose-skills.
1.2k GitHub starsUsed in 1 repo~1.7k tokens
Auto-check: notes
Questions about Extract Source Sample
What does Extract Source Sample do?
Given the path to a finished content-goose ad-run folder, extract everything that defines that ad — recipe shot list, VO script, characters, voices, world, atom-skills, master mp4 — and emit a…. Extract Source Sample is an agent skill from gooseworks-ai/goose-skills.json in the exact shape the upload-ad-sample skill writes to the Goose Ads library.
When should I use Extract Source Sample?
Extract Source Sample fits situations like: the user wants to remix one of their existing ads — this skill produces the source JSON that the script-rewriting step and remix-ad consume.
How do I install Extract Source Sample in Claude Code?
Run `npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a claude-code`. Or copy the skill folder (skills/ads/composites/extract-source-sample in gooseworks-ai/goose-skills) into .claude/skills/extract-source-sample in your project. Claude Code loads it when a task matches its description.
How do I install Extract Source Sample in Codex?
Run `npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a codex`. Or copy the skill folder (skills/ads/composites/extract-source-sample in gooseworks-ai/goose-skills) into .agents/skills/extract-source-sample in your project. Codex loads it when a task matches its description.
Can I use Extract Source Sample in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gooseworks-ai/goose-skills --skill extract-source-sample -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/extract-source-sample, .gemini/skills/extract-source-sample, .github/skills/extract-source-sample and .opencode/skills/extract-source-sample in your project.
What does Extract Source Sample need to run?
Going by SKILL.md and its folder, Extract Source Sample needs the command-line tools its instructions call (git). Our summary lists: Python 3.
Does Extract Source Sample access the network?
SKILL.md names 1 domain. In commands or code: git-lfs.github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Is Extract Source Sample safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Extract Source Sample use?
Extract Source Sample is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Extract Source Sample use?
About 6k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.8k tokens, read only when the agent opens those files.
What are the alternatives to Extract Source Sample?
Skills that share tags, products or a category with Extract Source Sample: Extracting Iocs From Malware Samples (mukul975/Anthropic-Cybersecurity-Skills, 34k stars), Extract (alirezarezvani/claude-skills, 28k stars), Brand Extract (nexu-io/open-design, 100k stars) and Design Extract (nexu-io/open-design, 100k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Extract Source Sample?
gooseworks-ai (a GitHub organization) maintains it in gooseworks-ai/goose-skills, which has 1,238 GitHub stars. The repository holds 193 skills in this directory. The repository was last updated on October 8, 2026.
Source: gooseworks-ai/goose-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.