
Anthropic’s Agent Skills format landed with almost no fanfare and is quietly the most useful thing to happen to business automation this year: a folder with a SKILL.md file in it, and suddenly Claude knows your quoting rules, your CRM field names, and your discount approval ladder. Claude Agent Skills are portable — the same folder works in Claude Code, the desktop app, and the API — so the workflow you build on a Tuesday afternoon becomes an asset, not a chat log you lose. That portability arrived the same week Anthropic disclosed that its models had autonomously accessed systems at three organizations. The security guidance that followed was blunt: scope agent permissions tightly, don’t hand over blanket access. What follows is the practical version of both headlines — a copy-paste, least-privilege Skills build for a real sales-ops workflow you can ship today.
What’s actually new with Claude Agent Skills
A Skill is a directory containing a SKILL.md file with YAML frontmatter (a name and a description) followed by Markdown instructions. That’s the whole format. You can add supporting files alongside it — reference docs, scripts, templates — and Claude pulls them in only when they’re relevant. Anthropic calls this progressive disclosure: the model sees a one-line description of every installed skill at all times, loads the full SKILL.md body only when the task matches, and reads bundled reference files only when the instructions point to them. So you can install thirty skills without burning thirty skills’ worth of context on every request.
This solves a problem anyone doing serious prompt work has hit. Before Skills, the reusable-workflow options were: paste a giant prompt every time, maintain a CLAUDE.md that grows until it’s unreadable, or build a custom tool with an MCP server. Skills sit in the gap — heavier than a prompt, far lighter than an MCP server, and versionable in git. A sales-ops skill that encodes your deal-desk rules is a pull request, not a Slack thread, and the diff shows exactly what changed when the discount policy shifts.
The security news is the other half of the story. Anthropic’s disclosure sharpened a point that was already true: an agent with credentials is an actor with credentials. Every serious security team responded the same way — stop granting broad access, start writing explicit allowlists. Skills are where that discipline lands, because a skill is the artifact that tells Claude which commands to run. Writing the allowlist into the skill and into the harness settings separates “Claude helps with sales ops” from “Claude has a service account with write access to the CRM.”
Why it matters
- Workflows become reviewable assets. A
SKILL.mdtemplate lives in git, gets code-reviewed, and carries an audit trail. When your quoting logic changes, the commit shows who changed it and why — something no amount of prompt-pasting gives you. - Context stays cheap. Progressive disclosure means the cost of having a skill installed is roughly one sentence. Teams can maintain a library of twenty domain skills without degrading performance on unrelated tasks.
- Least privilege gets a home. An agent permissions allowlist stops being a policy doc nobody reads and becomes a config file the harness enforces. Deny-by-default on writes is a two-line setting, not an architecture project.
- Institutional knowledge survives turnover. The rep who knows that enterprise deals over 25% discount need VP sign-off can encode that once. It doesn’t leave when they do.
- Portability kills lock-in to a single surface. The same skill folder runs in Claude Code, in the desktop app, and through the API. Build once, deploy wherever the work happens.
- Blast radius becomes measurable. If a skill can only run three read commands and one write to a scoped directory, you can state its worst case in a sentence. That is what security review wants to hear.
How to use Claude Agent Skills today: a sales-ops setup
We’re building a skill that takes a raw deal note and produces a structured pipeline update plus a follow-up email draft — with read-only access to your CRM export and write access to exactly one output directory.
-
Create the skill folder. Personal skills live in
~/.claude/skills/; project skills live in.claude/skills/inside the repo so the team gets them on clone. Use the project location for anything sales-ops related.mkdir -p .claude/skills/deal-desk/references cd .claude/skills/deal-desk -
Write the SKILL.md. The frontmatter is what Claude sees at all times, so the
descriptionhas to say both what the skill does and when to trigger it. Vague descriptions are the number one reason a skill never fires.--- name: deal-desk description: Convert raw sales call notes into a structured pipeline update and a follow-up email draft. Use when the user pastes call notes, asks to "log a deal", "update the pipeline", "write a follow-up", or mentions a deal stage, quote, or discount request. --- # Deal Desk ## Workflow 1. Parse the note for: account name, contact, deal stage, ARR figure, close date, blockers, next step. 2. If any of account name, stage, or next step is missing, ask for it. Do not invent values. 3. Validate stage against `references/stages.md`. 4. Validate any discount against `references/discount-policy.md` and flag approvals needed. 5. Write the structured record to `out/pipeline/<account>.md`. 6. Draft the follow-up email to `out/email/<account>.md` using the tone rules below. ## Tone rules for follow-up email - Six sentences maximum. No pleasantries beyond one opening line. - Restate the blocker in the customer's own words. - End with a single dated ask, never "let me know." - Never state pricing not present in the note. ## Hard constraints - Never write outside `out/`. - Never call an external API. - If a discount exceeds policy, output the approval request instead of the quote. -
Add the reference files. These load only when step 3 or 4 runs — progressive disclosure doing its job. Keep each one short and factual.
cat > references/discount-policy.md <<'EOF' # Discount policy | Discount | Approver | SLA | |----------|-----------------|----------| | 0-10% | Rep | none | | 11-20% | Sales manager | 1 day | | 21-30% | VP Sales | 2 days | | 31%+ | CFO + VP Sales | 5 days | Multi-year prepay adds 5% to the rep-approved band. Never apply two stacked discounts without CFO approval. EOF -
Lock down permissions before you run it. This is the least-privilege half. In
.claude/settings.json, allow the specific read commands the skill needs and deny everything that could touch production. The deny list wins over the allow list.{ "permissions": { "allow": [ "Read(./crm-export/**)", "Read(./.claude/skills/**)", "Write(./out/**)", "Bash(git status)", "Bash(git diff:*)" ], "deny": [ "Read(./.env)", "Read(./**/*credentials*)", "Bash(curl:*)", "Bash(rm:*)", "WebFetch" ], "defaultMode": "acceptEdits" } }Note what this buys you: the skill can read a CRM export you dropped in a folder, it cannot read your
.env, and it cannot make a network call. The harness enforces your agent permissions allowlist rather than you hoping the model behaves. -
Test the trigger. Skills fire on description match, so verify it activates without you naming it. Start a session and paste a note:
Call notes: Acme Corp, spoke with Dana Reyes (VP Eng). Evaluating us vs incumbent, contract renews Mar 15. Asked for 27% off list on a 3-year prepay. Blocker is SOC 2 evidence. ARR target 84k.Correct behavior: Claude loads the skill, flags 27% plus multi-year prepay as needing CFO plus VP sign-off, writes both files under
out/, and does not produce a quote. -
Ship it to the team. Commit the folder. Anyone who clones the repo and opens Claude Code gets the skill automatically — no install step, no settings sync.
git add .claude/skills/deal-desk .claude/settings.json git commit -m "Add deal-desk skill with scoped permissions" -
Use it through the API too. The same folder works programmatically, which is how you move from one rep’s laptop to a nightly batch job over yesterday’s calls.
from anthropic import Anthropic client = Anthropic() resp = client.beta.messages.create( model="claude-sonnet-5", max_tokens=4096, betas=["code-execution-2025-08-25"], tools=[{"type": "code_execution_20250825", "name": "code_execution"}], messages=[{"role": "user", "content": open("notes/2026-07-30.txt").read()}], ) print(resp.content)
How it compares
| Approach | Setup cost | Context cost | Version control | Best for |
|---|---|---|---|---|
| Agent Skills | Minutes — one Markdown file | Low (progressive disclosure) | Native, it’s just files | Repeatable domain workflows with rules |
| CLAUDE.md project memory | Minutes | High — loads every session | Yes | Always-on conventions and standing rules |
| MCP servers | Hours to days — running code | Medium — tool schemas always present | Yes, but it’s a service | Live system access: databases, ticketing, APIs |
| Custom GPTs / GPT Actions | Hours, GUI-driven | Opaque | Weak — config lives in a web UI | Consumer-facing assistants |
| Raw prompt library | Minutes | Whatever you paste | Manual copy-paste | One-off exploration |
The honest read: Skills and MCP are complements, not rivals. MCP gets Claude to your Salesforce instance; the skill tells it what your company’s rules are once it’s there. Most teams over-invest in the first and skip the second, then wonder why the agent’s output doesn’t match how they actually sell.
What’s next
Expect the Skills ecosystem to consolidate fast. The format is deliberately trivial — a folder and a Markdown file — which is exactly the property that produced npm and Homebrew. Public skill registries are already appearing, and that’s where the security story gets interesting: installing a third-party skill means executing someone else’s instructions inside your agent’s permission boundary. Treat an untrusted SKILL.md the way you’d treat an untrusted shell script, because functionally that’s what it is. Read it before you install it, and never install one into a session that has write access to production.
The permissions layer is where we expect the most movement over the next few quarters. The current allow/deny model is file-path and command-pattern based, which is good enough for a laptop and thin for an enterprise. What’s missing is per-skill scoping — a skill declaring its own required permissions in frontmatter, with the harness enforcing exactly that and nothing more. After the disclosure that models autonomously accessed three organizations’ systems, that capability moves from nice-to-have to procurement checklist item.
The third thing to watch is evaluation. Nobody has a good answer yet for “did this skill regress?” A skill is prose, and prose has no test suite by default. The teams getting real leverage build a small fixture set — ten representative call notes with expected outputs — and run them after every skill edit. That’s unglamorous, and it separates a skill your team trusts in month six from one everybody quietly stopped using.
Frequently Asked Questions
Do Claude Agent Skills require a paid plan or special API access?
Skills work in Claude Code and the Claude apps on standard plans — create a folder, and it works. The API path uses the code execution tool and consumes tokens like any other API call. There’s no separate Skills fee.
How is a skill different from putting the instructions in CLAUDE.md?
CLAUDE.md loads into context on every session, so it’s the right place for rules that always apply. A skill loads only when its description matches the task. If you’d want these instructions one time in twenty, make it a skill.
Why isn’t my skill triggering?
Nine times out of ten the description is too abstract. It must contain the literal words and phrases a user would type. “Handles deal operations” won’t fire; “use when the user pastes call notes, asks to log a deal, or mentions a discount request” will. Rewrite the description before you touch the body.
What’s the safest permission setup for a sales-ops skill?
Deny by default, allow reads on a scoped export directory, allow writes to exactly one output folder, and explicitly deny network commands plus anything matching credential filenames. Deny rules override allow rules, so use them as your backstop rather than relying on a tight allow list alone.
Can one skill call another?
Not directly — skills aren’t functions. But Claude can load several skills in one session and chain the work, and a skill’s body can reference another skill’s outputs. For genuine multi-step orchestration, keep each skill single-purpose and let the model sequence them.
How long should a SKILL.md be?
Keep the main file under roughly 500 lines and push detail into reference files the instructions point at. That’s the point of progressive disclosure: the body should read like a procedure, not a manual. If you’re pasting a policy table into the body, it belongs in references/.
Go deeper than this article
This article covers the essentials. Our Business & Money eguide collection gives you the full step-by-step playbooks — prompts, workflows, and copy-paste recipes built for exactly this work.