skills/playbooks/client-package-local/SKILL.md
Package all work done for a client into a local filesystem delivery package with .md files and Google Sheets. Reads the client's folder (strategies, campaigns, content, leads, notes) and builds a structured directory with dated deliverables. Lead lists are uploaded to Google Sheets and linked from the markdown files. Use when you want to deliver work to a client in a polished, navigable format without requiring Notion.
npx skillsauth add athina-ai/goose-skills client-package-localInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Package all GTM work for a client into a structured local delivery package with dated .md files and Google Sheets. Reads the client's workspace folder and builds a navigable directory of deliverables.
| Input | Required | Default | Description |
|-------|----------|---------|-------------|
| client_name | Yes | -- | Client folder name under clients/ (e.g., truewind) |
| date | No | today's date | Date string in YYYY-MM-DD format, used for folder and file naming |
| intro_message | No | -- | Custom introduction message for the overview file. If not provided, generate one based on assets found. |
| recipient_name | No | -- | Name of the person receiving the package (used in intro) |
| recipient_context | No | -- | Any framing context for the delivery (e.g., "we built these to capitalize on the Botkeeper shutdown") |
| include_strategies | No | true | Whether to include strategy documents |
| include_campaigns | No | true | Whether to include campaign assets |
| include_content | No | true | Whether to include content drafts |
| include_leads | No | true | Whether to include lead lists (uploaded to Google Sheets) |
Requires access to:
No API keys need to be set manually — Google Sheets access is through MCP.
clients/<client_name>/client-package/<YYYY-MM-DD>/
├── Overview - <YYYY-MM-DD>.md
├── Lead Lists - <YYYY-MM-DD>.md
└── Strategies - <YYYY-MM-DD>/
├── <Strategy 1 Name>/
│ ├── overview.md
│ ├── <Substrategy 1 Name> - <YYYY-MM-DD>.md
│ ├── <Substrategy 2 Name> - <YYYY-MM-DD>.md
│ ├── <substrategy-1-leads>.csv
│ └── <substrategy-2-leads>.csv
├── <Strategy 2 Name>/
│ ├── overview.md
│ ├── ...
└── ...
Read the client folder at clients/<client_name>/ and inventory all available assets:
clients/<client_name>/
├── context.md # Client context, ICP, positioning
├── competitors.md # Competitive landscape (optional)
├── notes.md # Running log of decisions
├── strategies/ # Strategy documents (*.md)
├── campaigns/ # Campaign assets (folders or *.md)
├── content/ # Content drafts (blog posts, comparison pages, etc.)
└── leads/ # Lead lists (*.csv, *.json, *.md)
For each directory, list all files and read their contents. Build an inventory:
.md files in strategies/ (skip ORCHESTRATION-PROMPT.md and other internal-only files).md files in campaigns/.md files in content/.csv and .json files in leads/ (for Google Sheets upload) and .md files (for reference)If a directory doesn't exist or is empty, skip it.
Each strategy in strategies/ is a top-level theme. For each strategy:
campaigns/ to strategies by name/theme (e.g., hiring-hurting-outreach maps to the hiring-hurting strategy)content/ to strategies by name/theme (e.g., botkeeper-shut-down-what-accounting-firms-should-do-next.md maps to botkeeper-shutdown strategy)leads/ to strategies by name/theme (e.g., botkeeper-linkedin-leads.csv maps to botkeeper-shutdown strategy)Assets that don't clearly map to a strategy should be grouped under a "General" or "Ungrouped" section.
For each lead list file (.csv or .json) found in leads/:
Parse the file and extract structured data
.csv: parse directly.json: read the JSON, flatten into tabular formatEnsure required columns exist. Every Google Sheet MUST include these columns (add them if missing, populate with available data or mark as "N/A"):
Name — lead's full nameCompany — company nameTitle — job titleLinkedIn URL — LinkedIn profile URLSource — how we found them (e.g., "LinkedIn Post", "Job Posting", "Conference", "Web Archive")Qualification Status — e.g., "Qualified", "Not Qualified", "Needs Review"Qualification Reasoning — why they qualified or didn'tAdditional columns from the source data should be preserved after the required columns.
Create a new Google Sheet using RUBE_SEARCH_TOOLS to find GOOGLESHEETS_CREATE_GOOGLE_SHEET1, then execute:
<Client Name> — <Lead List Name> (<date>)Truewind — Botkeeper LinkedIn Leads (2026-02-24)Write data using GOOGLESHEETS_BATCH_UPDATE:
first_cell_location: "A1" and valueInputOption: "USER_ENTERED"Record the spreadsheet URL for linking in the Lead Lists summary file
If there are multiple lead files, create sheets in parallel where possible.
Create the output directory structure:
mkdir -p clients/<client_name>/client-package/<date>
mkdir -p clients/<client_name>/client-package/<date>/Strategies - <date>
Create Overview - <date>.md with:
recipient_name provided)recipient_contextExample structure:
# GTM Engineering Package — <Client Name>
**Prepared:** <date>
**For:** <recipient_name> (if provided)
## Summary
<Brief overview of what was done — strategies developed, leads found, campaigns built>
## What's Inside
### Strategies
- **<Strategy 1>** — <one-line summary>
- **<Strategy 2>** — <one-line summary>
### Lead Lists
See [Lead Lists - <date>](./Lead Lists - <date>.md) for all lead lists with Google Sheet links.
**Total leads found:** <count across all lists>
### Campaigns
<List of campaigns built, with which strategy they belong to>
### Content
<List of content pieces created>
---
<closing line>
Create Lead Lists - <date>.md with:
Example:
# Lead Lists — <Client Name>
**Date:** <date>
## Sheets
- **[Truewind — Botkeeper LinkedIn Leads](https://docs.google.com/spreadsheets/d/...)** — 10 leads from LinkedIn posts/comments about Botkeeper shutdown
- **[Truewind — Hiring Signal Leads](https://docs.google.com/spreadsheets/d/...)** — 25 leads from job posting intent signals
- **[Truewind — Conference Speakers Q1-Q2 2026](https://docs.google.com/spreadsheets/d/...)** — 15 leads from accounting conference speaker lists
**Total:** X leads across Y sheets
For each strategy identified in Step 2, create a subfolder under Strategies - <date>/:
Strategies - <date>/
└── <Strategy Name>/
├── overview.md
├── <Substrategy/Campaign 1> - <date>.md
├── <Substrategy/Campaign 2> - <date>.md
├── <substrategy-1-leads>.csv
└── <substrategy-2-leads>.csv
A summary of the strategy:
For each campaign or content asset mapped to this strategy:
<Descriptive Name> - <date>.mdFor each lead list that maps to this strategy:
.csv file in the strategy subfolder<strategy-name>-leads.csv or <specific-source>-leads.csvAfter all files are created, output a summary:
## Package Created
**Location:** clients/<client_name>/client-package/<date>/
**Files:**
- Overview - <date>.md
- Lead Lists - <date>.md
- Strategies - <date>/
- <Strategy 1>/
- overview.md
- <Substrategy 1> - <date>.md
- <substrategy-1>-leads.csv
- <Strategy 2>/
- overview.md
- ...
**Google Sheets:**
- [Lead List 1](<sheets-url>) — 12 leads
- [Lead List 2](<sheets-url>) — 9 leads
**Total:** X files created, Y Google Sheets created, Z total leads
| Problem | Solution |
|---------|----------|
| Google Sheets creation fails | Verify the Rube MCP server is connected and Google Sheets has an active connection. Run RUBE_MANAGE_CONNECTIONS with toolkits: ["googlesheets"]. |
| CSV parsing errors | Check the CSV for encoding issues. The skill expects UTF-8 CSVs with a header row. |
| JSON lead files have nested structure | Flatten the JSON to tabular format before uploading. Extract the key fields into the required columns. |
| Lead list is empty or malformed | Skip that file and note it in the summary. Don't create an empty Google Sheet. |
| Strategy mapping is ambiguous | When a campaign or lead list could belong to multiple strategies, place it under the most specific match. If truly ambiguous, ask the user. |
| No strategies folder exists | Create a single "General" strategy folder and place all assets there. |
metadata:
requires:
mcp_servers: ["rube"]
cost: "Free (Google Sheets via Composio)"
content-media
Takes an existing screen recording or demo video and adds professional zoom/pan effects synchronized to the narration. Uses transcript-driven zoom targeting and Remotion for rendering. Optionally replaces audio with a soundtrack.
tools
Repurposes long-form video (podcasts, interviews, talks) into short-form vertical clips for Instagram Reels, TikTok, and YouTube Shorts. Handles transcription, moment selection, clip extraction, speaker-tracked reframing (16:9 to 9:16), and animated captions.
development
Creates talking head videos from any source material (docs, changelogs, blog posts, notes, transcripts). Produces multi-scene videos with avatar narration over screenshots/images using HeyGen v2 API. Supports Quick Shot and Full Producer modes.
tools
Generates Instagram-ready product reels from any e-commerce product page URL. Scrapes product images, classifies by type, generates AI-animated clips via Higgsfield API, creates text overlays with style presets, and composes a 15-20 second reel with music. Supports model-based and product-only reels.