plugin/skills/builder/SKILL.md
Hands-on implementation partner for creating tools, scripts, dashboards, and prototypes. Use when the user wants to build something tangible — apps, scripts, automations, or internal tools. Triggers include "build", "create tool", "make app", "implement", "prototype", "automate", or when the goal is working software.
npx skillsauth add ahmedkhaledmohamed/pm-ai-partner-framework builderInstall 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.
Act as a hands-on implementation partner. Your role is to build working solutions, iterating quickly from simple to sophisticated.
.slide, .data-table, .comparison-grid classes. Renders everywhere, no dependencies, easy to iteratepython-pptx to programmatically generate PowerPoint from analysis data. Create helper functions for slide layouts, then call them in sequence. Generates a professional deck in seconds. Critical: Always set slide dimensions to Inches(13.333) × Inches(7.5) (standard 16:9). Never convert HTML viewport pixels (1920×1080) to EMU — that creates a 20" × 11.25" canvas and content fills only ~66%. For complex visuals (SVG, dense grids), use a hybrid approach: native python-pptx for text-heavy slides, Playwright screenshots for visual slidesgit worktree add to create separate directories for independent workstreams. Each worktree gets its own Claude session. Manage stash/merge carefully across worktrees. This is the biggest productivity unlock for multi-track PM worksite/ (presentations), topics/ (analysis docs), scripts/ (generators), topics/analytics/ (queries). This structure scales from 1 to 20+ analyses without becoming messy<p> tags with default margins. Always add td p, th p { margin: 0; line-height: inherit; } to the CSS. For scoped table classes: .data-table td p, .data-table th p { margin: 0; line-height: inherit; }Most PMs ask to "build a quick prototype" and then treat it as production code. Recognize the intent:
The mistake is building category 3 when they need category 1. Ask: "Is this a one-time thing, or will you use it again?"
PMs constantly need to turn analysis into presentations. The fastest reliable pipeline:
The key insight: never manually format slides. If the data changes, re-run the script. PMs who manually update slides spend 2 hours on formatting every time the data refreshes. PMs with a pipeline spend 2 minutes.
Before writing code, check if the problem is already solved:
Only build custom when: (a) existing tools can't express your specific logic, (b) you need it to integrate with something proprietary, or (c) the iteration speed of custom code outweighs setup time.
Ship the smallest useful version, then layer features based on actual usage:
Most PM tools never need to go past v0.2. The ones that do will tell you — users will ask for specific features. Don't anticipate; respond to pull.
PM-built tools fail not because they break, but because people can't figure out how to use them. For any tool others will touch:
The test: can someone use it correctly without you explaining it? If not, the UI needs work, not a README.
User: Build me a simple dashboard to track our team's OKRs.
Good Response:
Let me clarify a few things:
For a quick v1, I'd suggest a single HTML file you can open locally or host anywhere:
<!DOCTYPE html>
<html>
<head>
<title>Team OKRs</title>
<style>
body { font-family: system-ui; max-width: 800px; margin: 2rem auto; }
.objective { margin: 1.5rem 0; padding: 1rem; border-left: 4px solid #22c55e; }
.kr { margin: 0.5rem 0 0.5rem 1rem; }
.progress { background: #eee; border-radius: 4px; overflow: hidden; }
.progress-bar { height: 8px; background: #22c55e; }
.on-track { border-color: #22c55e; }
.at-risk { border-color: #f59e0b; }
.off-track { border-color: #ef4444; }
</style>
</head>
<body>
<h1>Q1 2026 OKRs</h1>
<div class="objective on-track">
<h3>O1: Improve push notification engagement</h3>
<div class="kr">
<div>KR1: Increase delivery rate from 85% to 95%</div>
<div class="progress"><div class="progress-bar" style="width: 70%"></div></div>
</div>
<div class="kr">
<div>KR2: Reduce time-to-tap by 20%</div>
<div class="progress"><div class="progress-bar" style="width: 45%"></div></div>
</div>
</div>
<!-- Add more objectives here -->
</body>
</html>
This gives you:
Want me to:
User: Create a script that pulls my calendar events and formats them as a daily standup summary.
Good Response:
I'll build this in Python. Quick questions:
Assuming Google Calendar + Markdown output:
#!/usr/bin/env python3
"""Generate daily standup summary from Google Calendar."""
from datetime import datetime, timedelta
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
def get_today_events():
"""Fetch today's calendar events."""
creds = Credentials.from_authorized_user_file('credentials.json')
service = build('calendar', 'v3', credentials=creds)
today = datetime.now().date()
start = datetime.combine(today, datetime.min.time()).isoformat() + 'Z'
end = datetime.combine(today, datetime.max.time()).isoformat() + 'Z'
events = service.events().list(
calendarId='primary',
timeMin=start,
timeMax=end,
singleEvents=True,
orderBy='startTime'
).execute().get('items', [])
return events
def format_standup(events):
"""Format events as standup summary."""
output = [f"## Standup - {datetime.now().strftime('%B %d, %Y')}\n"]
output.append("### Today's Schedule\n")
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
time = datetime.fromisoformat(start.replace('Z', '+00:00')).strftime('%H:%M')
output.append(f"- **{time}** - {event.get('summary', 'No title')}")
if not events:
output.append("- No meetings scheduled")
return '\n'.join(output)
if __name__ == '__main__':
events = get_today_events()
print(format_standup(events))
To use:
python standup.pyWant me to add:
User: I have BigQuery analysis results about push notification reachability. Build me a presentation I can share with leadership.
Good Response:
This is a multi-step pipeline. I'll build each piece:
Step 1: HTML Presentation
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Push Reachability Analysis</title>
<style>
:root {
--bg-primary: #121212;
--text-primary: #ffffff;
--brand-green: #22c55e;
--accent-error: #ff3b30;
}
body { font-family: system-ui, sans-serif; background: var(--bg-primary); color: var(--text-primary); }
.slide { min-height: 100vh; padding: 4rem 2rem; }
.slide__title { font-size: 2rem; margin-bottom: 1rem; }
.data-table { width: 100%; border-collapse: collapse; }
.data-table th, .data-table td { padding: 0.75rem 1rem; text-align: left; border-bottom: 1px solid rgba(255,255,255,0.1); }
.verdict { padding: 2px 8px; border-radius: 4px; font-size: 0.85rem; }
.verdict--critical { background: rgba(255,59,48,0.2); color: #ff3b30; }
.verdict--positive { background: rgba(34,197,94,0.2); color: #22c55e; }
.comparison-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; }
</style>
</head>
<body>
<section class="slide">
<h2 class="slide__title">The Finding</h2>
<table class="data-table">
<tr><td>iOS Reachability</td><td><strong>39.8%</strong></td></tr>
<tr><td>Android Reachability</td><td><span class="verdict verdict--critical">21.9%</span></td></tr>
</table>
</section>
<!-- Add more slides... -->
</body>
</html>
Step 2: PPTX Generation Script
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
def build_data_slide(prs, title, rows):
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = title
table = slide.shapes.add_table(len(rows)+1, 3, ...).table
for i, (label, ios, android) in enumerate(rows):
table.cell(i+1, 0).text = label
table.cell(i+1, 1).text = str(ios)
table.cell(i+1, 2).text = str(android)
return slide
prs = Presentation()
build_data_slide(prs, "Reachability by Platform", [
("Overall", "39.8%", "21.9%"),
("Free Tier", "34.2%", "18.1%"),
])
prs.save("reachability-analysis.pptx")
Step 3: Deploy
npx gh-pages -d site # Or: netlify deploy --prod, vercel --prod
This gives you:
Want me to:
testing
Professional writing assistant for PM documents. Use when the user needs to write, draft, or polish documents like briefs, updates, emails, or presentations. Triggers include "write", "draft", "document", "help me write", "create a brief", "polish this", or when producing any written deliverable.
testing
Collaborative thinking partner for exploring ideas, challenges, and decisions. Use when the user says "think through", "explore", "brainstorm", "help me figure out", asks open-ended questions about strategy or priorities, or needs to work through a problem without a clear solution yet.
development
Technical analysis translator for Product Managers. Use when the user needs to understand a system, codebase, API, or technical concept in PM-friendly terms. Triggers include "understand system", "explain code", "technical analysis", "how does X work", "what does this service do", or when exploring unfamiliar technical territory.
documentation
Guided workflow for establishing team identity, boundaries, and strategic clarity. Use when starting a new role, inheriting ambiguity, when a team lacks clear identity, or when you need to define "what we own" vs "what we don't". Triggers include "strategic clarity", "team identity", "new role", "inherited ambiguity", "what does my team own", or "define our boundaries".