client-package-local
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.
Best use case
client-package-local is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
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.
Teams using client-package-local should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/client-package-local/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How client-package-local Compares
| Feature / Agent | client-package-local | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
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.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# create-client-package
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.
## Inputs
| 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) |
## Setup
Requires access to:
- **Rube MCP server** — for creating Google Sheets (via Composio GOOGLESHEETS tools)
No API keys need to be set manually — Google Sheets access is through MCP.
## Output Directory Structure
```
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
│ ├── ...
└── ...
```
## Procedure
### Step 1: Scan the Client Folder
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:
- **Strategies:** List of `.md` files in `strategies/` (skip `ORCHESTRATION-PROMPT.md` and other internal-only files)
- **Campaigns:** List of campaign folders or `.md` files in `campaigns/`
- **Content:** List of `.md` files in `content/`
- **Leads:** List of `.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.
### Step 2: Identify Strategies and Map Assets
Each strategy in `strategies/` is a top-level theme. For each strategy:
1. **Read the strategy .md file** to understand the strategy name, summary, and execution plan
2. **Map campaigns to strategies** — match campaigns in `campaigns/` to strategies by name/theme (e.g., `hiring-hurting-outreach` maps to the `hiring-hurting` strategy)
3. **Map content to strategies** — match content in `content/` to strategies by name/theme (e.g., `botkeeper-shut-down-what-accounting-firms-should-do-next.md` maps to `botkeeper-shutdown` strategy)
4. **Map leads to strategies** — match lead files in `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.
### Step 3: Upload Lead Lists to Google Sheets
For each lead list file (`.csv` or `.json`) found in `leads/`:
1. **Parse the file** and extract structured data
- For `.csv`: parse directly
- For `.json`: read the JSON, flatten into tabular format
2. **Ensure 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 name
- `Company` — company name
- `Title` — job title
- `LinkedIn URL` — LinkedIn profile URL
- `Source` — 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't
Additional columns from the source data should be preserved after the required columns.
3. **Create a new Google Sheet** using `RUBE_SEARCH_TOOLS` to find `GOOGLESHEETS_CREATE_GOOGLE_SHEET1`, then execute:
- Title format: `<Client Name> — <Lead List Name> (<date>)`
- Example: `Truewind — Botkeeper LinkedIn Leads (2026-02-24)`
4. **Write data** using `GOOGLESHEETS_BATCH_UPDATE`:
- First row = headers (required columns first, then additional columns)
- Remaining rows = data
- Use `first_cell_location: "A1"` and `valueInputOption: "USER_ENTERED"`
5. **Record the spreadsheet URL** for linking in the Lead Lists summary file
If there are multiple lead files, create sheets in parallel where possible.
### Step 4: Create the Package Directory
Create the output directory structure:
```bash
mkdir -p clients/<client_name>/client-package/<date>
mkdir -p clients/<client_name>/client-package/<date>/Strategies - <date>
```
### Step 5: Create the Overview File
Create `Overview - <date>.md` with:
- A greeting to the recipient (if `recipient_name` provided)
- A summary of the engagement — what strategies were developed, how many leads were found, what campaigns were built
- A table of contents linking to the other files in the package
- Any framing context from `recipient_context`
- A closing line
Example structure:
```markdown
# 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>
```
### Step 6: Create the Lead Lists File
Create `Lead Lists - <date>.md` with:
- A bulleted list of all Google Sheet links created in Step 3
- For each sheet: the name, number of leads, a brief description of the source/strategy, and the Google Sheet URL
Example:
```markdown
# 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
```
### Step 7: Create Strategy Subfolders
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
```
#### overview.md
A summary of the strategy:
- Strategy name and one-paragraph summary
- The signal being tracked
- Target ICP / filters
- List of substrategies, campaigns, and content pieces with brief descriptions
- Links to the Google Sheets for any related lead lists
#### Substrategy / Campaign .md files
For each campaign or content asset mapped to this strategy:
- Copy the meaningful content from the original file
- Clean up any internal-only notes or orchestration details
- Include links to relevant Google Sheets
- Name the file: `<Descriptive Name> - <date>.md`
#### Lead .csv files
For each lead list that maps to this strategy:
- Export a copy of the lead data as a `.csv` file in the strategy subfolder
- Use the standardized columns (Name, Company, Title, LinkedIn URL, Source, Qualification Status, Qualification Reasoning) plus any additional relevant columns
- Name the file descriptively: `<strategy-name>-leads.csv` or `<specific-source>-leads.csv`
### Step 8: Verify and Report
After 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
```
## Example Prompts
- "Package everything we've done for Truewind into a shareable folder"
- "Create a client delivery package for Acme Corp with all our work"
- "Build a package for [client] — include strategies, campaigns, and lead lists"
- "Take our work in clients/truewind and create a deliverable"
- "Package the client folder into something I can send to the founder"
## Troubleshooting
| 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
```yaml
metadata:
requires:
mcp_servers: ["rube"]
cost: "Free (Google Sheets via Composio)"
```Related Skills
client-packet-engine
Batch client packet generator. Takes company names/URLs, runs intelligence + strategy generation, presents strategies for human selection, executes selected strategies in pitch-packet mode (no live campaigns or paid enrichment), and packages into local delivery packets.
client-package-notion
Package all work done for a client into a shareable Notion page with subpages and Google Sheets. Reads the client's folder (strategies, campaigns, content, leads, notes) and builds a structured Notion workspace the client can browse. Lead list CSVs are uploaded to Google Sheets and linked from the Notion pages. Use when you want to deliver work to a client in a polished, navigable format.
client-onboarding
Full client onboarding: intelligence gathering, synthesis into Client Intelligence Package, and growth strategy generation. Phases 1-3 of the Client Launch Playbook.
competitor-monitoring-system
Set up and run ongoing competitive intelligence monitoring for a client. Tracks competitor content, ads, reviews, social, and product moves.
lead-discovery
Orchestrator that runs first for lead generation requests. Gathers business context via website analysis or questions, identifies competitors, builds ICP, and routes to signal skills with pre-filled inputs.
serp-feature-sniper
Analyze SERP features per keyword (featured snippets, PAA, video carousels, knowledge panels, image packs) and produce optimized content structures to win them. Identifies which features are winnable, who currently holds them, and exactly how to format your content to steal them.
search-ad-keyword-architect
Deep keyword research for paid search. Analyzes competitor SEO keywords, review language, Reddit/community terminology, and existing site content to build a keyword architecture: branded vs non-branded, funnel stage mapping, match type recommendations, and estimated competition tiers. Use before building a Google Ads campaign or to audit an existing one.
sales-performance-review
Periodic sales performance review composite. Aggregates ALL sales initiatives taken in a given period — outbound campaigns, inbound efforts, events, partnerships, content, referrals — and measures the impact of each on pipeline and revenue. Produces a team-presentable report covering initiative-level performance, cross-initiative comparisons, pipeline attribution, what's working, what's not, and where to invest next. Tool-agnostic — pulls data from any combination of CRM, outreach tools, and tracking systems.
qbr-deck-builder
Pull customer usage highlights, support history, feature adoption, NPS/CSAT data, and ROI metrics into a structured QBR deck outline with slide-by-slide content. Outputs markdown slide content ready for HTML slides or Google Slides. Designed for CS teams at seed/Series A who run QBRs but don't have time to build decks from scratch.
customer-story-builder
Take raw customer inputs — interview transcripts, survey responses, Slack quotes, support tickets, review excerpts — and generate a structured case study draft with problem/solution/result narrative, pull-quotes, metric callouts, and multi-format outputs (full case study, one-pager, social proof snippet, sales deck slide). Pure reasoning skill. Use when a product marketing team has customer signal but no time to write the story.
content-repurposer
Take a long-form asset (blog post, webinar, podcast, LinkedIn article) and generate 10+ derivative pieces ready to publish: LinkedIn posts, tweets/X threads, email snippets, short-form hooks, and pull-quotes. Pure reasoning skill — no scripts, no scraping. Use when a founder or marketer has created one piece of content and needs to distribute it across multiple channels without writing each variant from scratch.
competitor-content-tracker
Monitor competitor content across blogs, LinkedIn, and Twitter/X on a recurring basis. Surfaces new posts, trending topics, and content gaps you can own. Chains blog-scraper, linkedin-profile-post-scraper, and twitter-scraper. Use when you want a weekly digest of what competitors are publishing and which topics are generating engagement.