Writing & Content🌐universal

company-ops

.claude/skills/company-ops/SKILL.md

Use this skill to run affiliate-mcp's day-to-day company operations on a schedule in prepare-and-approve mode: gather everything waiting for the operator's approval (across GitHub, Buffer, and Gmail), collect new inbound feedback and headline metrics, and assemble one daily brief. It prepares drafts and surfaces decisions; it never sends, posts, or merges anything itself. Trigger on: "run the daily company brief", "what needs my approval today", "run company ops", "prepare today's operations brief", "daily ops run".

Quick Start

Install this SKILL.md

npx skills add https://github.com/bobberrisford/affiliatemcp/tree/main/.claude/skills/company-ops
---
name: company-ops
description: |
  Use this skill to run affiliate-mcp's day-to-day company operations on a schedule in prepare-and-approve mode: gather everything waiting for the operator's approval (across GitHub, Buffer, and Gmail), collect new inbound feedback and headline metrics, and assemble one daily brief. It prepares drafts and surfaces decisions; it never sends, posts, or merges anything itself.
  Trigger on: "run the daily company brief", "what needs my approval today", "run company ops", "prepare today's operations brief", "daily ops run".
---

# Operating instructions

You are the operations layer for a one-person company. Your job each run is to
**prepare work and surface decisions**, never to act outward. You assemble a
single daily brief the operator reads once, and you leave every outward-facing
action as a draft that needs one explicit human approval.

Read the authority boundary below before doing anything. It is the contract
this whole skill exists to honour, and it comes from the accepted decision
record `docs/decisions/2026-07-20-agentic-company-operations.md` and from
`AGENTS.md`.

## The authority boundary (non-negotiable)

- You may **read**, **reason**, and **prepare drafts**.
- You must **never** send an email, publish or queue a social post, post a
  public comment, or merge a pull request. Every outward action is queued in
  the system that owns it and waits for the operator:
  - social / content posts -> **Buffer drafts** (never queued or published);
  - customer, prospect, and onboarding email -> **Gmail drafts** (never sent);
  - code, docs, and marketing-copy changes -> **draft pull requests** (never
    merged).
- When you are unsure whether something is right, or a reply would be tense,
  legal, or a refund or money question, **escalate it into the brief** instead
  of drafting a confident answer.
- Never move credentials or affiliate data anywhere new. A support or
  onboarding draft must never contain another user's affiliate data. Marketing
  artefacts must never present invented figures as real client data.

If you cannot honour the boundary for a given item, do not act on that item.
Record it under the brief's "Blocked" section and move on.

## What one daily run does

Run these steps in order. Each function loop (customer service, onboarding,
marketing) has its own skill with the detail; this skill is the spine that
invokes them and collects their output into one place.

### Step 1 — collect pending approvals

Gather everything already prepared and waiting for the operator, so the brief
is the single place to clear the queue.

- **Draft pull requests.** List open PRs authored by the automation on
  `bobberrisford/affiliatemcp` (GitHub MCP `list_pull_requests`, then
  `pull_request_read` for status and CI). Note each PR's title, what it changes,
  whether CI is green, and whether it is blocked on a decision.
- **Buffer drafts.** List draft posts (Buffer MCP `list_posts`, filtered to
  draft status) per connected channel. Note the channel, the hook line, and the
  scheduled-for date if one is proposed.
- **Gmail drafts.** List drafts prepared this cycle (Gmail MCP `list_drafts`).
  Note the recipient class (support reply, onboarding, re-engagement) and the
  subject. Never include full customer email addresses or affiliate figures in
  the brief; refer to threads by subject and a short opaque handle.

### Step 2 — collect new feedback

- **GitHub issues.** List issues opened or updated since the last run
  (`list_issues` / `search_issues`, `since` = last run timestamp from
  `ops/RUNLOG.md`). Bucket by the issue templates in `.github/ISSUE_TEMPLATE/`
  (`bug`, `setup-stuck`, `network-broken`, `network-api-changed`,
  `new-network-request`, `new-skill-idea`). Hand each to the `customer-support`
  skill for triage; collect back its proposed reply or its escalation.
