Skills & Agents
The AI workforce that runs Closet Maestro.
Active Skills
19
Codified workflows
Sub-Agents
0
Building up skills first
Connected Systems
18
APIs and data sources
Departments
8
Functional groupings
Agent Architecture
Current team and planned hires.
Max
Main Agent · Chief of Staff
The central AI agent that runs Closet Maestro's operations. Manages all skills directly until sub-agents are hired. Connects to 18 systems, runs 19 skills, and coordinates between Charlie, Jesy, and the business tools.
19
Skills
18
Systems
0
Reports
Finance
2 skills · Reports to Max
Marketing
2 skills · Reports to Max
Operations
1 skill · Reports to Max
Strategy
Planned · No skills yet
Research
1 skill · Reports to Max
Production
Planned · No skills yet
Sales
Planned · No skills yet
HR
Planned · No skills yet
Active Skills
Each skill is a documented workflow that replaces a chunk of a person's job.
Assign Task
/assign-task
Use when Charlie or Jesy wants to create a Trello card to assign work to someone on the team. Triggers include "assign Jesy to X", "create a task for Pamela", "put X on the Operations board", "have Aubrey draft Y", "add a Trello card for Z", "tell Charlie to follow up on W". Lands tasks on the right functional board (Operations / Marketing / Bookkeeping) with Max as creator and the requester noted in an attribution comment.
Added 2026-05-19
Deposit Matcher
/deposit-matcher
Match bank deposits to invoices across Stripe, JobTread, and QuickBooks Online. Use when the bookkeeper asks "what invoice does this deposit apply to?" or when you need to create a missing QBO invoice from JobTread data.
Added 2026-04-21
Doc Builder
/doc-builder
Use when someone asks to create a Google Doc, make a document, put content into a Google Doc, or write a doc for someone. Also use for branded document generation.
Added 2026-04-21
Excalidraw Diagram
/excalidraw-diagram
Use when someone asks to create a diagram, visualize a workflow, map out an architecture, draw a flowchart, or generate an Excalidraw file.
Added 2026-03-10
Financial Strategist
/financial-strategist
Use when Charlie asks for financial overview, P&L, cash flow, GPM, margins, AR aging, or "how are we doing financially". Also use for break-even analysis, cash position, or project margin questions.
Added 2026-04-21
Jobtread New Job
/jobtread-new-job
Use when someone wants to add a new job to the JobTread pipeline -- "we've got a new job", "add this job to the pipeline", "create a job on JobTread", "set up a new project for <customer>". Walks through customer, project address, primary contact, scope of work, and the Project Needs / Project Type / Lead Source fields, then shows a full preview and only writes to JobTread after it is approved. Creates the project location explicitly so the job does not land under the wrong address.
Added 2026-08-22
Mockup
/mockup
Use when Charlie wants to SEE a visual mockup of a new UI idea before any backend wiring. Triggers include "spin up a demo", "mock this up", "let me see what this would look like", "build a mockup", "what would this look like", or whenever a UI direction is being explored and ASCII sketches aren't enough. Produces a static, click-through HTML demo at /demo/<name> on a feature branch — real Tailwind, real brand chrome, fake data, no backend calls. Throwaway by design; either gets deleted or promoted to a real page after Charlie holds it.
Added 2026-05-27
Multiprint Hardware Image
/multiprint-hardware-image
Use when someone asks to create, generate, compose, or make a hardware image tile for the legend area of a Mozaik multiprint elevation sheet — closet rod, pull, hinge, drawer slide, hang rail bracket, shelf pin, grommet, or a finish swatch. The source product photo is pulled from the Airtable Master SKU List by name; composes a 500x500 PNG with that photo in the middle, a black bar at the top with the hardware name (white, bold), and a black bar at the bottom with the finish (white, italic).
Added 2026-06-23
New Genie
/new-genie
Use when Charlie wants to scaffold a new chat Genie. Triggers include "build a new Genie for X", "scaffold a [noun] Genie", "I want a Genie that does Y". This skill walks through the 4 design questions, then makes the 6 code changes across backend + frontend in a single coherent pass.
Added 2026-05-27
Omada Network
/omada-network
Use when Charlie asks about the network, WiFi, APs, connected devices, traffic, or anything related to the Omada controller. Also use for "what's on the network", "who's connected", "check the Rapp House AP", etc.
Added 2026-04-23
Project Tracker
/project-tracker
Use when Charlie asks for a project overview, status check, pipeline view, or "what's in flight". Also use for red flags, job status, or pulse checks.
Added 2026-04-21
Schedule Appointment
/schedule-appointment
Use when Charlie wants to schedule an appointment with a customer (consultation, site visit, follow-up, etc.). Triggers include "schedule an appointment with X", "book a consult with Y", "set up a meeting at [address]", "calendar invite for [name]". Walks through customer lookup (JT or new), gathers details, creates the event with travel-time bookends on the Operations calendar.
Added 2026-05-06
Signature Designer
/signature-designer
Use when someone asks to create an email signature, update a signature, or generate a new team member's email signature.
Added 2026-04-21
Skill Architect
/skill-architect
Use when creating new skills, optimizing existing skills, or auditing skill quality. Guides skill development following Claude Code official best practices.
Added 2026-04-21
Sku Price Audit
/sku-price-audit
Use ONLY when someone explicitly asks to run a price audit on the Master SKU list -- "run a price audit", "audit the SKU prices", "refresh Master SKU prices from the links", "check vendor prices". For rows WITH a Price Link it fetches the link, confirms the Product ID, reads the price, and (after you approve a preview) writes Price + today's Date Price Audited. For rows WITHOUT a Price Link it groups them by vendor and drafts a price-request email to each vendor (using the vendor email from the Airtable Vendors table). Drafts only, never sends.
Added 2026-06-25
Social Content
/social-content
Use when someone asks to run the social media pipeline, generate social posts, post to social media, create content for Facebook or Instagram, or check on pending posts.
Added 2026-03-09
Stripe Payout
/stripe-payout
Use when Charlie asks to pay out Stripe, check Stripe balance, run Stripe payouts, or "what's in Stripe". Also auto-invoked by scheduled triggers for morning and afternoon payout runs.
Added 2026-04-23
Video Analyst
/video-analyst
Use when someone asks to analyze a video, scrape a reel, extract frames from a video, see what's in a video, or break down video content. Also use when given an Instagram, YouTube, or TikTok URL to analyze.
Added 2026-04-21
Wrapup
/wrapup
End-of-session routine. Commits code, pushes to remote, and gathers context so Charlie can close the window cleanly.
Added 2026-04-07
Marketing Skill Library
41 on-demand marketing skills from the Corey Haines pack. Reference library, not daily-use.
Connected Systems
Click any system to see how it connects. Status checks run on page load.
JobTread
Checking...
REST API
CRM, project management, job costing
QuickBooks Online
Checking...
REST API + OAuth2
Accounting, invoicing, bank feeds
Hubstaff
Checking...
REST API + PAT
Time tracking, GPS, payroll data
Airtable
Checking...
REST API + MCP Server
SKU catalog, order management, pricing
Google Workspace
Checking...
REST API + OAuth2 + CLI
Gmail, Calendar, Drive, Sheets, Chat
Stripe
Checking...
REST API (Read-Only)
Payment processing, deposit matching
Zoom
Checking...
Server-to-Server OAuth
Meeting recordings, transcripts
Plaud Note
Checking...
Email Intake + CDP
Field recording transcription
Mozaik
Checking...
Local Filesystem
Cabinet design software (read-only via filesystem)
Calendly
Checking...
REST API
Appointment scheduling
Twilio
Checking...
REST API
SMS send + reply polling
Google Maps Distance Matrix
Checking...
REST API
Travel time + distance lookups
Trello
Checking...
REST API
Internal task management across team
Airtable - Compliance Tracker
Checking...
REST API
Source of truth for wholesale customer permits, vehicle/trailer registration, and Closet Maestro business credentials. 3 tables in the Production Manager base.
Airtable - Safety Program
Checking...
REST API
Two tables in the Production Manager base: Safety Documents (read-only index of programs, forms, training, acknowledgments, reference, OSHA forms) and Safety Tasks (live follow-up queue with Charlie/Jesy/Pamela write allowlist). Powers the /safety dashboard page.
Google Gemini
Checking...
REST API
AI image generation (Nano Banana)
TV Displays
Checking...
Internal FastAPI route module
Wall-mounted shop floor + office TV dashboards
Team Dates Sheet
Checking...
Google Sheet (Drive API)
Birthdays + work anniversaries Google Sheet
JobTread
CRM, project management, job costing
Connection Type
REST API
We send HTTP requests directly to JobTread's Pave API to read and write data.
Data Flow
Read
Jobs, contacts, estimates, custom fields, budgets
Write
Create/update jobs, daily logs, custom field values
Details
- Pave API at api.jobtread.com with grant key auth
- Custom fields track project phases (Status), type, priority
- Plaud transcripts auto-posted as daily logs per job
- Used by /project-tracker, /financial-strategist, and Production Manager
Client
tools/jobtread_client.pyQuickBooks Online
Accounting, invoicing, bank feeds
Connection Type
REST API + OAuth2
OAuth2 token-based connection. Access tokens last 1 hour, refresh tokens 100 days. Needs periodic re-auth.
Data Flow
Read
Bank balances, invoices, AR aging, chart of accounts
Write
Create invoices, record payments
Details
- Company: Inland CNC LLC
- Books closed through 12/31/2025
- Tokens stored in .tmp/qbo_tokens.json
- Used by /financial-strategist, /deposit-matcher, and Finance Manager dashboard widgets
Client
tools/quickbooks_client.pyHubstaff
Time tracking, GPS, payroll data
Connection Type
REST API + PAT
Personal Access Token (PAT) authentication. Two PATs: one for laptop, one for server. Auto-refresh via token manager.
Data Flow
Read
Time entries, projects, team members, activities
N/A
API is read-only for time entries; edits must happen in Hubstaff web UI
Details
- Bi-directional sync with JobTread (projects, time entries)
- Auto-travel time detection
- Cron: syncs at 5 AM daily on cm-server-01
- Used by HR Manager widget (team hours this week)
Client
tools/hubstaff_token_manager.pyAirtable
SKU catalog, order management, pricing
Connection Type
REST API + MCP Server
Two connection methods: pyairtable SDK for Python scripts, and an MCP server that lets the AI agent interact with Airtable directly.
Data Flow
Read
367 SKUs, pricing, Mozaik aliases, panel colors, label templates
Write
Update SKU mappings, import Mozaik CSV data
Details
- Base ID: appXfvpqf0pWdjbcs (30+ tables)
- Single source of truth for pricing
- Custom extensions: Label Maestro, Mozaik CSV Import
- SKU-to-Mozaik name mapping is the bottleneck (4 of 367 mapped)
Client
pyairtable SDK + airtable-mcp-serverGoogle Workspace
Gmail, Calendar, Drive, Sheets, Chat
Connection Type
REST API + OAuth2 + CLI
Desktop OAuth2 credentials for API access. Also has GWS CLI installed globally for Drive/Docs/Sheets operations via command line.
Data Flow
Read
Gmail (charlie@ and subs@), Calendar, Drive files, Chat messages
Write
Send emails, create Docs/Sheets, post Chat messages (via Max bot)
Details
- 43 APIs enabled in Google Cloud project
- Max bot runs on Google Chat via Pub/Sub
- Zoom summaries and Plaud transcripts arrive at subs@closet-maestro.com
- Drive organizer (tools/drive_organizer.py) handles audit + move/trash via Drive API; monthly audit cron pings if root has >10 loose files
- Used by /daily-briefing-officer, /ghostwriter, and most skills
Client
tools/google_auth.py + GWS CLIStripe
Payment processing, deposit matching
Connection Type
REST API (Read-Only)
Restricted API key with read-only access. Used specifically for matching bank deposits to payment sources.
Data Flow
Read
Payouts, charges, balance transactions, customer data
N/A
No write access -- deposits and charges happen through Stripe Dashboard
Details
- Connected April 2026 for deposit reconciliation
- Restricted key in .env (STRIPE_API_KEY)
- Used by /deposit-matcher to match deposits across Stripe, JobTread, QBO
Client
tools/stripe_client.pyZoom
Meeting recordings, transcripts
Connection Type
Server-to-Server OAuth
Server-to-server OAuth app -- no user login required. Token auto-obtained per request (1hr expiry).
Data Flow
Read
Cloud recordings, VTT transcripts with speaker names
N/A
No write access needed
Details
- Zoom AI Companion auto-emails summaries to subs@closet-maestro.com
- Intake tool pulls summaries via Gmail API
- Cron: runs every 2 hours on cm-server-01
- Transcripts saved to context/meetings/ as markdown
Client
tools/zoom_summary_intake.pyPlaud Note
Field recording transcription
Connection Type
Email Intake + CDP
AutoFlow auto-transcribes recordings and emails to subs@. A secondary CDP-based pull exists but is currently broken.
Data Flow
Read
Meeting/site visit transcripts via email
Write
Auto-matched to JobTread jobs, posted as daily logs
Details
- Charlie records site visits with Plaud Note hardware
- plaud_job_sync.py uses Claude API to match transcripts to jobs
- Low-confidence matches prompt Charlie via Max in Google Chat
- Cron: intake every 2hr, sync at :20 past even hours
Client
tools/plaud_email_intake.py + plaud_job_sync.pyMozaik
Cabinet design software (read-only via filesystem)
Connection Type
Local Filesystem
No API available. We read Mozaik's XML config files directly from a shared Dropbox folder. NEVER write to these files without Charlie's explicit permission.
Data Flow
Read
Pricing (Hardware.dat, Inserts.dat), project configs, material specs
N/A
No write access -- Mozaik files are sacred, modify only with permission
Details
- Jesy RDPs into Mozaik laptops for design work
- 4 Dell laptops on desk switch (01-03 active)
- Knowledge base: 279 forum threads + 103 YouTube videos scraped
- Future: computer use API automation planned
Client
Direct file read from ~/Dropbox/Mozaik Shared/Calendly
Appointment scheduling
Connection Type
REST API
API key authentication. Used to pull booking data and scheduling info.
Data Flow
Read
Scheduled appointments, booking details, event types
N/A
Bookings created by customers through Calendly links
Details
- Used at home show for appointment booking
- 3 bookings captured at March 2026 home show
- Future: speed-to-lead automation after form submissions
Client
API key in .env (CALENDLY_API_KEY)Twilio
SMS send + reply polling
Connection Type
REST API
Account SID + auth token. Used to send and poll SMS messages.
Data Flow
Write
Outbound SMS to employees and (future) customers
Read
Inbound SMS replies (polled every 15 min)
Details
- Used by sms_scheduler.py for Israel/Jensen weekly availability prompts
- Reply parsing via Claude Sonnet (proven pattern for Customer Comms Layer)
- Inbound webhook not yet wired -- planned for Customer Comms Layer Phase 0
Client
tools/twilio_client.pyGoogle Maps Distance Matrix
Travel time + distance lookups
Connection Type
REST API
API key. Used to calculate drive time from shop to customer addresses.
Data Flow
Read
Drive time, distance, traffic-aware duration
Details
- Origin defaults to shop (4243 Tjossem Rd, Ellensburg)
- Used by /schedule-appointment skill to size travel-time bookend events
- On Google Cloud free trial credit; ~$5/1000 calls; usage well under free tier
Client
tools/appointment_scheduler.py (GOOGLE_MAPS_API_KEY in .env)Trello
Internal task management across team
Connection Type
REST API
Trello REST API authenticated as subs@closet-maestro.com ('Max EA' app). Server-to-server, no OAuth flow.
Data Flow
Read
Boards, lists, cards, members, labels
Write
Create cards (with attribution), comment, move, archive
Details
- Workspace: 'Closet Maestro Internal' (free plan)
- 3 boards: Operations, Marketing, Bookkeeping
- Members: Charlie, Jesy, Max EA (subs@), accounting@ (Pamela)
- Created by /assign-task skill; attribution comment names the human requester
- Card creation from Google Chat DM via 'assign X to Y' (with yes/no/tweak preview)
- Config cache: tools/trello_config.json (board/list/label/member IDs)
- Project doc: projects/trello-task-management/README.md
Client
tools/trello_client.py, tools/trello_intent.py, tools/trello_draft_state.pyAirtable - Compliance Tracker
Source of truth for wholesale customer permits, vehicle/trailer registration, and Closet Maestro business credentials. 3 tables in the Production Manager base.
Connection Type
REST API
We use pyairtable to read/write the three Compliance tables.
Data Flow
Read
All three tables, daily, for the dashboard + expiration cron
Write
Manual edits by Pamela / Charlie / Jesy via Airtable UI
Details
Client
tools/compliance_airtable.pyAirtable - Safety Program
Two tables in the Production Manager base: Safety Documents (read-only index of programs, forms, training, acknowledgments, reference, OSHA forms) and Safety Tasks (live follow-up queue with Charlie/Jesy/Pamela write allowlist). Powers the /safety dashboard page.
Connection Type
REST API
Read by the FastAPI safety router (tools/maestro-dashboard/safety_routes.py). Writes are gated to charlie@/jesy@/pamela@closet-maestro.com via a require_writer dep.
Data Flow
Read
Document index + task queue, every minute, for /safety dashboard page
Write
Task add/edit/delete from /safety page (write allowlist); doc index edits via Airtable UI
Details
Client
tools/maestro-dashboard/safety_routes.pyGoogle Gemini
AI image generation (Nano Banana)
Connection Type
REST API
API key auth via google-genai SDK. Billing enabled on charlie@closet-maestro.com Google Cloud project.
Data Flow
Write
Text prompt in, PNG image out (gemini-2.5-flash-image)
Details
- Model: gemini-2.5-flash-image (Nano Banana), ~$0.04 per image
- Output dir: references/generated-images/ (timestamped filename)
- CLI: .venv/bin/python3 tools/gemini_image.py 'prompt' [--out path] [-n count]
- Used by Charlie + Jesy for spec-doc reference shots, marketing placeholders, product mockups
- Replaces Replicate path for most use cases (Replicate token remains commented out)
- Paid API call -- Claude sessions must confirm before bulk generation (per CLAUDE.md rule)
Client
tools/gemini_image.pyTV Displays
Wall-mounted shop floor + office TV dashboards
Connection Type
Internal FastAPI route module
Public, HMAC-verified endpoints fed to dark-themed /tv/{shop,office} kiosk pages. Slide library in code; per-tenant config to follow in Phase 2.
Data Flow
Read
Clocked-in, weather, next install, celebrations, huddle note
Details
- Endpoints: /api/v2/tv/{token,topbar,celebrations}
- Token issuer auth-gated; topbar + celebrations public but HMAC-verified (reuses MAINTENANCE_QR_SECRET)
- Frontend pages: dashboard/src/app/tv/{shop,office}/page.tsx (Next.js App Router, outside (dashboard) group)
- Slide library: dashboard/src/components/tv/slides/
- Birthdays + anniversaries sourced from Google Sheet HR/Team Dates via tools/team_dates_client.py (15-min cache)
- Team photos sourced from HR/1 - Team Photos in Charlie's personal Drive; sync cron pending
- Hardware: any device with a modern browser (Chromebox, Mac mini, NUC, Raspberry Pi, smart-TV browser). Loads https://dashboard.closet-maestro.com/tv/{display}?t=<token> on startup.
- Scope + decisions: projects/tv-displays/README.md
Client
tools/maestro-dashboard/tv_routes.pyTeam Dates Sheet
Birthdays + work anniversaries Google Sheet
Connection Type
Google Sheet (Drive API)
Sheet in Charlie's personal Drive HR folder. TV Displays read it via Sheets API for celebration slides.
Data Flow
Read
Name, role, DOB, start date, show-on, Hubstaff user id
Details
- Sheet: HR/Team Dates (id 1F8wg-fMdT58mWaVS2bBBrBqxSzu9yl_7tIC5N5ifsb4)
- Columns: Name, Role, DOB (MM-DD), Start Date (YYYY-MM-DD), Show On, Hubstaff User ID, Notes
- Show On controls which TV celebrates: shop / office / both / none
- 15-minute in-process cache (tools/team_dates_client.py)
- Seeded from Hubstaff /users (start dates) on 2026-06-02; Hubstaff does not expose DOB
- Project: projects/hr-folder-buildout/
Client
tools/team_dates_client.py