@awesomate/hosting-mcp 0.18.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -45
- package/dist/index.js +473 -31
- package/package.json +3 -3
- package/skill/CHANGELOG.json +35 -0
- package/skill/awesomate-app-builder/SKILL.md +6 -3
- package/skill/awesomate-app-builder/references/node-recipes.md +3 -2
- package/skill/awesomate-app-builder/references/stack-decision.md +1 -1
- package/skill/awesomate-hosting/SKILL.md +84 -18
- package/skill/awesomate-hosting/scripts/bootstrap.mjs +11 -4
- package/skill/awesomate-knowledge/SKILL.md +12 -0
- package/skill/awesomate-n8n/SKILL.md +28 -2
- package/skill/awesomate-n8n/references/error-handling.md +91 -0
- package/skill/awesomate-n8n/references/possibilities.md +32 -0
- package/skill/awesomate-n8n/references/recurring-reports.md +82 -0
- package/skill/awesomate-n8n/references/troubleshooting.md +28 -0
- package/skill/awesomate-seo/SKILL.md +38 -3
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awesomate/hosting-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Awesomate MCP server
|
|
3
|
+
"version": "0.19.1",
|
|
4
|
+
"description": "Awesomate MCP server — lets Claude manage your Awesomate WordPress hosting, plan, limits, n8n automations, and build Node/static apps + databases",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"publishConfig": {
|
|
@@ -32,4 +32,4 @@
|
|
|
32
32
|
"esbuild": "^0.25.0",
|
|
33
33
|
"typescript": "^6.0.3"
|
|
34
34
|
}
|
|
35
|
-
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"versions": [
|
|
3
|
+
{
|
|
4
|
+
"version": "0.19.1",
|
|
5
|
+
"highlights": [
|
|
6
|
+
"When your n8n API key stops working, Claude now tells you exactly how to fix it instead of reporting a confusing server error"
|
|
7
|
+
]
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"version": "0.19.0",
|
|
11
|
+
"highlights": [
|
|
12
|
+
"Claude can now see what's broken across all your automations at once and explain it in plain language",
|
|
13
|
+
"Update your WordPress pages and posts straight from Claude (drafts first, you approve publishing)",
|
|
14
|
+
"Weekly business reports: uptime, automation health and usage in one summary",
|
|
15
|
+
"Claude notices when an update to these tools is ready and installs it for you in one step"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"version": "0.18.0",
|
|
20
|
+
"highlights": [
|
|
21
|
+
"Search your knowledge base with filters and ask questions within a slice of your content",
|
|
22
|
+
"People & entities: your knowledge base now recognises who appears in your content, and you can name and merge them",
|
|
23
|
+
"Build AI agents from your own content \u2014 drafted, tested privately, and published only when you approve"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"version": "0.14.0",
|
|
28
|
+
"highlights": [
|
|
29
|
+
"Tools built for business owners, not developers \u2014 plain-language answers about your account, plan and limits",
|
|
30
|
+
"New support skill: get help, understand credits, or request a done-for-you build without leaving Claude",
|
|
31
|
+
"New database skill: Claude picks the right place to keep your data and sets it up for you"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -16,7 +16,10 @@ own hosting) but you should always confirm the **stack + name** before creating.
|
|
|
16
16
|
1. Run `awesomate_whoami` — everything acts on whichever ACCOUNT this folder
|
|
17
17
|
resolves to. Every tool response is stamped `account: <slug>`; if it isn't
|
|
18
18
|
the account the user means, fix the pin/connection first (see the
|
|
19
|
-
awesomate-hosting skill's multi-account section).
|
|
19
|
+
awesomate-hosting skill's multi-account section). If `awesomate_get_context`'s
|
|
20
|
+
`attention` block shows erroring workflows or unread notifications, surface
|
|
21
|
+
that first in one line ("two of your automations failed this week — want me
|
|
22
|
+
to look?"), then get on with the ask.
|
|
20
23
|
2. Call `awesomate_app_context` once and cache it. It returns:
|
|
21
24
|
- `capability.appBuilder` — if **false**, building is Support Plus+. Relay
|
|
22
25
|
the upgrade suggestion (don't attempt to build); reads still work.
|
|
@@ -106,8 +109,8 @@ target; never touch prod without an explicit ask.**
|
|
|
106
109
|
`/api/ready`). Show the user the live dev URL and let them try it. Iterate
|
|
107
110
|
on dev until they're happy.
|
|
108
111
|
7. **Wrap-up / promote** — only when the user approves, promote **dev → staging
|
|
109
|
-
→ main** (merge + push per branch). `
|
|
110
|
-
branch→env map + last-deploy state. Prod is `main`. **Before merging to
|
|
112
|
+
→ main** (merge + push per branch). `awesomate_app_deploy_info` reports the
|
|
113
|
+
branch→env map + last-deploy state (it never deploys — `git push` does). Prod is `main`. **Before merging to
|
|
111
114
|
main**, walk [references/security-checklist.md](references/security-checklist.md)
|
|
112
115
|
— the deploy workflow's automated gate blocks prod on high-severity
|
|
113
116
|
findings (secrets, injectable SQL, eval…), and the checklist covers what
|
|
@@ -64,8 +64,9 @@ never throws — check `result.ok` and degrade gracefully.
|
|
|
64
64
|
through a PR from staging.
|
|
65
65
|
- **Roll back** = `git revert <bad-sha>` on the affected branch + push — the
|
|
66
66
|
workflow redeploys the previous good state. Re-check health after.
|
|
67
|
-
- `
|
|
68
|
-
and last health per env.
|
|
67
|
+
- `awesomate_app_deploy_info` reports the branch→env map, last-deploy
|
|
68
|
+
SHA/time, and last health per env. It reports how deploys work — it never
|
|
69
|
+
deploys; `git push` is the deploy.
|
|
69
70
|
|
|
70
71
|
## Health semantics (don't mix these up)
|
|
71
72
|
|
|
@@ -9,7 +9,7 @@ confirm before building. **Never default to WordPress.**
|
|
|
9
9
|
| What the user is really trying to do | Stack | Why / how |
|
|
10
10
|
|---|---|---|
|
|
11
11
|
| "I already have a WordPress site" / a blog / publishes content regularly / **wants to rank on Google & AI** | **WordPress** | Best CMS for indexable content, sitemaps, schema. Hand to the awesomate-hosting skill to provision, then run **awesomate-seo**. Existing WP elsewhere → migrate it, don't rebuild: [wp-migrate.md](wp-migrate.md) (also covers WP ↔ app coexistence on subdomains). |
|
|
12
|
-
| Sell products / online shop | **WordPress + WooCommerce** |
|
|
12
|
+
| Sell products / online shop | **WordPress + WooCommerce** | Provision via the awesomate-hosting skill, install WooCommerce over WP-CLI, then run **awesomate-seo** (product pages need `Product` JSON-LD + real product data). |
|
|
13
13
|
| A landing page / capture leads / a one-pager / "just needs to look good and be found" | **static site** (`kind: 'static'`) | Served straight from the cPanel docroot — no database, no server process, fastest load. Add SEO + a lead form (below). The right default for marketing pages. |
|
|
14
14
|
| A tool/app with **logins, custom logic, a dashboard, or an API** | **Node app** (`kind: 'node'`) | A real backend + database. |
|
|
15
15
|
|
|
@@ -19,10 +19,12 @@ description: >
|
|
|
19
19
|
# Awesomate Hosting
|
|
20
20
|
|
|
21
21
|
You are helping the user run their **Awesomate-hosted WordPress** through the
|
|
22
|
-
**Awesomate Hosting MCP** (tools prefixed `awesomate_`).
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
(
|
|
22
|
+
**Awesomate Hosting MCP** (tools prefixed `awesomate_`). For WordPress work,
|
|
23
|
+
use the tools you have: `awesomate_run_wp_cli` for plugins, themes, options,
|
|
24
|
+
and maintenance; `awesomate_wp_post` for creating/updating posts and pages
|
|
25
|
+
(drafts by default); `awesomate_wp_media_import` for pulling media in by URL.
|
|
26
|
+
For anything beyond those — visual page-builder edits, theme design work —
|
|
27
|
+
point the user at their WP admin (1-click SSO link) rather than improvising.
|
|
26
28
|
|
|
27
29
|
## 0. First run — orient before acting
|
|
28
30
|
|
|
@@ -34,12 +36,21 @@ before any work** — every tool response is stamped `account: <slug> (source:
|
|
|
34
36
|
once (plus `awesomate_get_limits` before any create/change) and cache:
|
|
35
37
|
|
|
36
38
|
- **`plan`** and **`capabilities.shell`** — decides which branch below you're on.
|
|
39
|
+
- **`attention`** — `{unreadNotifications, erroringWorkflows7d, patExpiresInDays}`.
|
|
40
|
+
If it shows erroring workflows or unread notifications, say so in ONE line
|
|
41
|
+
("two of your automations failed this week — want me to look?") before the
|
|
42
|
+
asked task, then get on with the task. `null` means unknown, never zero —
|
|
43
|
+
say nothing on null.
|
|
37
44
|
- **`patExpiresAt`** — within ~7 days, or any 401: re-run the setup prompt at
|
|
38
45
|
**hub.awesomate.ai/sites → Connect Claude Code** to refresh the token.
|
|
39
|
-
- **`skill.updateAvailable`** —
|
|
40
|
-
server. Mention
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
- **`skill.updateAvailable`** — covers all nine skills; the local files are
|
|
47
|
+
older than the MCP server. Mention it ONCE per session, with the what's-new
|
|
48
|
+
line the context includes, and offer to run `awesomate_skill_update`. Give
|
|
49
|
+
the exact restart step: in a terminal, type `exit` and run `claude` again;
|
|
50
|
+
in VS Code, run "Reload Window". Never raise it mid-task, never nag twice
|
|
51
|
+
in a session. If `serverVersion` is still older than `latestMcpVersion`
|
|
52
|
+
after a restart, the npx cache is stale — the remedy is
|
|
53
|
+
`rm -rf ~/.npm/_npx`, then restart again.
|
|
43
54
|
- **`cpanel`** routing (host/user), present once hosting is provisioned.
|
|
44
55
|
|
|
45
56
|
If `awesomate_get_context` fails with a connectivity error, it's the user's
|
|
@@ -50,13 +61,43 @@ wrong account) · `references/connect-troubleshooting.md` (bootstrap, sandbox/
|
|
|
50
61
|
proxy failures, resuming a connect, support report) ·
|
|
51
62
|
`references/rest-fallback.md` (no `awesomate_*` tools — serve over REST).
|
|
52
63
|
|
|
64
|
+
## 0a. Tool map — reach for it when
|
|
65
|
+
|
|
66
|
+
| Tool | Reach for it when |
|
|
67
|
+
|---|---|
|
|
68
|
+
| `awesomate_whoami` | First call of every session — which account this folder acts on (zero network) |
|
|
69
|
+
| `awesomate_get_context` | Session start — plan, capabilities, PAT expiry, `attention`, skill updates |
|
|
70
|
+
| `awesomate_get_limits` | Before any create/change — live plan limits + workflow/AI-editor credit balances |
|
|
71
|
+
| `awesomate_get_plan_features` | The live plan ladder, so upgrade talk is accurate |
|
|
72
|
+
| `awesomate_list_sites` | What WordPress sites exist on this account |
|
|
73
|
+
| `awesomate_site_create` | Spin up a new WordPress site (check limits first) |
|
|
74
|
+
| `awesomate_list_domains` | What domains are attached, and to which site |
|
|
75
|
+
| `awesomate_domain_add` | Attach a custom domain to a site |
|
|
76
|
+
| `awesomate_dns_check` | Live answer to "where does this domain actually point" — before and after any DNS change |
|
|
77
|
+
| `awesomate_site_uptime` | 30-day availability, incidents, downtime per domain (cached, free) |
|
|
78
|
+
| `awesomate_snapshot_site` | Before ANY change to a live site — files + DB restore point |
|
|
79
|
+
| `awesomate_list_snapshots` | What restore points a site has |
|
|
80
|
+
| `awesomate_rollback_site` | Restore a snapshot after something went wrong (confirm first) |
|
|
81
|
+
| `awesomate_site_staging_create` / `_promote` / `_discard` | Private full copy on awesomate.dev to review changes; publish or throw away (§5a) |
|
|
82
|
+
| `awesomate_run_wp_cli` | Any WP-CLI command against a live site — plugins, options, users, maintenance |
|
|
83
|
+
| `awesomate_wp_post` | Create/update/read a WP post or page — drafts by default (writes are Support Plus+) |
|
|
84
|
+
| `awesomate_wp_media_import` | Pull an image/file into the WP media library from an https URL (Support Plus+) |
|
|
85
|
+
| `awesomate_uninstall_site` | Remove a WordPress install (destructive — confirm explicitly) |
|
|
86
|
+
| `awesomate_privacy_settings` | Read which privacy/consent toggles are on — explain a 403 `consent_required` precisely (the user flips toggles themselves at hub.awesomate.ai/settings?tab=privacy) |
|
|
87
|
+
| `awesomate_notifications` | The hub notification bell — `list` unread (quota warnings, quote ready, support-access events), `read`/`read_all` to clear |
|
|
88
|
+
| `awesomate_dashboard_metrics` | Account-wide numbers: executions by status, error rate, time saved, chat sessions, 7-day trend |
|
|
89
|
+
| `awesomate_account_report` | A monthly-report-shaped read: working / not working / engagement / commercials |
|
|
90
|
+
| `awesomate_skill_update` | Refresh these skills when `skill.updateAvailable` says so |
|
|
91
|
+
| `awesomate_support` | Raise a support ticket / reach a human |
|
|
92
|
+
| `awesomate_request_build` | Request a done-for-you build (spends a credit — confirm first) |
|
|
93
|
+
|
|
53
94
|
## 1. The plan model (so your nudges are accurate)
|
|
54
95
|
|
|
55
96
|
| Plan | WP sites | Hosted apps | Custom domains | Shell / Claude Code | Notes |
|
|
56
97
|
|---|---|---|---|---|---|
|
|
57
|
-
| **Essentials** | 1 | 0 |
|
|
58
|
-
| **Support Plus** | 2 | 5 |
|
|
59
|
-
| **Pro** | 10 | 20 |
|
|
98
|
+
| **Essentials** | 1 | 0 | 1 | **No** | read/status + upgrade nudges only |
|
|
99
|
+
| **Support Plus** | 2 | 5 | 5 | **Yes** | shell, WP-CLI, snapshot/rollback, deploy, app builder |
|
|
100
|
+
| **Pro** | 10 | 20 | 20 | **Yes** | + higher limits |
|
|
60
101
|
| **Embedded** | 100 | 100 | 100 | **Yes** | agency tier, not generally available |
|
|
61
102
|
|
|
62
103
|
Authoritative limits are what `awesomate_get_limits` returns for THIS account
|
|
@@ -72,7 +113,9 @@ recommended plan instead.
|
|
|
72
113
|
Allowed: `awesomate_get_context`, `_get_hosting_status` (hosting stats),
|
|
73
114
|
`_get_hosting_account`, `_list_sites`, `_list_domains`, `_get_limits` (plan
|
|
74
115
|
limits AND workflow/AI-editor credit balances), `_get_plan_features` (live plan
|
|
75
|
-
ladder),
|
|
116
|
+
ladder), the other reads (`_dns_check`, `_site_uptime`, `_notifications`,
|
|
117
|
+
`_dashboard_metrics`, `_account_report`, `_privacy_settings`), and 1-click
|
|
118
|
+
WP-admin / cPanel SSO links. Billing/plan changes: §4.
|
|
76
119
|
|
|
77
120
|
Never attempt SSH, WP-CLI, snapshot/rollback, staging, deploy, multi-site —
|
|
78
121
|
those tools will 403. Instead, surface the specific limit and what
|
|
@@ -97,6 +140,12 @@ at it. Their dev copy is invisible to Google and AI crawlers by policy.
|
|
|
97
140
|
- **Before ANY change to a live site** — plugin/theme/core update, `search-replace`,
|
|
98
141
|
bulk edit, deploy — call **`awesomate_snapshot_site`** first and tell the user the
|
|
99
142
|
`snapshotId`. If it goes wrong, `awesomate_rollback_site` restores files + DB.
|
|
143
|
+
- **WP content writes are snapshot-first and drafts-first.** Before the FIRST
|
|
144
|
+
content write of a session on a live site (an `awesomate_wp_post` write, a
|
|
145
|
+
content-touching WP-CLI command), take one `awesomate_snapshot_site`.
|
|
146
|
+
`awesomate_wp_post` creates DRAFTS by default — never pass
|
|
147
|
+
`status: 'publish'` unless the user has seen the content or explicitly said
|
|
148
|
+
to publish.
|
|
100
149
|
- **Confirm before destructive actions** — `awesomate_rollback_site`,
|
|
101
150
|
`awesomate_site_staging_promote` (replaces live), `_site_staging_discard`
|
|
102
151
|
(loses unpublished staging work), dropping tables, `wp db reset`, deleting
|
|
@@ -165,15 +214,18 @@ Prefer this flow over editing live whenever the change is user-visible
|
|
|
165
214
|
|
|
166
215
|
Awesomate's snapshots are your safety net, so Git isn't required — but for real
|
|
167
216
|
version history and diffs, initialise a repo in the Studio site folder and use
|
|
168
|
-
the `gh` CLI (`gh auth login`, `gh repo create`). Let the
|
|
169
|
-
|
|
217
|
+
the `gh` CLI (`gh auth login`, `gh repo create`). Let the **awesomate-github**
|
|
218
|
+
skill drive the Git workflow; this skill just deploys the result.
|
|
170
219
|
|
|
171
220
|
## 7. Bundled scripts (`scripts/`)
|
|
172
221
|
|
|
173
|
-
- `bootstrap.mjs` — one-time setup: redeems the hub setup code for a scoped
|
|
174
|
-
token
|
|
175
|
-
|
|
176
|
-
|
|
222
|
+
- `bootstrap.mjs` — one-time setup: redeems the hub setup code for a scoped
|
|
223
|
+
access token and installs the skills. Run it with `--update` to refresh the
|
|
224
|
+
installed skills from the current package without redeeming a new setup
|
|
225
|
+
code. It also stores the token (chmod 600), **installs the skills into
|
|
226
|
+
`~/.claude/skills`**, registers the MCP server, and does best-effort SSH
|
|
227
|
+
setup (Support Plus+). Invocation + failure modes:
|
|
228
|
+
`references/connect-troubleshooting.md`.
|
|
177
229
|
- `ssh-connect.sh` — open a jailed SSH session (or run one remote command).
|
|
178
230
|
- `wp.sh` — run a WP-CLI command against a live site over that SSH.
|
|
179
231
|
- `deploy.sh` — snapshot-first Studio→live deploy (files, optional DB).
|
|
@@ -184,3 +236,17 @@ Git skills drive the Git workflow; this skill just deploys the result.
|
|
|
184
236
|
(`references/connect-troubleshooting.md`); `--submit` returns a reference ID.
|
|
185
237
|
|
|
186
238
|
All scripts read `~/.awesomate/credentials.json`; none take secrets on the CLI.
|
|
239
|
+
|
|
240
|
+
## 8. The other Awesomate skills
|
|
241
|
+
|
|
242
|
+
This skill is the front door; deeper work belongs to its siblings (same
|
|
243
|
+
connection, same PAT — just load the skill):
|
|
244
|
+
|
|
245
|
+
- Automations, workflows, AI agents, data tables → **awesomate-n8n**
|
|
246
|
+
- Building an app or a landing page → **awesomate-app-builder**
|
|
247
|
+
- Knowledge base / "train the AI on my content" → **awesomate-knowledge**
|
|
248
|
+
- SEO and AI discoverability → **awesomate-seo**
|
|
249
|
+
- Handing over any secret (API key, token, password) → **awesomate-credentials**
|
|
250
|
+
- Version control / backing up their work → **awesomate-github**
|
|
251
|
+
- Where should this data live (data table vs Postgres) → **awesomate-database**
|
|
252
|
+
- Plans, credits, billing, or reaching a human → **awesomate-support**
|
|
@@ -305,10 +305,17 @@ function installSkill() {
|
|
|
305
305
|
const hostingSkill = dirname(dirname(selfPath));
|
|
306
306
|
const skillRoot = dirname(hostingSkill);
|
|
307
307
|
const isPackageLayout = basename(skillRoot) === 'skill';
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
308
|
+
if (!isPackageLayout) {
|
|
309
|
+
// Running from an INSTALLED copy (~/.claude/skills/...): the siblings here
|
|
310
|
+
// are the user's other skills, not the bundle, and this skill's src IS its
|
|
311
|
+
// dest — so an "update" from here silently refreshed nothing while
|
|
312
|
+
// reporting success. Say so honestly and point at the two real paths.
|
|
313
|
+
console.log('• This is the installed copy of the skill — it cannot refresh the bundle from here.');
|
|
314
|
+
console.log(' Update instead with the awesomate_skill_update tool in Claude Code, or re-run the');
|
|
315
|
+
console.log(' full bootstrap: npx -y --package=@awesomate/hosting-mcp awesomate-hosting-bootstrap --update');
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
const bundled = readdirSync(skillRoot);
|
|
312
319
|
// Package version, stamped into each installed skill as .installed-version.
|
|
313
320
|
// The MCP server (always latest via unpinned npx) compares it against its own
|
|
314
321
|
// version and reports skill.updateAvailable in awesomate_get_context.
|
|
@@ -57,6 +57,7 @@ platform's answer beats anything you remember.
|
|
|
57
57
|
| Agent persona / fallback message / model tier — get & set (the single workspace default) | `awesomate_knowledge_agent` |
|
|
58
58
|
| Agent BUILDER: list / get / create (AI-drafted from their content, saved as a private draft) / test the draft / publish (explicit approval first) | `awesomate_knowledge_agents` |
|
|
59
59
|
| People, places, topics: list / name / hide / merge / alias suggestions / re-run resolution | `awesomate_knowledge_people` |
|
|
60
|
+
| Business-data warehouse: `metrics` / `datasets` / `query` / `imports` — answer quantitative questions from their own imported business data (query is free-form but read-only) | `awesomate_knowledge_data` |
|
|
60
61
|
| Refresh these skills from the latest package | `awesomate_skill_update` |
|
|
61
62
|
|
|
62
63
|
Local FILES (PDFs, videos on disk) cannot travel through these tools — send
|
|
@@ -88,6 +89,17 @@ bigger media by URL). Formats + caps: [ingestion-sources.md](references/ingestio
|
|
|
88
89
|
([n8n-connection.md](references/n8n-connection.md)) — never hand-build
|
|
89
90
|
the credential.
|
|
90
91
|
|
|
92
|
+
Two natural follow-ons, each one sentence when the moment fits:
|
|
93
|
+
|
|
94
|
+
- **The same content should feed SEO.** What makes a good knowledge source
|
|
95
|
+
(a services page, an FAQ, an about page) is exactly what `llms.txt` and AI
|
|
96
|
+
discoverability need on their public site — route to the **awesomate-seo**
|
|
97
|
+
skill.
|
|
98
|
+
- **"Ask my knowledge base on a schedule" / "build me reports"** — that's
|
|
99
|
+
the weekly-pulse recipe in the **awesomate-n8n** skill
|
|
100
|
+
(`references/recurring-reports.md`); knowledge usage joins the report via
|
|
101
|
+
`awesomate_knowledge_status`.
|
|
102
|
+
|
|
91
103
|
## 4. REST fallback (no `awesomate_knowledge_*` tools loaded, or an action with no tool)
|
|
92
104
|
|
|
93
105
|
Auth exactly as the awesomate-hosting skill: `Authorization: Bearer <pat>`
|
|
@@ -49,6 +49,21 @@ designing or diagnosing — it is the live truth for THIS platform ($vars not
|
|
|
49
49
|
$env, `$json.body`, task-runner limits, activation semantics). When it
|
|
50
50
|
conflicts with anything under `references/vendor/`, platform-notes wins.
|
|
51
51
|
|
|
52
|
+
## 0a. Health sweep — the guardian pattern
|
|
53
|
+
|
|
54
|
+
At the START of any n8n session, alongside the context call: run
|
|
55
|
+
`awesomate_n8n_errors` (last 7 days) and `awesomate_n8n_kpis` once. If
|
|
56
|
+
something is failing, surface it in ONE line in the user's language — "two of
|
|
57
|
+
your automations failed overnight — want me to look?" — before proceeding
|
|
58
|
+
with the asked task. If everything is green, say nothing and get on with it.
|
|
59
|
+
Never let the sweep hijack the session; the user's ask comes first unless
|
|
60
|
+
they say otherwise.
|
|
61
|
+
|
|
62
|
+
When diagnosing, trust `errorSummary` only when `confident: true` (it then
|
|
63
|
+
also carries `errorType`, `code`, `lastNodeExecuted`). When `confident:
|
|
64
|
+
false`, the failing-node name came from a heuristic and may be WRONG — verify
|
|
65
|
+
the named node actually exists in the workflow before editing anything.
|
|
66
|
+
|
|
52
67
|
## 1. Tools
|
|
53
68
|
|
|
54
69
|
| Task | Tool |
|
|
@@ -56,12 +71,17 @@ conflicts with anything under `references/vendor/`, platform-notes wins.
|
|
|
56
71
|
| Session context, consent, quotas, fingerprint | `awesomate_n8n_context` |
|
|
57
72
|
| All workflows (node-level summaries) / one workflow (`detail: full\|structure`) | `awesomate_n8n_workflows` |
|
|
58
73
|
| Node inventory, datatables (+rows), possibilities, credentials, $vars | `awesomate_n8n_inspect` |
|
|
74
|
+
| Instance KPIs: exec totals, error rate, avg/p95 duration, time saved, 7d-vs-prior deltas (per-workflow adds `last_error_at` + `clean_days`) | `awesomate_n8n_kpis` |
|
|
75
|
+
| Instance-WIDE error events grouped by fingerprint (category, workflow, node, occurrences, first/last seen) — "what is broken across everything" | `awesomate_n8n_errors` |
|
|
76
|
+
| Execution/table/DB byte sizes + 24h per-workflow offenders ("your executions weigh 4GB") | `awesomate_n8n_storage` |
|
|
77
|
+
| AI error-analyzer findings: clientSummary, needsClientAction, fixReady (Pro/Embedded + the "AI error analysis" privacy toggle; read-only) | `awesomate_n8n_findings` |
|
|
59
78
|
| Executions list / detail / node-by-node debug | `awesomate_n8n_executions` |
|
|
60
79
|
| Node schemas, node search, community templates, node-level validation | `awesomate_n8n_node_docs` |
|
|
61
80
|
| Validate / create draft / update draft / activate / promote / rollback / delete draft | `awesomate_n8n_deploy` |
|
|
62
81
|
| Fire a test payload at an active workflow | `awesomate_n8n_test` |
|
|
63
82
|
| Create/alter data tables, write rows | `awesomate_n8n_datatable_write` |
|
|
64
83
|
| Provision a Postgres DB + n8n credential | `awesomate_n8n_provision_pg` |
|
|
84
|
+
| Wire a tested webhook workflow into one of their hosted apps (stores URL + secret on the app; returns the secret ONCE for the workflow's header check) | `awesomate_n8n_attach_to_app` |
|
|
65
85
|
| Refresh these skills from the latest package | `awesomate_skill_update` |
|
|
66
86
|
|
|
67
87
|
No `awesomate_n8n_*` tools in this session (fresh bootstrap, or the server
|
|
@@ -79,6 +99,8 @@ they're blocked on a restart.
|
|
|
79
99
|
| Anything involving data tables | [datatables.md](references/datatables.md) |
|
|
80
100
|
| Building AI agents / chatbots / LLM steps | [ai-agents.md](references/ai-agents.md) |
|
|
81
101
|
| A workflow is failing | [troubleshooting.md](references/troubleshooting.md) |
|
|
102
|
+
| Error plans, error workflows, notify-the-owner on failure | [error-handling.md](references/error-handling.md) |
|
|
103
|
+
| A weekly business report / "email me my numbers" | [recurring-reports.md](references/recurring-reports.md) |
|
|
82
104
|
| Changing a LIVE workflow | [upgrade-loop.md](references/upgrade-loop.md) |
|
|
83
105
|
| "What could I automate?" | [possibilities.md](references/possibilities.md) |
|
|
84
106
|
| WordPress form → n8n | [wp-form-handler.md](references/wp-form-handler.md) |
|
|
@@ -142,7 +164,9 @@ Full procedure: [upgrade-loop.md](references/upgrade-loop.md).
|
|
|
142
164
|
Executions list → detail → walk the item data BACKWARDS (the cause is
|
|
143
165
|
usually upstream) → `debug: true` for node-level output → check against
|
|
144
166
|
[troubleshooting.md](references/troubleshooting.md) → explain in the user's
|
|
145
|
-
terms with the exact fix.
|
|
167
|
+
terms with the exact fix. Trust `errorSummary` only on `confident: true`
|
|
168
|
+
(§0a). While you're there, check whether the workflow has an error plan at
|
|
169
|
+
all — [error-handling.md](references/error-handling.md). Self-built workflows: fix via update_draft or the
|
|
146
170
|
upgrade loop. Agency-managed (`agency_managed` error): read and explain
|
|
147
171
|
freely; changes go through Awesomate support.
|
|
148
172
|
|
|
@@ -151,7 +175,9 @@ freely; changes go through Awesomate support.
|
|
|
151
175
|
`awesomate_n8n_inspect {what:'possibilities'}` returns facts; YOU make the
|
|
152
176
|
suggestions — grounded, ≤8, honestly labelled with what each needs. Rules:
|
|
153
177
|
[possibilities.md](references/possibilities.md). Offer it once, in one
|
|
154
|
-
sentence, after the first inventory pass when the user's ask is vague.
|
|
178
|
+
sentence, after the first inventory pass when the user's ask is vague. One
|
|
179
|
+
standing recipe worth offering: the weekly business pulse —
|
|
180
|
+
[recurring-reports.md](references/recurring-reports.md).
|
|
155
181
|
|
|
156
182
|
## 7. Hard rules
|
|
157
183
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Error handling — every production workflow needs a plan
|
|
2
|
+
|
|
3
|
+
A workflow with no error plan fails silently: the run turns red in a list
|
|
4
|
+
nobody looks at, and the user finds out days later when a customer asks why
|
|
5
|
+
they never got a reply. Before you call any build "done", it needs one of
|
|
6
|
+
two things (both is better):
|
|
7
|
+
|
|
8
|
+
1. **A per-node error plan** — retry/fallback on the nodes that can fail.
|
|
9
|
+
2. **An error workflow** — a separate workflow that runs whenever THIS one
|
|
10
|
+
fails and notifies the OWNER.
|
|
11
|
+
|
|
12
|
+
**Errors route to the client, never to Awesomate.** The notification target
|
|
13
|
+
is always the user's own email/Slack/inbox — they own the automation, they
|
|
14
|
+
get told when it breaks. Never wire a notification to an Awesomate address.
|
|
15
|
+
|
|
16
|
+
## 1. Per-node error plans
|
|
17
|
+
|
|
18
|
+
Every node has error settings (in the workflow JSON, on the node object):
|
|
19
|
+
|
|
20
|
+
- `retryOnFail: true` + `maxTries` (2–3) + `waitBetweenTries` (ms) — for
|
|
21
|
+
anything that can fail transiently: HTTP calls, email sends, API nodes.
|
|
22
|
+
- `onError: 'continueErrorOutput'` — gives the node a second (error) output
|
|
23
|
+
you can route to a fallback branch (log the failure to a data table, send
|
|
24
|
+
an apology, use a default value). Use when the workflow should keep going.
|
|
25
|
+
- `onError: 'stopWorkflow'` (the default) — right when continuing would do
|
|
26
|
+
damage (don't charge a card after the lookup failed).
|
|
27
|
+
|
|
28
|
+
Rule of thumb from the build loop: **every external call has an error plan.**
|
|
29
|
+
An HTTP Request with no retry and no error branch is a design gap, not a
|
|
30
|
+
style choice.
|
|
31
|
+
|
|
32
|
+
## 2. The error workflow (`settings.errorWorkflow`)
|
|
33
|
+
|
|
34
|
+
n8n lets any workflow name another workflow as its **error workflow**: when a
|
|
35
|
+
run fails, n8n executes that workflow with the failure details. The link
|
|
36
|
+
lives in the workflow's settings:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{ "settings": { "errorWorkflow": "<workflow id of the error handler>" } }
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**To check whether a workflow has one:** `awesomate_n8n_workflows` with the
|
|
43
|
+
id and `detail: 'full'` — look at `settings.errorWorkflow`. Empty/absent =
|
|
44
|
+
failures go nowhere.
|
|
45
|
+
|
|
46
|
+
**Agency-deployed workflows may already have an error handler wired** (the
|
|
47
|
+
bundle installs one that alerts the user). Don't replace or repoint it — it
|
|
48
|
+
outranks anything you'd build for that slot. Check what the existing handler
|
|
49
|
+
does before adding your own.
|
|
50
|
+
|
|
51
|
+
## 3. Building a simple notify-me error workflow
|
|
52
|
+
|
|
53
|
+
Two nodes:
|
|
54
|
+
|
|
55
|
+
1. **Error Trigger** (`n8n-nodes-base.errorTrigger`) — no parameters; it
|
|
56
|
+
fires when any workflow that names this one as its errorWorkflow fails.
|
|
57
|
+
Its output includes the failed workflow's name/id, the execution id and
|
|
58
|
+
URL, and the error message + node.
|
|
59
|
+
2. **Send Email** (reuse their existing email credential from the inventory)
|
|
60
|
+
— to the USER's address, subject like
|
|
61
|
+
`[Automation failed] {{ $json.workflow.name }}`, body with the error
|
|
62
|
+
message, the node that failed, and the execution URL so they can open it.
|
|
63
|
+
|
|
64
|
+
Build it through the normal loop (validate → create_draft → approval →
|
|
65
|
+
activate), then set `settings.errorWorkflow` on each production workflow via
|
|
66
|
+
`update_draft`/promote. One error workflow can serve every workflow on the
|
|
67
|
+
instance — build it once, point everything at it.
|
|
68
|
+
|
|
69
|
+
Test it honestly: you can't fake a failure through `awesomate_n8n_test`
|
|
70
|
+
without breaking something, so tell the user what will happen ("if any of
|
|
71
|
+
these fail, you'll get an email like this") and verify the error workflow
|
|
72
|
+
itself runs by executing it against a sample payload where possible.
|
|
73
|
+
|
|
74
|
+
## 4. AI error analysis (`awesomate_n8n_findings`)
|
|
75
|
+
|
|
76
|
+
On Pro/Embedded with the "AI error analysis" privacy toggle on, Awesomate's
|
|
77
|
+
platform already analyzes their failures. `awesomate_n8n_findings` returns
|
|
78
|
+
those findings for their account — `clientSummary` (plain-language
|
|
79
|
+
explanation), `needsClientAction` (something only they can do, like
|
|
80
|
+
reconnecting a credential), and `fixReady` (a fix exists). It is read-only:
|
|
81
|
+
use it to explain and prioritise, not as a substitute for your own diagnosis
|
|
82
|
+
of the execution data. On a 403, the plan or the toggle is the reason —
|
|
83
|
+
`awesomate_privacy_settings` (hosting skill) tells you which; the user flips
|
|
84
|
+
toggles themselves at hub.awesomate.ai/settings?tab=privacy.
|
|
85
|
+
|
|
86
|
+
## 5. What to do when you inherit a workflow with no plan
|
|
87
|
+
|
|
88
|
+
When diagnosing a failure (SKILL.md §5) on a workflow with no error plan,
|
|
89
|
+
say so in one line after the fix: "this workflow has no failure alert — want
|
|
90
|
+
me to add one so you hear about the next one from your inbox instead of from
|
|
91
|
+
a customer?" Once per session, not on every workflow.
|
|
@@ -9,8 +9,18 @@ instance's real inventory — never in what n8n generically supports.
|
|
|
9
9
|
|---|---|
|
|
10
10
|
| Explicit ask ("what could I automate", "give me ideas", "what else") | Run the inspect, present the tiers below |
|
|
11
11
|
| Vague request, right after the first inventory pass | ONE offering sentence ("Based on what you have connected I can suggest a few automations — want that?"), then wait |
|
|
12
|
+
| The inventory shows something striking | ONE grounded observation, once per session, in one line — then back to the task |
|
|
12
13
|
| Anything else | Never volunteer an unprompted idea dump |
|
|
13
14
|
|
|
15
|
+
**The one-observation rule:** never dump a list unprompted, but a single
|
|
16
|
+
grounded observation per session is welcome when the inventory genuinely
|
|
17
|
+
shows something. Examples: `awesomate_n8n_storage` shows executions heavy
|
|
18
|
+
with media/binary data → "you've got 4GB of generated media sitting in
|
|
19
|
+
executions — want a small app to browse it?" (awesomate-app-builder); a
|
|
20
|
+
credential for a paid SaaS whose job an n8n workflow could do → name what it
|
|
21
|
+
would replace. One line, grounded in a number or a name from THEIR account,
|
|
22
|
+
easy to decline.
|
|
23
|
+
|
|
14
24
|
## Data source — facts only
|
|
15
25
|
|
|
16
26
|
`awesomate_n8n_inspect {what:'possibilities'}` returns facts, zero ideas.
|
|
@@ -25,6 +35,18 @@ Ideation is your job; this payload is the ground truth you build on:
|
|
|
25
35
|
| `communityPackages` | `{packageName, installedVersion, nodeTypes}`. **null = unknown, [] = verified none — never collapse the two** |
|
|
26
36
|
| `counts` | `workflows`, `activeWorkflows`, `credentials`, `datatables` (null = table absent on this n8n version) |
|
|
27
37
|
|
|
38
|
+
**Other legitimate inventory inputs** (same grounding standard — a real
|
|
39
|
+
number from their account, never a guess):
|
|
40
|
+
|
|
41
|
+
- `awesomate_n8n_storage` — heavy media/binary in executions is a signal
|
|
42
|
+
(a browse/archive app, a cleanup automation, a delivery workflow).
|
|
43
|
+
- WP media and post counts via `awesomate_run_wp_cli`
|
|
44
|
+
(`['media','list','--format=count']`, `['post','list','--format=count']`)
|
|
45
|
+
— a big library with no automation around it suggests publishing or
|
|
46
|
+
repurposing workflows.
|
|
47
|
+
- `awesomate_knowledge_sources {action:'summary'}` — content already
|
|
48
|
+
ingested is content an agent or workflow could answer from.
|
|
49
|
+
|
|
28
50
|
## Presentation — at most 8 ideas, three grounded tiers
|
|
29
51
|
|
|
30
52
|
Order by concreteness. Skip a tier rather than pad it.
|
|
@@ -42,6 +64,16 @@ Order by concreteness. Skip a tier rather than pad it.
|
|
|
42
64
|
a plan upgrade ("builds need Support Plus+"), or the FFMPEG variant
|
|
43
65
|
("media nodes are Support Plus+ only"). Never disguise tier 3 as tier 2.
|
|
44
66
|
|
|
67
|
+
**Say what it saves.** Every suggestion carries its money line: the hours
|
|
68
|
+
per week it removes ("that's the 2 hours you spend re-typing enquiries"),
|
|
69
|
+
the SaaS subscription it replaces ("this is what you're paying $49/mo for"),
|
|
70
|
+
or the missed-lead cost it prevents ("the enquiries that arrive after 6pm
|
|
71
|
+
currently wait overnight"). The yardstick: a credit is $100 and a
|
|
72
|
+
done-for-you build spends 1 credit — an idea worth suggesting should beat
|
|
73
|
+
that comparison obviously, and saying so is what makes the suggestion
|
|
74
|
+
concrete rather than a feature tour. Estimates are estimates — say "roughly"
|
|
75
|
+
and ground them in their numbers, never invent precision.
|
|
76
|
+
|
|
45
77
|
## Grounding rules (hard)
|
|
46
78
|
|
|
47
79
|
- Only suggest nodes present on THIS variant. `capabilities.variant` from
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Recurring reports — the weekly business pulse
|
|
2
|
+
|
|
3
|
+
A short weekly email that tells the owner how the business machinery is
|
|
4
|
+
doing: what came in, what went out, what broke. Built once, then it just
|
|
5
|
+
arrives. This is one of the highest-value things you can offer a business
|
|
6
|
+
owner, because it replaces "I should check on that" with an inbox habit.
|
|
7
|
+
|
|
8
|
+
There are two versions, and they report different things. Be honest about
|
|
9
|
+
the boundary between them.
|
|
10
|
+
|
|
11
|
+
## The boundary (read this before promising anything)
|
|
12
|
+
|
|
13
|
+
- **Hub metrics** — execution counts, error rates, time saved, site uptime,
|
|
14
|
+
knowledge usage — come from YOUR tools (`awesomate_n8n_kpis`,
|
|
15
|
+
`awesomate_n8n_errors`, `awesomate_site_uptime`,
|
|
16
|
+
`awesomate_knowledge_status`). Those tools authenticate with the user's
|
|
17
|
+
PAT on this machine. **A workflow inside their n8n cannot call them**, and
|
|
18
|
+
it can't query n8n's own execution database either.
|
|
19
|
+
- **Business data** — leads captured, emails sent, orders processed — lives
|
|
20
|
+
in the data tables, apps, and services their automations already touch.
|
|
21
|
+
**That's what a scheduled workflow CAN report on.**
|
|
22
|
+
|
|
23
|
+
So: on-demand pulse = you, from hub metrics. Scheduled pulse = a workflow,
|
|
24
|
+
from business data. Offer both; never promise the scheduled one will contain
|
|
25
|
+
hub metrics.
|
|
26
|
+
|
|
27
|
+
## Version 1 — on demand, assembled by you (no build needed)
|
|
28
|
+
|
|
29
|
+
When the user asks "how's everything going?" or it's report time, assemble
|
|
30
|
+
it live:
|
|
31
|
+
|
|
32
|
+
1. `awesomate_n8n_kpis` — executions, error rate, time saved, 7d-vs-prior.
|
|
33
|
+
2. `awesomate_n8n_errors` (last 7 days) — anything broken, grouped.
|
|
34
|
+
3. `awesomate_site_uptime` — per-domain availability and incidents.
|
|
35
|
+
4. `awesomate_knowledge_status` — usage vs quota, if they have a knowledge base.
|
|
36
|
+
|
|
37
|
+
Present it as a short plain-language summary — five lines, not a dashboard:
|
|
38
|
+
what ran, what it saved, what failed (and whether it's fixed), site status.
|
|
39
|
+
Numbers with no comparison are noise; lead with the deltas.
|
|
40
|
+
|
|
41
|
+
## Version 2 — scheduled, built once as a workflow
|
|
42
|
+
|
|
43
|
+
The recipe:
|
|
44
|
+
|
|
45
|
+
**Schedule Trigger** (Monday 8am, THEIR timezone — ask, don't assume) →
|
|
46
|
+
**gather** → **format** → **Send Email** to the owner.
|
|
47
|
+
|
|
48
|
+
The gather step reads the business data their automations already produce:
|
|
49
|
+
|
|
50
|
+
- Data tables the workflows write to — new rows this week (leads captured,
|
|
51
|
+
form submissions, orders logged). A `Get row(s)` per table with a
|
|
52
|
+
created-this-week filter, or a Code node to count.
|
|
53
|
+
- Services they have credentials for — e.g. their CRM or store, queried
|
|
54
|
+
through the same nodes their workflows already use.
|
|
55
|
+
- Their own hosted app's API, if one exists (the app can expose a
|
|
56
|
+
`/api/stats` endpoint — awesomate-app-builder territory).
|
|
57
|
+
|
|
58
|
+
Format in a Code node (short HTML: 3–6 lines of "this week vs last week"),
|
|
59
|
+
then Send Email with their existing email credential.
|
|
60
|
+
|
|
61
|
+
Build notes:
|
|
62
|
+
|
|
63
|
+
- Follow the full build loop (validate → draft → approval → activate → test).
|
|
64
|
+
Test by running the workflow once manually and checking the email arrives
|
|
65
|
+
and the numbers match reality — a report that's wrong once is never
|
|
66
|
+
trusted again.
|
|
67
|
+
- Store last week's numbers in a small data table so the report can show
|
|
68
|
+
deltas ("12 leads, up from 8"). Same pattern as any remember-between-runs
|
|
69
|
+
need ([datatables.md](datatables.md)).
|
|
70
|
+
- Keep it to what their inventory actually has. A report line per data
|
|
71
|
+
source they own beats a template full of "N/A".
|
|
72
|
+
- Give the workflow an error plan ([error-handling.md](error-handling.md)) —
|
|
73
|
+
a silent failure in the report workflow is the report lying by omission.
|
|
74
|
+
|
|
75
|
+
## Offering it
|
|
76
|
+
|
|
77
|
+
Offer once, in one sentence, when the moment fits (after a health sweep,
|
|
78
|
+
after building their first few automations): "Want a short weekly email with
|
|
79
|
+
your numbers — what ran, what it saved, what needs attention? I can do it on
|
|
80
|
+
demand now, and build the scheduled version once you like the shape."
|
|
81
|
+
Starting with Version 1 is the cheap way to find out what they actually want
|
|
82
|
+
in it before a workflow exists.
|