When this skill is activated, always start your first response with the 🧢 emoji.
No-Code Automation
A practitioner's guide to building workflow automations using platforms like
Zapier, Make (formerly Integromat), and n8n. This skill covers the
trigger-action mental model, platform selection, data mapping between apps,
error handling in automated workflows, and building internal tooling without
writing full applications. The focus is on choosing the right platform for the
job, designing reliable workflows, and avoiding the common pitfalls that turn
simple automations into maintenance nightmares.
When to use this skill
Trigger this skill when the user:
- Wants to connect two or more SaaS tools without writing a full backend
- Needs to build a Zap in Zapier, a scenario in Make, or a workflow in n8n
- Is designing webhook-driven automations between apps
- Wants to automate repetitive business processes (lead routing, data sync, notifications)
- Needs to build internal tooling (admin dashboards, approval flows, ops scripts) with low-code
- Is choosing between Zapier, Make, n8n, or custom code for an automation task
- Wants to handle errors, retries, and monitoring in no-code workflows
- Needs to transform or map data between different app schemas
Do NOT trigger this skill for:
- Building full production applications (use a backend engineering skill instead)
- Infrastructure automation like Terraform or Ansible (use an IaC skill instead)
Key principles
Trigger-action is the universal model - Every no-code automation follows
the same pattern: an event happens (trigger), data flows through optional
transformations (filters/formatters), and one or more actions execute. Master
this mental model and every platform becomes familiar.
Start with the simplest platform that works - Zapier for linear 2-3 step
automations, Make for branching logic and complex data transforms, n8n for
self-hosted or code-heavy workflows. Moving to a more powerful tool when you
don't need it creates unnecessary complexity.
Design for failure from day one - Every HTTP call can fail, every API can
rate-limit, every webhook can deliver duplicates. Build error paths, enable
retries with backoff, and log failures to a Slack channel or spreadsheet
before they silently break.
Treat automations as code - Name workflows descriptively, version your
n8n JSON exports, document what each step does, and review automations the
same way you review pull requests. Unnamed "My Zap 47" workflows become
unmaintainable within weeks.
Respect API rate limits - Most SaaS APIs throttle at 100-1000 requests
per minute. Batch operations where possible, add delays between loop
iterations, and use bulk endpoints when the target API provides them.
Core concepts
Triggers start a workflow. They come in two flavors: polling (the platform
checks for new data on a schedule, typically every 1-15 minutes) and instant
(the source app sends a webhook the moment something happens). Prefer instant
triggers for time-sensitive flows - polling triggers introduce latency and
consume task quota even when nothing changed.
Actions are the operations performed after a trigger fires. Each action
maps to a single API call - create a row, send an email, update a record.
Complex workflows chain multiple actions, passing data from one step's output
into the next step's input.
Data mapping is where most automation work happens. Each app has its own
schema (field names, data types, date formats). The automation platform sits
in the middle, letting you map fields from one schema to another. Get this
wrong and you get silent data corruption - names in the wrong fields, dates
parsed as strings, numbers truncated.
Filters and routers control flow. Filters stop execution if conditions
aren't met (e.g., only process leads from the US). Routers split a single
trigger into multiple parallel paths based on conditions (e.g., route support
tickets by priority level).
Platform comparison:
| Feature |
Zapier |
Make |
n8n |
| Hosting |
Cloud only |
Cloud only |
Self-hosted or cloud |
| Pricing model |
Per task |
Per operation |
Free (self-hosted) or per workflow |
| Branching logic |
Limited (Paths) |
Native (routers) |
Native (If/Switch nodes) |
| Code steps |
JS only |
JS/JSON |
JS, Python, full HTTP |
| Best for |
Simple linear flows |
Complex multi-branch |
Developer-heavy teams |
| Webhook support |
Built-in |
Built-in |
Built-in + custom endpoints |
Common tasks
Choose the right platform
Use this decision framework:
- Linear, 2-5 step automation with popular apps - Use Zapier. Fastest setup,
largest app catalog (6000+), good enough for most business automations.
- Complex branching, data transformation, or loops - Use Make. Its visual
scenario builder handles routers, iterators, and aggregators natively.
- Self-hosting required, or heavy custom code - Use n8n. Full control,
no per-execution costs, and you can write custom JS/Python in any node.
- Enterprise-grade with audit trail - Use Zapier Teams/Enterprise or Make
Teams for SOC 2 compliance, shared workspaces, and admin controls.
- More than 50% custom code - Stop using no-code. Build a proper service.
Build a Zapier Zap
Structure: Trigger -> (optional Filter) -> Action(s)
- Choose the trigger app and event (e.g., "New Row in Google Sheets")
- Connect the account and test the trigger to pull sample data
- Add a filter step if needed (e.g., "Only continue if Column B is not empty")
- Add the action app and event (e.g., "Create Contact in HubSpot")
- Map fields from the trigger output to the action input
- Test the action with real data, then turn the Zap on
Always test with real data, not sample data. Sample data has different field
structures than live triggers and will mask mapping errors.
Build a Make scenario with branching
Make scenarios use modules connected by routes:
- Create a new scenario and add the trigger module
- Add a Router module after the trigger to split into branches
- Add filters on each route (e.g., Route 1: status = "urgent", Route 2: all others)
- Add action modules on each branch
- Use the "Map" toggle to reference data from previous modules using
{{}} syntax
- Set up error handlers: right-click any module > "Add error handler" >
choose Resume, Rollback, or Break
- Set scheduling (immediate for webhooks, interval for polling)
Make counts every module execution as one operation. A scenario with 5
modules processing 100 items = 500 operations. Design accordingly.
Build an n8n workflow
n8n workflows are node-based graphs:
- Start with a Trigger node (Webhook, Cron, or app-specific trigger)
- Chain processing nodes: Set (transform data), If (branch), HTTP Request (call APIs)
- Use expressions in node fields:
{{ $json.fieldName }} for current data,
{{ $node["NodeName"].json.field }} for cross-node references
- Add Error Trigger nodes to catch and handle failures globally
- Export the workflow as JSON for version control
{
"name": "Lead Routing",
"nodes": [
{
"type": "n8n-nodes-base.webhook",
"parameters": {
"path": "lead-webhook",
"httpMethod": "POST"
}
},
{
"type": "n8n-nodes-base.if",
"parameters": {
"conditions": {
"string": [{ "value1": "={{ $json.country }}", "value2": "US" }]
}
}
}
]
}
Handle webhooks reliably
Webhooks are the backbone of instant automations. Handle them properly:
- Respond quickly - Return a 200 within 5 seconds. Process asynchronously
if the work is heavy. Most webhook senders retry on timeout.
- Handle duplicates - Webhook providers may send the same event twice.
Use an idempotency key (event ID) to deduplicate.
- Validate signatures - If the sender provides HMAC signatures (Stripe,
GitHub, Shopify), verify them before processing.
- Log everything - Store raw webhook payloads for debugging. In Zapier,
check the Task History. In Make, check the scenario log. In n8n, check
the Executions tab.
Build internal tooling with automation
Combine no-code platforms with simple frontends for internal tools:
- Approval workflows - Google Form -> Zapier -> Slack notification with
approve/reject buttons -> update Google Sheet + send email
- Data sync - New row in Airtable -> Make scenario -> create record in
Salesforce + update inventory in Shopify
- Ops dashboards - n8n cron job -> query multiple APIs -> aggregate data ->
push to Google Sheets -> Looker Studio dashboard
- Alerting - Monitor endpoint with n8n HTTP node on a cron -> If status != 200 ->
send Slack alert + create PagerDuty incident
For internal tools that need a UI, consider pairing automations with Retool,
Appsmith, or Google Apps Script for the frontend layer.
Monitor and debug failing automations
Every platform has different monitoring tools:
- Zapier: Task History shows every execution with input/output per step.
Filter by status (success/error) and date range. Set up Zapier Manager
alerts for failures.
- Make: Scenario log shows each execution. Enable "Data Store" modules to
persist state for debugging. Use the "Break" error handler to pause on failure.
- n8n: Executions tab shows all runs with full data. Enable "Save Execution
Data" in workflow settings. Set up an Error Trigger workflow for global alerts.
Common debugging steps:
- Check the failing step's input data - is it receiving what you expect?
- Check the API response - is it a 429 (rate limit), 401 (auth expired), or 400 (bad data)?
- Check data types - are you sending a string where a number is expected?
- Check for null/empty values - missing fields crash many action steps
Anti-patterns / common mistakes
| Mistake |
Why it's wrong |
What to do instead |
| Building a 20-step Zap |
Impossible to debug, any step failure breaks everything |
Split into smaller focused Zaps connected via webhooks |
| Ignoring error handling |
Failures go unnoticed, data gets lost silently |
Add error paths, log failures to Slack, enable retry policies |
| Hardcoding values in steps |
Breaks when anything changes, can't reuse across environments |
Use variables, environment configs, or lookup tables |
| Using polling when instant is available |
Wastes task quota, adds latency |
Always prefer webhook/instant triggers when the app supports them |
| No naming convention |
"My Zap (2)" and "Test scenario copy" become unmanageable |
Name pattern: [Source] -> [Action] - [Purpose] e.g., "Stripe -> Slack - Payment alerts" |
| Skipping deduplication |
Duplicate webhook deliveries create duplicate records |
Track event IDs in a data store and skip already-processed events |
Gotchas
Zapier polling triggers miss events if too many happen between polls - Zapier's polling triggers check for new items every 1-15 minutes and retrieve only the latest batch. If your source app generates more new records than Zapier's API pagination returns in one poll, older records in that window are silently skipped. For high-volume sources, switch to an instant webhook trigger or use Make/n8n with proper pagination handling.
Make operation counts multiply inside iterators - A Make scenario with a Router that has 3 branches, each with 4 modules, processing an iterator of 50 items, consumes 3 x 4 x 50 = 600 operations per execution. Teams regularly exceed their monthly operation quota because they built iterators without calculating the multiplication effect. Always estimate peak operations per scenario before building.
n8n expressions reference the current item's JSON differently than you expect - In n8n, {{ $json.fieldName }} refers to the current item from the most recent node's output. Cross-node references require {{ $node["NodeName"].json.fieldName }}. Using $json when you intend a cross-node reference silently returns undefined and passes empty values downstream without throwing an error.
OAuth credentials in no-code platforms expire and break automations silently - Most SaaS OAuth tokens expire or are revoked (on password change, security audit, permission change). When a connected account's token expires, the automation fails with a 401 but the error often goes unnoticed until a business process breaks. Set up failure notifications for every automation and audit connected accounts quarterly.
Webhook endpoints in Zapier and Make are public URLs with no built-in auth - Any client that knows the webhook URL can trigger your automation. This is especially dangerous for Zaps that create CRM records, send emails, or trigger financial processes. Validate a shared secret or HMAC signature in the first step of any webhook-triggered workflow, or use n8n's built-in webhook authentication options.
References
For detailed implementation guidance on specific platforms and patterns:
references/zapier-patterns.md - advanced Zapier patterns including multi-step
Zaps, Paths, Formatter utilities, and Webhooks by Zapier
references/make-patterns.md - Make-specific patterns including routers,
iterators, aggregators, error handlers, and data stores
references/n8n-patterns.md - n8n workflow patterns including custom code nodes,
credential management, self-hosting, and community nodes
Only load a references file when working with a specific platform - they are
detailed and will consume context.
Companion check
On first activation of this skill in a conversation: check which companion skills are installed by running ls ~/.claude/skills/ ~/.agent/skills/ ~/.agents/skills/ .claude/skills/ .agent/skills/ .agents/skills/ 2>/dev/null. Compare the results against the recommended_skills field in this file's frontmatter. For any that are missing, mention them once and offer to install:
npx skills add AbsolutelySkilled/AbsolutelySkilled --skill <name>
Skip entirely if recommended_skills is empty or all companions are already installed.
1---2name: no-code-automation3description: Use this skill when building workflow automations with Zapier, Make (Integromat), n8n, or similar no-code/low-code platforms. Triggers on workflow automation, Zap creation, Make scenario design, n8n workflow building, webhook routing, internal tooling automation, app integration, trigger-action patterns, and any task requiring connecting SaaS tools without writing full applications.4license: MIT5---6
7When this skill is activated, always start your first response with the 🧢 emoji.
8
9# No-Code Automation
10
11A practitioner's guide to building workflow automations using platforms like
12Zapier, Make (formerly Integromat), and n8n. This skill covers the
13trigger-action mental model, platform selection, data mapping between apps,
14error handling in automated workflows, and building internal tooling without
15writing full applications. The focus is on choosing the right platform for the
16job, designing reliable workflows, and avoiding the common pitfalls that turn
17simple automations into maintenance nightmares.
18
19---
20
21## When to use this skill
22
23Trigger this skill when the user:
24- Wants to connect two or more SaaS tools without writing a full backend
25- Needs to build a Zap in Zapier, a scenario in Make, or a workflow in n8n
26- Is designing webhook-driven automations between apps
27- Wants to automate repetitive business processes (lead routing, data sync, notifications)
28- Needs to build internal tooling (admin dashboards, approval flows, ops scripts) with low-code
29- Is choosing between Zapier, Make, n8n, or custom code for an automation task
30- Wants to handle errors, retries, and monitoring in no-code workflows
31- Needs to transform or map data between different app schemas
32
33Do NOT trigger this skill for:
34- Building full production applications (use a backend engineering skill instead)
35- Infrastructure automation like Terraform or Ansible (use an IaC skill instead)
36
37---
38
39## Key principles
40
411. **Trigger-action is the universal model** - Every no-code automation follows
42 the same pattern: an event happens (trigger), data flows through optional
43 transformations (filters/formatters), and one or more actions execute. Master
44 this mental model and every platform becomes familiar.
45
462. **Start with the simplest platform that works** - Zapier for linear 2-3 step
47 automations, Make for branching logic and complex data transforms, n8n for
48 self-hosted or code-heavy workflows. Moving to a more powerful tool when you
49 don't need it creates unnecessary complexity.
50
513. **Design for failure from day one** - Every HTTP call can fail, every API can
52 rate-limit, every webhook can deliver duplicates. Build error paths, enable
53 retries with backoff, and log failures to a Slack channel or spreadsheet
54 before they silently break.
55
564. **Treat automations as code** - Name workflows descriptively, version your
57 n8n JSON exports, document what each step does, and review automations the
58 same way you review pull requests. Unnamed "My Zap 47" workflows become
59 unmaintainable within weeks.
60
615. **Respect API rate limits** - Most SaaS APIs throttle at 100-1000 requests
62 per minute. Batch operations where possible, add delays between loop
63 iterations, and use bulk endpoints when the target API provides them.
64
65---
66
67## Core concepts
68
69**Triggers** start a workflow. They come in two flavors: polling (the platform
70checks for new data on a schedule, typically every 1-15 minutes) and instant
71(the source app sends a webhook the moment something happens). Prefer instant
72triggers for time-sensitive flows - polling triggers introduce latency and
73consume task quota even when nothing changed.
74
75**Actions** are the operations performed after a trigger fires. Each action
76maps to a single API call - create a row, send an email, update a record.
77Complex workflows chain multiple actions, passing data from one step's output
78into the next step's input.
79
80**Data mapping** is where most automation work happens. Each app has its own
81schema (field names, data types, date formats). The automation platform sits
82in the middle, letting you map fields from one schema to another. Get this
83wrong and you get silent data corruption - names in the wrong fields, dates
84parsed as strings, numbers truncated.
85
86**Filters and routers** control flow. Filters stop execution if conditions
87aren't met (e.g., only process leads from the US). Routers split a single
88trigger into multiple parallel paths based on conditions (e.g., route support
89tickets by priority level).
90
91**Platform comparison:**
92
93| Feature | Zapier | Make | n8n |
94|---|---|---|---|
95| Hosting | Cloud only | Cloud only | Self-hosted or cloud |
96| Pricing model | Per task | Per operation | Free (self-hosted) or per workflow |
97| Branching logic | Limited (Paths) | Native (routers) | Native (If/Switch nodes) |
98| Code steps | JS only | JS/JSON | JS, Python, full HTTP |
99| Best for | Simple linear flows | Complex multi-branch | Developer-heavy teams |
100| Webhook support | Built-in | Built-in | Built-in + custom endpoints |
101
102---
103
104## Common tasks
105
106### Choose the right platform
107
108Use this decision framework:
109
1101. **Linear, 2-5 step automation with popular apps** - Use Zapier. Fastest setup,
111 largest app catalog (6000+), good enough for most business automations.
1122. **Complex branching, data transformation, or loops** - Use Make. Its visual
113 scenario builder handles routers, iterators, and aggregators natively.
1143. **Self-hosting required, or heavy custom code** - Use n8n. Full control,
115 no per-execution costs, and you can write custom JS/Python in any node.
1164. **Enterprise-grade with audit trail** - Use Zapier Teams/Enterprise or Make
117 Teams for SOC 2 compliance, shared workspaces, and admin controls.
1185. **More than 50% custom code** - Stop using no-code. Build a proper service.
119
120---
121
122### Build a Zapier Zap
123
124Structure: Trigger -> (optional Filter) -> Action(s)
125
1261. Choose the trigger app and event (e.g., "New Row in Google Sheets")
1272. Connect the account and test the trigger to pull sample data
1283. Add a filter step if needed (e.g., "Only continue if Column B is not empty")
1294. Add the action app and event (e.g., "Create Contact in HubSpot")
1305. Map fields from the trigger output to the action input
1316. Test the action with real data, then turn the Zap on
132
133> Always test with real data, not sample data. Sample data has different field
134> structures than live triggers and will mask mapping errors.
135
136---
137
138### Build a Make scenario with branching
139
140Make scenarios use modules connected by routes:
141
1421. Create a new scenario and add the trigger module
1432. Add a Router module after the trigger to split into branches
1443. Add filters on each route (e.g., Route 1: status = "urgent", Route 2: all others)
1454. Add action modules on each branch
1465. Use the "Map" toggle to reference data from previous modules using `{{}}` syntax
1476. Set up error handlers: right-click any module > "Add error handler" >
148 choose Resume, Rollback, or Break
1497. Set scheduling (immediate for webhooks, interval for polling)
150
151> Make counts every module execution as one operation. A scenario with 5
152> modules processing 100 items = 500 operations. Design accordingly.
153
154---
155
156### Build an n8n workflow
157
158n8n workflows are node-based graphs:
159
1601. Start with a Trigger node (Webhook, Cron, or app-specific trigger)
1612. Chain processing nodes: Set (transform data), If (branch), HTTP Request (call APIs)
1623. Use expressions in node fields: `{{ $json.fieldName }}` for current data,
163 `{{ $node["NodeName"].json.field }}` for cross-node references
1644. Add Error Trigger nodes to catch and handle failures globally
1655. Export the workflow as JSON for version control
166
167```json
168{
169 "name": "Lead Routing",
170 "nodes": [
171 {
172 "type": "n8n-nodes-base.webhook",
173 "parameters": {
174 "path": "lead-webhook",
175 "httpMethod": "POST"
176 }
177 },
178 {
179 "type": "n8n-nodes-base.if",
180 "parameters": {
181 "conditions": {
182 "string": [{ "value1": "={{ $json.country }}", "value2": "US" }]
183 }
184 }
185 }
186 ]
187}
188```
189
190---
191
192### Handle webhooks reliably
193
194Webhooks are the backbone of instant automations. Handle them properly:
195
1961. **Respond quickly** - Return a 200 within 5 seconds. Process asynchronously
197 if the work is heavy. Most webhook senders retry on timeout.
1982. **Handle duplicates** - Webhook providers may send the same event twice.
199 Use an idempotency key (event ID) to deduplicate.
2003. **Validate signatures** - If the sender provides HMAC signatures (Stripe,
201 GitHub, Shopify), verify them before processing.
2024. **Log everything** - Store raw webhook payloads for debugging. In Zapier,
203 check the Task History. In Make, check the scenario log. In n8n, check
204 the Executions tab.
205
206---
207
208### Build internal tooling with automation
209
210Combine no-code platforms with simple frontends for internal tools:
211
2121. **Approval workflows** - Google Form -> Zapier -> Slack notification with
213 approve/reject buttons -> update Google Sheet + send email
2142. **Data sync** - New row in Airtable -> Make scenario -> create record in
215 Salesforce + update inventory in Shopify
2163. **Ops dashboards** - n8n cron job -> query multiple APIs -> aggregate data ->
217 push to Google Sheets -> Looker Studio dashboard
2184. **Alerting** - Monitor endpoint with n8n HTTP node on a cron -> If status != 200 ->
219 send Slack alert + create PagerDuty incident
220
221> For internal tools that need a UI, consider pairing automations with Retool,
222> Appsmith, or Google Apps Script for the frontend layer.
223
224---
225
226### Monitor and debug failing automations
227
228Every platform has different monitoring tools:
229
230- **Zapier**: Task History shows every execution with input/output per step.
231 Filter by status (success/error) and date range. Set up Zapier Manager
232 alerts for failures.
233- **Make**: Scenario log shows each execution. Enable "Data Store" modules to
234 persist state for debugging. Use the "Break" error handler to pause on failure.
235- **n8n**: Executions tab shows all runs with full data. Enable "Save Execution
236 Data" in workflow settings. Set up an Error Trigger workflow for global alerts.
237
238Common debugging steps:
2391. Check the failing step's input data - is it receiving what you expect?
2402. Check the API response - is it a 429 (rate limit), 401 (auth expired), or 400 (bad data)?
2413. Check data types - are you sending a string where a number is expected?
2424. Check for null/empty values - missing fields crash many action steps
243
244---
245
246## Anti-patterns / common mistakes
247
248| Mistake | Why it's wrong | What to do instead |
249|---|---|---|
250| Building a 20-step Zap | Impossible to debug, any step failure breaks everything | Split into smaller focused Zaps connected via webhooks |
251| Ignoring error handling | Failures go unnoticed, data gets lost silently | Add error paths, log failures to Slack, enable retry policies |
252| Hardcoding values in steps | Breaks when anything changes, can't reuse across environments | Use variables, environment configs, or lookup tables |
253| Using polling when instant is available | Wastes task quota, adds latency | Always prefer webhook/instant triggers when the app supports them |
254| No naming convention | "My Zap (2)" and "Test scenario copy" become unmanageable | Name pattern: `[Source] -> [Action] - [Purpose]` e.g., "Stripe -> Slack - Payment alerts" |
255| Skipping deduplication | Duplicate webhook deliveries create duplicate records | Track event IDs in a data store and skip already-processed events |
256
257---
258
259## Gotchas
260
2611. **Zapier polling triggers miss events if too many happen between polls** - Zapier's polling triggers check for new items every 1-15 minutes and retrieve only the latest batch. If your source app generates more new records than Zapier's API pagination returns in one poll, older records in that window are silently skipped. For high-volume sources, switch to an instant webhook trigger or use Make/n8n with proper pagination handling.
262
2632. **Make operation counts multiply inside iterators** - A Make scenario with a Router that has 3 branches, each with 4 modules, processing an iterator of 50 items, consumes 3 x 4 x 50 = 600 operations per execution. Teams regularly exceed their monthly operation quota because they built iterators without calculating the multiplication effect. Always estimate peak operations per scenario before building.
264
2653. **n8n expressions reference the current item's JSON differently than you expect** - In n8n, `{{ $json.fieldName }}` refers to the current item from the most recent node's output. Cross-node references require `{{ $node["NodeName"].json.fieldName }}`. Using `$json` when you intend a cross-node reference silently returns `undefined` and passes empty values downstream without throwing an error.
266
2674. **OAuth credentials in no-code platforms expire and break automations silently** - Most SaaS OAuth tokens expire or are revoked (on password change, security audit, permission change). When a connected account's token expires, the automation fails with a 401 but the error often goes unnoticed until a business process breaks. Set up failure notifications for every automation and audit connected accounts quarterly.
268
2695. **Webhook endpoints in Zapier and Make are public URLs with no built-in auth** - Any client that knows the webhook URL can trigger your automation. This is especially dangerous for Zaps that create CRM records, send emails, or trigger financial processes. Validate a shared secret or HMAC signature in the first step of any webhook-triggered workflow, or use n8n's built-in webhook authentication options.
270
271---
272
273## References
274
275For detailed implementation guidance on specific platforms and patterns:
276
277- `references/zapier-patterns.md` - advanced Zapier patterns including multi-step
278 Zaps, Paths, Formatter utilities, and Webhooks by Zapier
279- `references/make-patterns.md` - Make-specific patterns including routers,
280 iterators, aggregators, error handlers, and data stores
281- `references/n8n-patterns.md` - n8n workflow patterns including custom code nodes,
282 credential management, self-hosting, and community nodes
283
284Only load a references file when working with a specific platform - they are
285detailed and will consume context.
286
287---
288
289## Companion check
290
291> On first activation of this skill in a conversation: check which companion skills are installed by running `ls ~/.claude/skills/ ~/.agent/skills/ ~/.agents/skills/ .claude/skills/ .agent/skills/ .agents/skills/ 2>/dev/null`. Compare the results against the `recommended_skills` field in this file's frontmatter. For any that are missing, mention them once and offer to install:
292> ```
293> npx skills add AbsolutelySkilled/AbsolutelySkilled --skill <name>
294> ```
295> Skip entirely if `recommended_skills` is empty or all companions are already installed.