By Sagar Shankaran, Founder of CallSphere
Code-level patterns for Claude Cowork: single-responsibility skills, typed tool contracts, layered context, intent-named idempotent tools, and clean handoffs.
Key takeaways
The first Claude Cowork plugin a team ships usually works. The tenth one is where the trouble starts — skills overlap, two of them try to load on the same request, a tool returns data in a shape nothing downstream expects, and nobody can tell why the agent suddenly picks the wrong procedure. The fix is not more prompting; it's structure. The teams that scale Cowork cleanly treat skills, tools, and context as software components with contracts between them. This post lays out the reusable patterns that make that possible, with the actual shapes you'll write.
The most common scaling failure is the kitchen-sink skill — a single folder that triages, summarizes, drafts replies, and updates records. It works until two of its jobs need to behave differently, and then every edit risks the others. The reusable pattern is one skill per coherent responsibility, each with a description that does not overlap any other. When responsibilities are clean, the model's loading decision is unambiguous: only one description matches.
Concretely, split "handle tickets" into ticket-triage, ticket-summary, and ticket-reply-draft. Each is short, testable, and editable in isolation. The cost is more skill folders; the benefit is that a change to the reply drafter can't break triage, and the model never wavers between two similar descriptions.
When a tool returns free-form text, every skill that consumes it has to re-interpret prose, and small wording changes break downstream behavior silently. The durable pattern is to make tools return a fixed, documented shape and to write skills against that shape. Pin the contract once and reuse it everywhere.
// Tool contract: search_tickets always returns this shape
{
"tickets": [
{
"id": "OPS-4821",
"severity": "high", // one of: low|medium|high|critical
"sla_breached": false,
"summary": "string",
"updated_at": "2026-06-06T14:00:00Z"
}
],
"total": 1
}
Now ticket-triage can reliably group by severity and flag sla_breached without parsing sentences. When you later add a field, existing skills keep working because the contract only grew. This is the same discipline as a stable API response — the model is just another consumer of it.
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
flowchart TD
A["User request"] --> B["Match exactly one skill description"]
B --> C["Skill calls intent-named tool"]
C --> D["Tool returns typed contract"]
D --> E{"More work needed?"}
E -->|Same domain| C
E -->|Other domain| F["Handoff to sibling skill"]
E -->|Done| G["Compose answer from typed fields"]
Context is a budget, and the pattern that keeps agents sharp is layering it by stability and relevance. Stable, always-true instructions (tone, hard constraints, what the agent must never do) belong in the base context. Task-specific procedures belong in skills loaded only when relevant. Transient data — the actual ticket list — enters last and lowest. The closer something is to "true for every request," the higher and more permanent it should sit.
This layering is what makes the dynamic skill-loading design pay off. If you instead pour every procedure into the base context, the model reasons across a wall of mostly-irrelevant instructions on every turn, and quality drops. Keep the base lean and let relevance pull in the rest.
The model chooses tools largely from their names and descriptions, so name them for what the user wants, not for the internal endpoint. draft_ticket_reply reads as intent; post_v2_comment reads as plumbing and invites wrong calls. Pair good names with idempotency: a tool that's safe to call twice protects you when the agent retries after an ambiguous result, which it sometimes will.
// Good: intent-named, idempotent via a client key
draft_ticket_reply({
ticket_id: "OPS-4821",
tone: "concise",
idempotency_key: "OPS-4821-reply-2026-06-06"
})
The idempotency key means a retried draft doesn't create two drafts. This single habit eliminates a whole class of duplicate-action bugs that otherwise surface only under load, when retries are most likely.
Small skills are only valuable if they combine cleanly. The pattern is explicit handoff: a skill that finishes its job and names the next skill, rather than trying to absorb the next job. ticket-triage ends by saying "for the top at-risk ticket, hand off to ticket-reply-draft." The orchestrator then loads the sibling skill with a focused brief. This keeps each skill single-purpose while still supporting multi-step work, and it makes the chain visible and debuggable.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
get_v3_data make the model guess. Name by intent so selection is obvious from the description.| Quality | One big skill | Composed small skills |
|---|---|---|
| Trigger clarity | Ambiguous | One match per request |
| Editability | Risky — changes ripple | Isolated |
| Testability | Hard to cover | Each tested alone |
| Reuse | Low | High via handoffs |
Give each skill a single responsibility and a description that doesn't overlap any other — ideally a distinct verb-and-object. Because Cowork loads skills by matching the description to the task, disjoint descriptions make the choice deterministic.
A fixed, documented output shape lets skills read specific fields instead of re-parsing prose, so wording changes don't silently break downstream behavior. It's the same reason you'd version an API response rather than return free text.
Put rules that are true for every request — tone, hard limits, must-never-do constraints — in base context, and put task-specific procedures in skills loaded on demand. The more universal a rule, the higher and more permanent it should sit.
Agents sometimes retry after an ambiguous result. An idempotency key makes a repeated call safe, so a retried write produces one action instead of two — eliminating duplicate-action bugs that mostly appear under load.
These composition patterns translate directly to conversation. CallSphere structures its voice and chat agents the same way — small, single-purpose skills calling typed tools — so they answer every call, act mid-conversation, and book work 24/7. See it at callsphere.ai.
Source & attribution: This is an independent, original explainer inspired by Anthropic's coverage on the Claude blog. Claude, Claude Code, Claude Cowork, Claude Opus, and the Model Context Protocol are products and trademarks of Anthropic. CallSphere is not affiliated with or endorsed by Anthropic.

Written by
Sagar Shankaran· Founder, CallSphere
LinkedInSagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
The monthly IEEE 1366 reliability close takes 64 hours across three people. What goal-driven agents change, the arithmetic, and what stays with the engineer.
How pest control service managers hand the monthly food-account trend packet to a 2026 work agent as a goal - and what has to change about assigning work.
The phased plan, insurance estimate, predetermination narrative and financing page, finished before the patient leaves. What the owner has to change to get it.
Why co-pack quotes take six days, and how 2026 agents that return finished work rebuild the packet — costed formula, freight, spec sheet — in two hours.
A 1/1 commercial submission packet costs an account manager nine hours, eight of them gathering. In 2026 you hand over the goal and review the finished packet.
The Thursday production packet - prep list, vendor POs, staffing, rentals - built as one goal. Worked food-waste math and the habits an owner must change.
© 2026 CallSphere Inc. All rights reserved.
Made within San Francisco
Watch how CallSphere handles real customer calls, schedules appointments, and processes payments — live.
Try Live DemoBook a DemoCalculate Your ROI