Systems Lab

Agent skill

client-package-local

Package all work done for a client into a local filesystem delivery package with .md files and Google Sheets.

dormantReaches the webActs undeclared1,578 words

Filed under Content and SEO.

From edupegoretti/fluidz-skills · 116 skills · 0 · pushed 2026-03-11

What it does when it runs

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.

Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
None found.
Hosts it reaches
  • docs.google.com
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
shellwrites files

Ask about client-package-local

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/edupegoretti/fluidz-skills.git /tmp/fluidz-skills
git -C /tmp/fluidz-skills sparse-checkout set "skills/playbooks/client-package-local"
mkdir -p ~/.claude/skills/client-package-local
cp -R "/tmp/fluidz-skills/skills/playbooks/client-package-local/." ~/.claude/skills/client-package-local/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Reproduced in full from edupegoretti/fluidz-skills/blob/a2cf697e2e8ec2ea517d85496e2d5c7f5dc44cd3/skills/playbooks/client-package-local/SKILL.md, which is licensed MIT (repository). 1,578 words, 29 headings.

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

InputRequiredDefaultDescription
client_nameYes--Client folder name under clients/ (e.g., truewind)
dateNotoday's dateDate string in YYYY-MM-DD format, used for folder and file naming
intro_messageNo--Custom introduction message for the overview file. If not provided, generate one based on assets found.
recipient_nameNo--Name of the person receiving the package (used in intro)
recipient_contextNo--Any framing context for the delivery (e.g., "we built these to capitalize on the Botkeeper shutdown")
include_strategiesNotrueWhether to include strategy documents
include_campaignsNotrueWhether to include campaign assets
include_contentNotrueWhether to include content drafts
include_leadsNotrueWhether 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:

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:

# 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:

# 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

ProblemSolution
Google Sheets creation failsVerify the Rube MCP server is connected and Google Sheets has an active connection. Run RUBE_MANAGE_CONNECTIONS with toolkits: ["googlesheets"].
CSV parsing errorsCheck the CSV for encoding issues. The skill expects UTF-8 CSVs with a header row.
JSON lead files have nested structureFlatten the JSON to tabular format before uploading. Extract the key fields into the required columns.
Lead list is empty or malformedSkip that file and note it in the summary. Don't create an empty Google Sheet.
Strategy mapping is ambiguousWhen 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 existsCreate a single "General" strategy folder and place all assets there.

Metadata

metadata:
  requires:
    mcp_servers: ["rube"]
  cost: "Free (Google Sheets via Composio)"

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what client-package-local does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.