customer-repo
Skill4 starsChanged 7 months agoMITView on GitHub
Scaffold a customer engagement workspace at ~/customer-engagements/{customer}/ with optional per-project subfolders. Supports '/customer-repo Contoso' (customer only) or '/customer-repo Contoso/SASE-PoC' (customer + project). Initializes a local-only git repo with push-blocking hooks. Triggers include: 'new customer', 'customer repo', 'scaffold customer', 'create customer folder', 'set up customer', 'onboard customer', or any request to create a new customer engagement workspace.
In this repository11 other files it gives its agents.
- architectureSkill
- azure-answerSkill
- capture-meetingSkill
- connectSkill
- copilot-babysitterSkill
- crm-activity-syncSkill
- daily-activity-logSkill
- followupsSkill
- meeting-prepSkill
- msx-crmSkill
- sso-watcherSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
19 rules. About 0 are common, 13 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Create a complete, local-only customer engagement workspace with standardized templates, tracking files, and a git repo that blocks pushes …
- Distinctive: line 29
Idempotent: If the customer or project folder already exists, report what's there and offer to fill any gaps (missing files or directories) …
- Distinctive: line 35
Before running, verify all dependencies are present.
- Distinctive: line 63
Ask: "What is the customer name for this engagement?"
- Very specific: line 67
After scaffolding, ask: "Want to add a project under this customer now?
- Very specific: line 72
Remove special characters (keep only a-z, 0-9, -)
- Distinctive: line 97
Create the customer-level structure:
- Distinctive: line 104
If a project name was also provided, create the project structure too:
- Very specific: line 112
Conditionally create
architecture/: Only if the project has NO registered work_repos in crm-mapping.json. - Very specific: line 127
Check if projects/{project-slug}/ already exists.
- Distinctive: line 128
If it does NOT exist: create the project subfolder and its files (skip to project creation below).
- Distinctive: line 129
If it DOES exist: check for missing files/directories within the project.
- Distinctive: line 133
Ask: "Want me to fill in the missing items, or add a new project?"
- Distinctive: line 134
If the customer folder is fully complete, report: "Customer folder already fully scaffolded." List existing projects if any.
- Distinctive: line 136
Idempotency rule: Only create what's missing.
- Very specific: line 162
Write each template file using the write tool.
- Distinctive: line 214
Only created when a project name is provided.
- Very specific: line 264
Write the following to .git/hooks/pre-push:
- Distinctive: line 302
If a project was added to an existing customer repo, use:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/customer-repo — Customer Engagement Folder Scaffolding
Create a complete, local-only customer engagement workspace with standardized templates, tracking files, and a git repo that blocks pushes to keep customer data off remote servers. Supports customer-level scaffolding and optional per-project subfolders within each customer.
Platform Compatibility
This skill runs on macOS, Linux, and Windows. Detect the OS first and pick the matching command syntax. See _shared/PLATFORM.md (skills repo root) for the full translation table. Quick reference:
| Action | macOS / Linux (bash) | Windows (PowerShell) |
| Make dir (idempotent) | mkdir -p X | New-Item -ItemType Directory -Force -Path X | Out-Null |
| Test dir exists | [ -d X ] | Test-Path X |
| Make file executable | chmod +x file | (no-op on Windows — git for Windows runs hooks via sh.exe regardless) |
| Home dir | ~ or $HOME | $HOME |
On Windows, the pre-push hook still works because Git for Windows ships with sh.exe and runs hook scripts via it. The chmod +x step can simply be skipped.
Core Principles
- Local-only data. Customer engagement data never leaves the local machine via git. The repo is initialized with a pre-push hook that blocks all pushes. No remote is ever configured.
- Idempotent. If the customer or project folder already exists, report what's there and offer to fill any gaps (missing files or directories) rather than overwriting.
- OneDrive backup. Remind the user to back up the folder via their OneDrive for Business sync folder (typically
~/OneDrive - <YourCompany>/on macOS/Linux or%USERPROFILE%\OneDrive - <YourCompany>\on Windows — exact path varies per tenant). This keeps customer data on a managed, NDA-safe location. - Names from input. Accept the customer name (and optional project name) from the user's prompt or ask if not provided. Never guess or fabricate names.
Prerequisite Auto-Install
Before running, verify all dependencies are present. Install anything missing automatically.
No Required Sibling Skills
This is a foundation skill — it has no sibling skill dependencies. Other skills
depend on /customer-repo, not the other way around.
Required Tools
| Tool | Check (POSIX) | Check (Windows) | Install (macOS) | Install (Windows) |
| git | git --version | Get-Command git | Pre-installed | winget install Git.Git |
Install git before proceeding if missing. Git is required to initialize customer engagement repos with version control.
Step 1: Collect Names
Parse the user's input for a customer name and an optional project name.
Accepted input formats:
/customer-repo Contoso→ customer only, no project./customer-repo Contoso/SASE PoC→ customer + project (separated by/)./customer-repo Contoso SASE PoC→ customer + project (separated by space — treat the first token as customer, the rest as project).
If nothing provided:
- Ask: "What is the customer name for this engagement?"
If only a customer name is provided:
- Proceed with customer-only scaffolding.
- After scaffolding, ask: "Want to add a project under this customer now? (e.g.,
/customer-repo {customer-name}/project-name)"
Slugify each name independently for its folder:
- Lowercase
- Replace spaces with hyphens
- Remove special characters (keep only
a-z,0-9,-) - Example: "Contoso Ltd." →
contoso-ltd, "SASE PoC" →sase-poc
Set:
{customer-name}→ display name (e.g., "Contoso Ltd."){customer-slug}→ folder name (e.g.,contoso-ltd){project-name}→ display name (e.g., "SASE PoC") — may be empty{project-slug}→ folder name (e.g.,sase-poc) — may be empty
Step 2: Create Folder Structure
First, ensure the base directory exists:
mkdir -p ~/customer-engagementsThen check if the customer folder already exists:
ls ~/customer-engagements/{customer-slug}/ 2>/dev/nullCase A: Customer folder does NOT exist
Create the customer-level structure:
mkdir -p ~/customer-engagements/{customer-slug}
mkdir -p ~/customer-engagements/{customer-slug}/communicationsIf a project name was also provided, create the project structure too:
mkdir -p ~/customer-engagements/{customer-slug}/projects/{project-slug}/meetings
mkdir -p ~/customer-engagements/{customer-slug}/projects/{project-slug}/decisions
mkdir -p ~/customer-engagements/{customer-slug}/projects/{project-slug}/communicationsConditionally create architecture/: Only if the project has NO registered
work_repos in crm-mapping.json. If a work repo exists, the architecture
artifacts live there — creating architecture/ would be redundant.
# Only if no work_repo is registered for this project:
mkdir -p ~/customer-engagements/{customer-slug}/projects/{project-slug}/architectureCase B: Customer folder ALREADY exists
- List the existing files and directories.
- Report to the user: "Customer folder already exists at ~/customer-engagements/{customer-slug}/ with these files: ..."
If a project name was provided:
- Check if
projects/{project-slug}/already exists.- If it does NOT exist: create the project subfolder and its files (skip to project creation below).
- If it DOES exist: check for missing files/directories within the project. Offer to fill gaps. If everything is present, report: "Project '{project-name}' is already fully scaffolded under {customer-name}."
If no project name was provided:
- Identify any missing customer-level files or the
projects/directory. - Ask: "Want me to fill in the missing items, or add a new project?"
- If the customer folder is fully complete, report: "Customer folder already fully scaffolded." List existing projects if any. Ask: "Want to add a new project?"
Idempotency rule: Only create what's missing. Never overwrite existing files.
Target Structure
~/customer-engagements/{customer-slug}/
├── README.md ← customer-level overview
├── stakeholders.md ← shared across all projects
├── communications/ ← customer-level chat threads, email exchanges, communication history
├── projects/
│ ├── {project-slug}/
│ │ ├── README.md ← project scope, status, links
│ │ ├── followups.md ← action items for this project
│ │ ├── meetings/ ← meeting prep briefs and notes
│ │ ├── decisions/ ← architectural and project decisions
│ │ ├── communications/ ← project-specific chat summaries, key email exchanges
│ │ └── architecture/ ← (only if no work_repo registered) diagrams and technical docsDesign principle: customer-engagements/ is the relationship layer — activity
logs, communications, meetings, follow-ups, decisions. When a project has a dedicated
work repo (e.g., ~/SASE/), that repo IS the architecture source of truth.
architecture/ is only created for lightweight engagements with no work repo.
Step 3: Populate Template Files
Write each template file using the write tool. Only create files that don't already exist (idempotency).
Customer-Level Files
README.md — ~/customer-engagements/{customer-slug}/README.md
# {customer-name}
**Engagement start:** {YYYY-MM-DD}
**Account folder:** ~/customer-engagements/{customer-slug}/
## Overview
<!-- Brief description of the customer relationship and engagement context. -->
## Projects
<!-- List of active projects under this customer. -->
## Key Links
<!-- Add links to relevant resources: Teams channels, SharePoint sites, project boards, etc. -->
## Backup
Back up this folder regularly via your OneDrive for Business sync folder
(typically `~/OneDrive - <YourCompany>/` — adjust to your local sync path).
> **⚠️ Privacy Notice:** This folder contains customer-specific engagement data.
> Do not push to any remote git repository. Do not share outside the engagement team.
> All data must remain local or within the approved OneDrive backup path.stakeholders.md — ~/customer-engagements/{customer-slug}/stakeholders.md
# Stakeholders — {customer-name}
| Name | Role | Email | Notes |
|------|------|-------|-------|
| <!-- Add stakeholder --> | <!-- Role --> | <!-- email@example.com --> | <!-- Notes --> |
## Internal Team
| Name | Role | Email | Notes |
|------|------|-------|-------|
| <!-- Add team member --> | <!-- Role --> | <!-- email@example.com --> | <!-- Notes --> |Project-Level Files
Only created when a project name is provided.
README.md — ~/customer-engagements/{customer-slug}/projects/{project-slug}/README.md
# {project-name}
**Customer:** {customer-name}
**Project type:** <!-- PoC | Pilot | ADS | Engagement | Workshop -->
**Start date:** {YYYY-MM-DD}
**Status:** Active
## Overview
<!-- Brief description of this specific project/engagement. -->
## Key Links
<!-- Project-specific links: repos, dashboards, shared docs, etc. -->followups.md — ~/customer-engagements/{customer-slug}/projects/{project-slug}/followups.md
# Follow-ups — {project-name} ({customer-name})
## Open
| Action | Owner | Due | Status |
|--------|-------|-----|--------|
| <!-- Describe the action item --> | <!-- Who owns it --> | <!-- YYYY-MM-DD --> | 🔴 Open |
## Closed
| Action | Owner | Due | Status | Closed |
|--------|-------|-----|--------|--------|
| <!-- Completed items move here --> | <!-- Owner --> | <!-- Due --> | ✅ Done | <!-- YYYY-MM-DD --> |Step 4: Initialize Git Repo with Push-Blocking Hook
Initialize git (skip if .git/ already exists in the customer folder):
cd ~/customer-engagements/{customer-slug}
git initCreate the pre-push hook that blocks all pushes.
Write the following to .git/hooks/pre-push:
#!/bin/sh
echo ""
echo "╔══════════════════════════════════════════════════════════════╗"
echo "║ PUSH BLOCKED: Customer data must remain local. ║"
echo "║ ║"
echo "║ This repository contains customer engagement data that ║"
echo "║ must not be pushed to any remote repository. ║"
echo "║ ║"
echo "║ Back up via your OneDrive for Business sync folder ║"
echo "║ instead (e.g. ~/OneDrive - <YourCompany>/). ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""
exit 1Make the hook executable (POSIX only — skip on Windows):
# macOS / Linux / WSL / Git Bash
chmod +x "$HOME/customer-engagements/{customer-slug}/.git/hooks/pre-push"# Windows PowerShell — not needed. Git for Windows runs hook scripts via bundled
# sh.exe regardless of file mode. Skip this step.Create a commit covering whatever was created:
cd ~/customer-engagements/{customer-slug}
git add -A
git commit -m "Initial scaffold for {customer-name} engagement"If a project was added to an existing customer repo, use:
git add -A
git commit -m "Add project: {project-name}"Step 5: Print Summary
Adapt the summary based on what was created.
Customer + Project Created
✅ Customer engagement workspace created
📁 Customer: ~/customer-engagements/{customer-slug}/
📄 Customer-level files:
- README.md (engagement overview + privacy notice)
- stakeholders.md (contact tracking table)
📂 Directories:
- communications/ (chat threads, email exchanges, communication history)
📂 Project: ~/customer-engagements/{customer-slug}/projects/{project-slug}/
📄 Project-level files:
- README.md (project scope, type, status)
- followups.md (open/closed action items)
📂 Directories:
- meetings/ (meeting prep briefs and notes)
- decisions/ (architectural and project decisions)
- communications/ (project-specific chat summaries, key email exchanges)
- architecture/ (only if no work_repo — diagrams and technical docs)
🔒 Git: Initialized with push-blocking pre-push hook
📦 Commit: "Initial scaffold for {customer-name} engagement"
💡 Reminder: Back up this folder via your OneDrive for Business sync folder
(typically ~/OneDrive - <YourCompany>/ — adjust to your local path).Customer Only Created (No Project)
✅ Customer engagement workspace created
📁 Customer: ~/customer-engagements/{customer-slug}/
📄 Files created:
- README.md (engagement overview + privacy notice)
- stakeholders.md (contact tracking table)
📂 Directories:
- communications/ (chat threads, email exchanges)
🔒 Git: Initialized with push-blocking pre-push hook
📦 Commit: "Initial scaffold for {customer-name} engagement"
💡 Run `/customer-repo {customer-name}/project-name` to add a project.
💡 Reminder: Back up this folder via your OneDrive for Business sync folder
(typically ~/OneDrive - <YourCompany>/ — adjust to your local path).Project Added to Existing Customer
✅ Project added to {customer-name}
📂 Project: ~/customer-engagements/{customer-slug}/projects/{project-slug}/
📄 Files created:
- README.md (project scope, type, status)
- followups.md (open/closed action items)
📂 Directories:
- meetings/ (meeting prep briefs and notes)
- decisions/ (architectural and project decisions)
- communications/ (project-specific chat summaries, key email exchanges)
- architecture/ (only if no work_repo — diagrams and technical docs)
📦 Commit: "Add project: {project-name}"Error Handling
| Scenario | Behavior |
~/customer-engagements/ does not exist | Create it with mkdir -p. Continue. |
| Customer folder already exists | List contents. Offer to fill gaps or add a project. Do not overwrite. |
| Customer folder exists and is complete (no project requested) | Report "Folder already fully scaffolded." List existing projects. Ask if they want to add a project. |
| Customer + project both already exist and are complete | Report "Project '{project-name}' is already fully scaffolded under {customer-name}." Show the file listing. Stop. |
git init fails | Warn the user but continue — the folder and files are still usable without git. |
git commit fails | Inform the user. The files are written; only versioning is missing. |
| User provides empty or invalid customer name | Ask again. Do not proceed with an empty slug. |
User provides empty project name after / | Treat as customer-only. Ignore the trailing slash. |
| Disk space or permission error on write | Report the error and stop. Do not partially scaffold. |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

