Business Operations Skills
alirezarezvani/claude-skills
A skill your agent uses when running, diagnosing, or designing internal business operations — process documentation, vendor SLAs, capacity planning, internal comms, SOP/runbook authoring…
Operator approval contract with internal filing notices for agent-drafted outbound messages, hashed drafts, epoch-keyed decisions, durable delivery claims and receipts, and a pre-draft baseline gate.
$ npx skills add affaan-m/ECC --skill operator-approval-loop -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install affaan-m/ECC operator-approval-loop --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/operator-approval-loop .claude/skills/operator-approval-loop && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "operator-approval-loop" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/operator-approval-loop into .claude/skills/operator-approval-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operator-approval-loop", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/affaan-m/ECC/tree/main/skills/operator-approval-loopType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add affaan-m/ECC --skill operator-approval-loop -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install affaan-m/ECC operator-approval-loop --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/operator-approval-loop .agents/skills/operator-approval-loop && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "operator-approval-loop" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/operator-approval-loop into .agents/skills/operator-approval-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operator-approval-loop", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add affaan-m/ECC --skill operator-approval-loop -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install affaan-m/ECC operator-approval-loop --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/operator-approval-loop .cursor/skills/operator-approval-loop && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "operator-approval-loop" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/operator-approval-loop into .cursor/skills/operator-approval-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operator-approval-loop", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/affaan-m/ECC.git --path skills/operator-approval-loop--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add affaan-m/ECC --skill operator-approval-loop -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install affaan-m/ECC operator-approval-loop --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/operator-approval-loop .gemini/skills/operator-approval-loop && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "operator-approval-loop" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/operator-approval-loop into .gemini/skills/operator-approval-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operator-approval-loop", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install affaan-m/ECC operator-approval-loopInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add affaan-m/ECC --skill operator-approval-loop -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/operator-approval-loop .github/skills/operator-approval-loop && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "operator-approval-loop" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/operator-approval-loop into .github/skills/operator-approval-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operator-approval-loop", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add affaan-m/ECC --skill operator-approval-loop -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install affaan-m/ECC operator-approval-loop --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/operator-approval-loop .opencode/skills/operator-approval-loop && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "operator-approval-loop" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/operator-approval-loop into .opencode/skills/operator-approval-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "operator-approval-loop", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
operator-approval-loopOperator approval contract with internal filing notices for agent-drafted outbound messages, hashed drafts, epoch-keyed decisions, durable delivery claims and receipts, and a pre-draft baseline gate.
Operator Approval Loop is an agent skill from affaan-m/ECC. Operator approval contract with internal filing notices for agent-drafted outbound messages, hashed drafts, epoch-keyed decisions, durable delivery claims and receipts, and a pre-draft baseline gate. Use when an agent drafts messages to external counterparties and a human operator must approve, reject, or steer each send before it leaves.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/approval_claims.py`).
The repository describes itself as: The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ef648e0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Operator Approval Loop loads about 3.3k tokens when it runs, and up to ~8.8k if it reads all its reference files. Until then it costs about 91 tokens; SKILL.md has 1,660 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from affaan-m/ECC at commit ef648e0, republished under its MIT licence (© affaan-m). 1,660 words, ~3,281 tokens.
.claude/skills/operator-approval-loop/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.An agent that talks to external counterparties should never send on its own judgment and should keep the operator informed internally. This skill defines the contract: every outbound draft is filed as an obligation, an operator decides on the exact text, and a delivery ledger proves what went out.
| Object | Meaning |
|---|---|
| Obligation | One thing we owe a counterparty. Status moves drafted, then approved or rejected, then sent. Carries direction, counterparty, channel, and an updated_at epoch. |
| Draft | Sidecar row holding the exact draft text, a sha256 of that text, origin coordinates (platform, channel, thread, user), and priority (P0 to P3). One per obligation, replaced on re-file. |
| Decision | An operator's approve or reject, recorded with the operator id, a nonce, and the draft epoch it was made against. |
| Approval snapshot | Immutable text, hash, epoch and destination recorded by the already-authorized decision writer. Missing snapshots cannot grant dispatch. |
| Claim | Durable reservation with a random token and state; at most one active claim per obligation. |
| Delivery | Ledger row proving one send or notice for one (obligation, decision) pair. |
The reference schema is in references/approval-ledger.sql.
updated_at. That advance is the epoch rotation: any
decision keyed to the old epoch can no longer release the new text.
Otherwise insert a new obligation with status drafted.If a verified internal destination is unavailable, retain the filing result in the internal tool result or operator surface. Never fall back to an external or unknown origin. A tool result exposed to outsiders is not an internal surface.
Filing a draft does not authorize an external response. Any policy-permitted clarifying question or neutral response is a separate outbound decision, subject to the existing mention, channel, draft-only, frozen and never constraints in counterparty-channel-discipline. It must not disclose internal approval metadata.
Before any draft is filed, query the current baseline for the counterparty (a temporal ledger, contract store, or CRM):
force_despite_signed_contract lets the filing through
and stamps [BASELINE_OVERRIDE_SIGNED_CONTRACT] into the draft context.[BASELINE_CHECK_UNAVAILABLE]. The panel sees that the guard was off.
Failures never silently disable the gate.[BASELINE FACTS: ...] digest so the draft lands with current truth.The approval panel lists obligations with status drafted and direction
we_owe_them. Approve or reject writes a decision row carrying the draft
epoch (draft_updated_ts) and flips the obligation status in the same
transaction. A decision whose epoch does not match the current updated_at
is stale and must not release anything.
For an already-authorized approve decision, the same transaction inserts an
immutable obligation_approval_snapshots row: decision and obligation IDs,
current draft epoch, exact text and SHA-256, platform/channel/thread, and kind
draft_sent. The decision writer must establish authorization before writing;
the reference never authenticates an operator or manufactures a decision.
Automatic approval policy is not enabled or expanded by the reference.
Legacy decisions without snapshots require explicit reconciliation or a new
approval; never backfill permission from the current mutable draft.
The SQLite reference is references/approval_claims.py. It grants dispatch permission but never calls transport. Use an existing local reference database initialized from the SQL fixture; the module does not apply schema or production migrations. Only a trusted decision writer may populate approval records. All writers must enable foreign keys and recursive triggers and honor the schema guards; administrative database tampering is outside this model.
claim() opens
its own BEGIN IMMEDIATE transaction, validates the current approved epoch,
exact text, computed SHA-256 and full destination against the snapshot, and
inserts a unique claim before returning its token. A conflict stops the worker
before transport. Completed receipts cannot be claimed again.begin_dispatch() revalidates the binding and atomically changes claimed
to dispatching using the token. Only its winning caller receives
the exact draft_text and destination after commit. Never regenerate text, reread a
mutable sidecar for transport, or reuse the payload for another attempt.
A nested caller transaction is refused; permission cannot depend on a later
caller commit. No database transaction remains open across transport.complete(), which atomically records
the delivery coordinate, marks the claim delivered and flips the obligation
to sent. Identical completion is a no-op; conflicting coordinates fail.
The receipt UNIQUE key deduplicates records, not prior external effects.mark_unknown() records uncertainty.
Unknown claims never expire, reopen, auto-retry or allow another decision for
that obligation to bypass them. A trusted caller may use reconcile() with
confirmed successful coordinate and evidence; the module does not verify
that evidence. An absent receipt is not proof of non-delivery.The guarantee is one automatic dispatch attempt per approved decision, not exactly-once external delivery. A crash after begin-dispatch but before transport can leave zero sends and a held claim. Releasing an unknown outcome for a new attempt would require fencing the original executor and verifying provider semantics; this reference deliberately provides no such retry operation.
| Claim state | Allowed next states |
|---|---|
| claimed | dispatching or cancelled before dispatch |
| dispatching | delivered or unknown |
| unknown | delivered through trusted reconciliation only |
| delivered, cancelled | terminal; decision key cannot be reused |
While a claim is active, database guards freeze obligation, draft and decision writes, including replacements. Snapshots and claims cannot be erased. Cancel a claimed operation with its token before re-filing; the stale token then grants nothing. After dispatch begins, hold new edits or revocation for reconciliation. This serializes changes instead of pretending to recall an in-flight operation.
Rejected decisions and legacy rows without draft sidecars/snapshots never enter
this external draft-send path. Report them on the internal operator surface for
manual handling. Internal receipt footers remain internal:
approved by <operator> · receipt <decision_id> · draft sha256 <prefix>.
Never alter already-approved external text to append workflow metadata.
Focused local validation uses temporary databases, separate connections and a
simulated attempt counter, not a provider or real message:
python3 -m unittest discover -s tests/skills -p 'test_approval_delivery_claims.py'.
The tests require Python 3.11+ with SQLite serialization support; the reference
uses only the standard library. The existing desk-pattern contract checks remain
a separate compatibility check.
A draft may carry auto_send_after (epoch seconds). A sweep approves drafts
whose deadline passed with no decision, recording operator auto-ttl, then
delivery proceeds through the normal path. Operator actions always win: a
decision flips status before the sweep sees it, and a re-file rotates the
epoch and moves or clears the deadline. The sweep re-checks status and epoch
inside the write transaction so a race resolves as a no-op. Drafts without a
deadline stay hard-gated forever.
A draft can name the inbound obligation it answers (signal_obligation_id).
This is the only truthful link for latency measurement (inbound signal to
drafted response) and lets the SLA scan treat that inbound item as answered.
Reject the filing if the referenced row does not exist.
file_request(
draft="Thanks, we can hold the slot until Friday. Which start date works?",
counterparty="acme-supplier",
context="reply to delivery window question",
origin_platform="slack", origin_channel="#acme-shared",
origin_thread="1712345678.000100", priority="P1",
signal_obligation_id=412)
-> {obligation_id: 431, draft_sha256: "9f2c...", refiled: false}The configured, verified internal ops destination sees:
Draft filed for approval (P1, sha 9f2c8a1b). Waiting on operator.
The counterparty-visible origin channel receives no filing notice. If no verified
internal destination is available, the receipt stays in the internal tool result
or operator surface, with no external fallback.
The operator asks for a shorter draft. Filing again for the same
(counterparty, channel) returns refiled: true, the sidecar text and hash
change, and updated_at advances. An approve clicked on the old panel row
carries the old epoch and is ignored.
DeskApprovalError: baseline gate refused this draft: the ledger shows a
signed contract for 'acme-supplier'. Evidence: master agreement executed
2026-08-14. Recommendation: do not ask. Re-file with
force_despite_signed_contract=true if this is genuinely a new thread.Confirmed for Friday, start date 2026-09-08.
approved by operator-a · receipt 118 · draft sha256 9f2c8a1b2d3e4f50© affaan-m, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files (references) in skills/operator-approval-loop of affaan-m/ECC.
Open the folder on GitHubat commit ef648e0
Operator Approval Loop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Operator Approval Loop this skillaffaan-m/ECC | 275k | — | ~3.3k | Automated safety check: Pass | MIT | |
| Business Operations Skillsalirezarezvani/claude-skills | 28k | — | ~2.3k | Automated safety check: Pass | MIT | |
| Internal Comms Anthropicsickn33/agentic-awesome-skills | 47k | 1 repos | ~702 | Automated safety check: Pass | Apache-2.0 | |
| Internal Commsalirezarezvani/claude-skills | 28k | — | ~3.4k | Automated safety check: Pass | MIT | |
| Draftanthropics/claude-for-legal | 9.6k | 3 repos | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Internal Communicationsickn33/agentic-awesome-skills | 47k | 1 repos | ~3.4k | Automated safety check: Pass | MIT |
alirezarezvani/claude-skills
A skill your agent uses when running, diagnosing, or designing internal business operations — process documentation, vendor SLAs, capacity planning, internal comms, SOP/runbook authoring…
sickn33/agentic-awesome-skills
Compatibility alias for internal-comms: draft status updates, newsletters and FAQs from approved sources.
alirezarezvani/claude-skills
A skill your agent uses when a Head of People Ops, BizOps lead, or Internal Communications owner needs to draft and sequence an internal-only change-management communication — a re-org announcement…
anthropics/claude-for-legal
First draft of a common clinic document — practice-area templates (asylum applications, eviction answers, protective order petitions, demand letters), jurisdiction-aware formatting, explicitly a…
sickn33/agentic-awesome-skills
Internal communication log: title, type, date, department, host and attendees, agenda, action items, follow-up date, meeting link and delivery status.
davila7/claude-code-templates
Intelligently organizes files and folders by understanding context, finding duplicates, and suggesting better organizational structures.
affaan-m/ECC
Ingest, index, search, edit, and monitor video and audio with the VideoDB Python SDK — upload from files, URLs, or RTSP feeds, build spoken and scene indexes with timestamped search and playable…
affaan-m/ECC
Scans installed skills for principles that recur across them and proposes rule-file changes: append, revise, add a section, create a file or leave as covered.
affaan-m/ECC
Builds DRAFT counterparty agreements from one markdown template and a small JSON spec per party, with clauses picked by the party's role.
affaan-m/ECC
Measures whether agents actually follow a skill, rule or agent definition by generating scenarios at three strictness levels and scoring tool-call traces.
affaan-m/ECC
Instinct-based learning system that observes sessions via hooks, creates atomic instincts with confidence scoring, and evolves them into skills/commands/agents.
affaan-m/ECC
Adds one optional external Codex critique that tries to break a council's decision draft, sent to OpenAI only after you consent.
Operator approval contract with internal filing notices for agent-drafted outbound messages, hashed drafts, epoch-keyed decisions, durable delivery claims and receipts, and a pre-draft baseline gate. Operator Approval Loop is an agent skill from affaan-m/ECC. Operator approval contract with internal filing notices for agent-drafted outbound messages, hashed drafts, epoch-keyed decisions, durable delivery claims and receipts, and a pre-draft baseline gate.
Operator Approval Loop fits situations like: an agent drafts messages to external counterparties and a human operator must approve; steer each send before it leaves.
Run `npx skills add affaan-m/ECC --skill operator-approval-loop -a claude-code`. Or copy the skill folder (skills/operator-approval-loop in affaan-m/ECC) into .claude/skills/operator-approval-loop in your project. Claude Code loads it when a task matches its description.
Run `npx skills add affaan-m/ECC --skill operator-approval-loop -a codex`. Or copy the skill folder (skills/operator-approval-loop in affaan-m/ECC) into .agents/skills/operator-approval-loop in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add affaan-m/ECC --skill operator-approval-loop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/operator-approval-loop, .gemini/skills/operator-approval-loop, .github/skills/operator-approval-loop and .opencode/skills/operator-approval-loop in your project.
Going by SKILL.md and its folder, Operator Approval Loop needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Operator Approval Loop is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Operator Approval Loop: Business Operations Skills (alirezarezvani/claude-skills, 28k stars), Internal Comms Anthropic (sickn33/agentic-awesome-skills, 47k stars), Internal Comms (alirezarezvani/claude-skills, 28k stars) and Draft (anthropics/claude-for-legal, 9.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
affaan-m (a GitHub user) maintains it in affaan-m/ECC, which has 275,023 GitHub stars. The repository holds 645 skills in this directory. The repository was last updated on October 5, 2026.
Source: affaan-m/ECC on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.