- **Support inbox.** New threads in the connected support mailbox (Gmail MCP
  `search_threads`). Same handoff to `customer-support`.

Feedback is the operator's core job ("read feedback and make changes"), so this
section is the heart of the brief. Group it, do not drown it: one line per item
with the proposed next action.

### Step 3 — collect metrics

Report only metrics you can read honestly this run. Do not invent numbers and
do not imply precision you do not have.

- Public repository signal: open-issue count, PRs awaiting review, stars and
  forks delta since the last run.
- Public distribution signal where reachable (npm downloads, registry listing
  status).
- Hosted product signal (sign-ups, active accounts, MRR) **only** if a
  read-only path has been connected. If it has not, say "hosted metrics: not
  connected" rather than guessing. See the onboarding loop for the accepted
  read path.

### Step 4 — run the function loops

Invoke each loop skill and collect its prepared output (all draft-only):

- `customer-support` — triage feedback from Step 2, draft grounded replies,
  propose labels, escalate the hard ones.
- `onboarding-loop` — first-value and activation drafts for new sign-ups, and
  re-engagement drafts for dormant accounts. (This is the lifecycle-email loop,
  not the agency `client-onboarding` strategy skill.)
- `affiliate-mcp-marketing` with `affiliate-mcp-design` — the weekly card and
  post as Buffer drafts (on the marketing cadence, not every day), directory
  and registry listing drafts, lead-magnet drafts.

A loop that has nothing to prepare this run contributes nothing to the brief.
Silence is a valid, good outcome. Do not manufacture work to fill the brief.

### Step 5 — assemble the daily brief

Render the brief from `ops/brief-template.md`. Deliver it to the operator as a
single rendered artifact (or the terminal, when run interactively). The brief
has four sections and nothing else:

1. **Approvals waiting** — every draft from Step 1, grouped by channel, each a
   one-line summary with a direct link and a clear "approve / edit / skip".
2. **Feedback** — every inbound item from Step 2 with its proposed action.
3. **Metrics** — the honest signal from Step 3.
4. **Shipped since yesterday** — what merged, sent, or posted after the
   operator approved it last cycle (read from `ops/RUNLOG.md` and the systems).

Then a short **Blocked** list for anything you could not prepare and why.

Keep it scannable. The operator should be able to read it in a couple of
minutes and clear the approval queue with single decisions.

### Step 6 — append to the run log

Append one line to `ops/RUNLOG.md` in the documented format: timestamp, counts
(approvals surfaced, feedback items, drafts prepared by loop), and anything
blocked. This is the durable trail and the source of the "last run" timestamp
for the next cycle. Committing the run-log line is the only write this skill
makes to the repository, and it goes through the normal draft-PR gate like any
other change; never push directly to a protected branch.

## Scheduling

This skill is built to run unattended once per day on the environment's
scheduled routines, the same mechanism behind the existing
`weekly-hosted-plg-launch` routine. The recommended routine:

- fires each morning in the operator's timezone;
- runs Steps 1 to 6;
- delivers the brief and stops.

Creating the routine, connecting the Buffer/LinkedIn account and the support
inbox, and connecting any hosted read path are operator-only rollout steps, the
same boundary the phase-0 checklist already draws for accounts, secrets, and
publishing. This skill assumes those connections exist and degrades honestly
(saying "not connected") when they do not.

## Constraints

- One brief per run. Do not send separate pings per item unless the operator
  has asked for per-item delivery.
- Prepare-and-approve only. If a future decision record promotes a specific
  channel to auto-send, this skill is updated to honour that record and only
  that channel. Until then, everything is a draft.
- Ground every prepared artefact in the repo's own truth (`docs/`,
  `docs/findings/`, `REPORT.md`, the launch bundles). Do not invent product
  facts, figures, or capabilities.
- Never expand the product's MCP tool surface. This skill uses existing tools
  and the connected channels only.
Repository
7stars
1forks
View on GitHub
Details
DiscoveredOct 14, 2026
Last UpdatedSep 21, 2026
Quality Score
40/100

Related Skills

More writing & content skills you might like