Garden Inbox
paperclipai/paperclip
Scan a Paperclip user's Mine inbox, classify reversible archive candidates, request checkbox confirmation, and archive only accepted selections.
OPS on-demand: This skill should be used when the user asks to "desk sweep", "open decisions", or…
$ npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-desk --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/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .claude/skills && cp -r skills-src/claude-ops/skills/ops-desk .claude/skills/ops-desk && 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 "ops-desk" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desk into .claude/skills/ops-desk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-desk", 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/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-deskType 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 Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-desk --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .agents/skills && cp -r skills-src/claude-ops/skills/ops-desk .agents/skills/ops-desk && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ops-desk" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desk into .agents/skills/ops-desk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-desk", 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 Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-desk --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/claude-ops/skills/ops-desk .cursor/skills/ops-desk && 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 "ops-desk" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desk into .cursor/skills/ops-desk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-desk", 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/Lifecycle-Innovations-Limited/claude-ops.git --path claude-ops/skills/ops-desk--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 Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-desk --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/claude-ops/skills/ops-desk .gemini/skills/ops-desk && 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 "ops-desk" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desk into .gemini/skills/ops-desk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-desk", 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 Lifecycle-Innovations-Limited/claude-ops ops-deskInstalls 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 Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .github/skills && cp -r skills-src/claude-ops/skills/ops-desk .github/skills/ops-desk && 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 "ops-desk" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desk into .github/skills/ops-desk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-desk", 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 Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Lifecycle-Innovations-Limited/claude-ops ops-desk --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Lifecycle-Innovations-Limited/claude-ops.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/claude-ops/skills/ops-desk .opencode/skills/ops-desk && 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 "ops-desk" agent skill from https://github.com/Lifecycle-Innovations-Limited/claude-ops/tree/main/claude-ops/skills/ops-desk into .opencode/skills/ops-desk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops-desk", 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.
ops-deskOPS on-demand: This skill should be used when the user asks to "desk sweep", "open decisions", or…
Ops Desk is an agent skill from Lifecycle-Innovations-Limited/claude-ops. OPS on-demand: This skill should be used when the user asks to "desk sweep", "open decisions", or…
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation, covering Email management. The repository describes itself as: Business operating system for Claude Code — 57 skills, 21 agents, smart daemon. Unified inbox (WhatsApp/Email/Slack/Telegram), autonomous PR merge, full-AWS monitoring, revenue… The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ee9c784. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadGrepGlobSkillAgentWorkflowAskUserQuestionTeamCreateSendMessage…and 11 more on the same allowed-tools line.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
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.
Ops Desk loads about 2.9k tokens when it runs. Until then it costs about 27 tokens; SKILL.md has 932 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Grep, Glob, Skill, Agent, Workflow, AskUserQuestion, TeamCreate, SendMessage, TaskCreateAutomated 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 Lifecycle-Innovations-Limited/claude-ops at commit ee9c784, republished under its MIT licence (© Lifecycle-Innovations-Limited). 932 words, ~2,917 tokens.
.claude/skills/ops-desk/SKILL.md (or your agent's skills folder).Load ops-rules before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If AskUserQuestion / Workflow are missing, follow Rule 10 in ops-rules (Hermes: numbered options / two-turn Telegram card; delegate_task).
Goal: everything sitting on the owner's desk — pending decisions, staged drafts awaiting approval, unpaid invoices to chase, documents to sign, blocked issues needing an owner action — becomes a ranked queue of ready-to-approve action packages, then gets worked down one item at a time. The success metric is the same spirit as inbox-zero: an empty desk, with every remaining item either executed, decided, or parked with an explicit reason and a reminder.
/ops:ops-inbox — fresh inbound comms (who wrote me, what needs a reply)./ops:ops-desk — the standing backlog (what am I blocking, what decision is waiting on
me, what draft is staged, what must I sign/pay/approve). Run it after an inbox pass, or
whenever the owner says "what's left / get this off my desk".paperclip issue list -C <company-id> for each company in
${CLAUDE_PLUGIN_DATA_DIR}/preferences.json → paperclip.companies[], falling back to
paperclip company list. Keep status=blocked|todo|in_progress issues whose
title/description implies an OWNER action — matcher: decision, owner decision,
approve, sign, pay, chase, staged, awaiting owner, Rule-6.mcp__linear__list_issues filtered to the owner as assignee, when
Paperclip is absent.gh issue list --assignee @me as last resort./ops:ops-inbox pass (run bin/ops-inbox-scan with OIS_NO_REFRESH=1 if
one already ran this session).{key, refs: [issue identifiers], hint} where hint states the
concrete question to answer AND what must be verified (never trust the issue title
alone).Invoke the Workflow tool with the script below and args = [items]. Hard rules the
script encodes:
status_summary.
An item that turns out already handled comes back as action_type=already_done with
evidence.resumeFromRunId — completed agents replay from cache.export const meta = {
name: 'desk-sweep',
description: 'Fan out read-only context agents over open decision/action items and return ready-to-approve action packages',
phases: [
{ title: 'Gather', detail: 'one read-only agent per item, batches of 3' },
{ title: 'Synthesize', detail: 'order into an approval queue: quick wins first' },
],
}
const ACTION_SCHEMA = {
type: 'object', additionalProperties: false,
required: ['key', 'title', 'status_summary', 'recommendation', 'action_type'],
properties: {
key: { type: 'string' },
title: { type: 'string' },
status_summary: { type: 'string', description: '2-4 sentences: what this is, current state, evidence (dates/ids)' },
recommendation: { type: 'string', description: 'single concrete next action with an approvable default' },
action_type: { type: 'string', enum: ['send_email', 'send_whatsapp', 'decision', 'sign', 'pay', 'chase', 'info_only', 'archive', 'already_done'] },
draft: { type: ['object', 'null'], additionalProperties: false, properties: {
channel: { type: 'string', enum: ['email', 'whatsapp'] },
to: { type: 'string' }, cc: { type: 'string' }, subject: { type: 'string' },
body: { type: 'string', description: "FULL final text in the owner's voice + thread language" },
reply_to_message_id: { type: 'string' },
}},
decision_options: { type: 'array', items: { type: 'string' } },
blockers: { type: 'array', items: { type: 'string' } },
effort_minutes: { type: 'number' },
confidence: { type: 'string', enum: ['high', 'medium', 'low'] },
},
}
phase('Gather')
const ITEMS = (typeof args === 'string' ? JSON.parse(args) : args) || []
if (!ITEMS.length) throw new Error('desk-sweep needs args: [{key, refs, hint}]')
const CHUNK = 3
const packages = []
for (let i = 0; i < ITEMS.length; i += CHUNK) {
const batch = ITEMS.slice(i, i + CHUNK)
const res = (await parallel(batch.map(it => () =>
agent(
`You are a READ-ONLY desk-sweep context agent. You MUST NOT send, archive, pay, sign, ` +
`mark-read, or mutate ANYTHING — no mail sends, no POSTs to send/archive endpoints, no ` +
`tracker mutations. Read, search, and prepare only.\n\n` +
`ITEM key="${it.key}": ${it.hint}\nReferences: ${JSON.stringify(it.refs || [])}\n\n` +
`Gather context read-only, every shell command with an explicit timeout ` +
`("timeout --signal=TERM --kill-after=5s 30s <cmd>"): the task tracker record(s) for each ` +
`ref incl. comments; Gmail via gog (search then thread get -j; messages nest under ` +
`.thread.messages); the WhatsApp bridge store read-only via sqlite3 (merge a person's @lid ` +
`and @s.whatsapp.net chats; resolve names via contacts); local files if referenced.\n\n` +
`RULES: verify every load-bearing claim with an actual read; if already handled, return ` +
`action_type=already_done with evidence. Drafts must be the FULL final text in the owner's ` +
`voice and the thread's language, no AI tone. Decisions get 2-4 concrete options, ` +
`recommended first. Your final output MUST be the structured action package.`,
{ label: `gather:${it.key}`, phase: 'Gather', schema: ACTION_SCHEMA }
)
))).filter(Boolean)
packages.push(...res)
log(`gathered ${packages.length}/${ITEMS.length}`)
}
phase('Synthesize')
return await agent(
`You are READ-ONLY. Order these action packages into an approval queue: quick wins first ` +
`(low effort, high confidence, drafts ready), then decisions, then heavy/blocked. Drop ` +
`nothing; flag conflicts between packages.\n\n` + JSON.stringify(packages, null, 2) +
`\n\nReturn {queue: [same packages verbatim + "rank"], conflicts: [], stats: {total, ` +
`ready_drafts, decisions, already_done}}.`,
{ label: 'synthesize', phase: 'Synthesize',
schema: { type: 'object', additionalProperties: true, required: ['queue'] } }
)Per package, in rank order:
already_done / info_only → report in one line and close the item in the task
tracker (status → done). This is tracker-only closure: no mailbox, chat or file is
archived, moved or marked read. These are the free wins.archive → a package from a read-only agent is a recommendation, not owner
authorization. Show the item and the evidence, then archive it only after explicit
owner authorization for that item (e.g. via AskUserQuestion). Without it, leave the
thread where it is and report the item as still open.send_email / send_whatsapp / chase → exactly as in /ops:ops-inbox and
ops-rules Rule 6: one draft, one approval, one send, only through the host's
approved outbound gate. The gate shows the exact recipient and full latest text;
approval is the owner's native yes bound to those bytes, never a token, counter or
earlier approval. Re-read the live thread before sending, verify delivery on a
fresh read, then update the tracker. Archive only under explicit archive
authorization. If the gate refuses or does not support the channel, keep the item
owned with the exact diagnostic; never use a direct CLI, bridge or API sender.decision → present the options (recommended first) via AskUserQuestion, record
the outcome in the tracker, execute any follow-through it implies.sign / pay → prepare only: surface the exact link/document/amount and what to
check before signing/paying. NEVER sign or move money autonomously (Rule 5).Report: sent / decided / closed / still-open-with-reason. Schedule reminders
(CronCreate, non-outbound) for anything parked with a follow-up horizon. The task
tracker is the SSOT — every touched item gets its status updated there before the
summary prints.
If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set, use Agent Teams when fanning out
the gather workflow across independent item sources (Paperclip per company, Linear, GitHub,
Gmail/WhatsApp residue, etc.) in parallel. This enables:
Team setup (only when the flag is enabled, and only for genuinely parallel sources — a single-source desk sweep stays inline):
TeamCreate("ops-desk")
Agent(team_name="ops-desk", name="paperclip-gather", prompt="Gather owner-action items across all configured Paperclip companies")
Agent(team_name="ops-desk", name="linear-gather", prompt="Gather Linear items assigned to the owner")
Agent(team_name="ops-desk", name="inbox-residue", prompt="Gmail/WhatsApp NEEDS_REPLY + todo-labeled items from the last inbox pass")
Agent(team_name="ops-desk", name="github-chases", prompt="Open PRs awaiting owner review, blocked issues")After the team reports, the main session runs Step 3 (work the approval queue) on
the merged, ranked list. Each SendMessage from a gather agent is a structured action
package — never an outbound send (Rule 6: per-draft outbound approval gate stays in
the main session, not in the team).
If the flag is NOT set, fall back to standard fire-and-forget Agent subagents (one
per source) — same shape, slower wall-clock because no shared context.
© Lifecycle-Innovations-Limited, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in claude-ops/skills/ops-desk of Lifecycle-Innovations-Limited/claude-ops.
Open the folder on GitHubat commit ee9c784
Ops Desk 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 |
|---|---|---|---|---|---|---|
| Ops Desk this skillLifecycle-Innovations-Limited/claude-ops | 542 | — | ~2.9k | Automated safety check: Notes | MIT | |
| Garden Inboxpaperclipai/paperclip | 99k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Continuetelegramdesktop/tdesktop | 33k | 2 repos | ~9.4k | Automated safety check: Pass | GPL-3.0 | |
| Process Inboxtelegramdesktop/tdesktop | 33k | 1 repos | ~5.4k | Automated safety check: Pass | GPL-3.0 | |
| Process InboxTDesktop-x64/tdesktop | 3k | — | ~4.3k | Automated safety check: Pass | GPL-3.0 | |
| Career-Ops Gmail Lead Plugincareer-ops-hq/career-ops | 74k | — | ~233 | Automated safety check: Notes | MIT |
paperclipai/paperclip
Scan a Paperclip user's Mine inbox, classify reversible archive candidates, request checkbox confirmation, and archive only accepted selections.
telegramdesktop/tdesktop
Continue autonomous Telegram Desktop development from the shared ai-tdesktop repository.
telegramdesktop/tdesktop
Process the local ignored ai-tdesktop inbox into durable, independently testable Telegram Desktop task records while task execution worktrees remain active.
TDesktop-x64/tdesktop
Process the local ignored ai-tdesktop inbox into durable, independently testable Telegram Desktop task records while task execution worktrees remain active.
career-ops-hq/career-ops
Pulls job leads from a Gmail label into the career-ops pipeline, extracting job URLs from DMARC-passing emails and de-duplicating against existing leads.
Atomic-Mail/atomic-mail-agentic
Read and write email through the Atomic Mail from an AI agent.
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "ops dashboard", "pixel HQ", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "go to market", "GTM plan", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "klaviyo", "ads spend", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "tweet", "post to linkedin", or…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "yolo mode", "run the business today"…
Lifecycle-Innovations-Limited/claude-ops
OPS on-demand: This skill should be used when the user asks to "datadog", "APM alerts", or…
Categories
OPS on-demand: This skill should be used when the user asks to "desk sweep", "open decisions", or…. Ops Desk is an agent skill from Lifecycle-Innovations-Limited/claude-ops.
Ops Desk fits situations like: asks to desk sweep; tasks that involve Email management.
Run `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a claude-code`. Or copy the skill folder (claude-ops/skills/ops-desk in Lifecycle-Innovations-Limited/claude-ops) into .claude/skills/ops-desk in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a codex`. Or copy the skill folder (claude-ops/skills/ops-desk in Lifecycle-Innovations-Limited/claude-ops) into .agents/skills/ops-desk 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 Lifecycle-Innovations-Limited/claude-ops --skill ops-desk -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ops-desk, .gemini/skills/ops-desk, .github/skills/ops-desk and .opencode/skills/ops-desk in your project.
Going by SKILL.md and its folder, Ops Desk needs the command-line tools its instructions call (gh). Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, Skill, Agent, Workflow, AskUserQuestion, TeamCreate, SendMessage, TaskCreate, TaskUpdate, TaskList, CronCreate, mcp__gog__gmail_search, mcp__gog__gmail_read_thread, mcp__whatsapp__list_messages, mcp__whatsapp__archive_chat, mcp__linear__list_issues, mcp__linear__get_issue, mcp__linear__update_issue.
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Ops Desk is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ops Desk: Garden Inbox (paperclipai/paperclip, 99k stars), Continue (telegramdesktop/tdesktop, 33k stars), Process Inbox (telegramdesktop/tdesktop, 33k stars) and Process Inbox (TDesktop-x64/tdesktop, 3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Lifecycle-Innovations-Limited (a GitHub organization) maintains it in Lifecycle-Innovations-Limited/claude-ops, which has 542 GitHub stars. The repository holds 67 skills in this directory. The repository was last updated on October 10, 2026.
Source: Lifecycle-Innovations-Limited/claude-ops on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.