@awesomate/hosting-mcp 0.76.0 → 0.86.0
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/dist/index.js +383 -69
- package/package.json +1 -1
- package/skill/CHANGELOG.json +70 -2
- package/skill/awesomate-hosting/SKILL.md +3 -3
- package/skill/awesomate-knowledge/SKILL.md +18 -11
- package/skill/awesomate-knowledge/evals/provision-first-run/graders/grader.md +2 -1
- package/skill/awesomate-knowledge/references/faqs.md +22 -7
- package/skill/awesomate-knowledge/references/from-your-files.md +52 -8
- package/skill/awesomate-knowledge/references/ingestion-sources.md +1 -1
- package/skill/awesomate-knowledge/references/n8n-connection.md +6 -4
- package/skill/awesomate-n8n/SKILL.md +1 -0
- package/skill/awesomate-n8n/references/decisions.md +64 -0
- package/skill/awesomate-onebrain/SKILL.md +48 -19
- package/skill/awesomate-seo/SKILL.md +26 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awesomate/hosting-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.86.0",
|
|
4
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",
|
package/skill/CHANGELOG.json
CHANGED
|
@@ -1,5 +1,73 @@
|
|
|
1
1
|
{
|
|
2
2
|
"versions": [
|
|
3
|
+
{
|
|
4
|
+
"version": "0.86.0",
|
|
5
|
+
"highlights": [
|
|
6
|
+
"Claude can read how often ChatGPT and Gemini name your business for your site (awesomate_ai_visibility): the score, the questions where neither app names you, who they name instead and the sites they rely on, so it knows what to fix first. Approving the questions stays your own click in the hub."
|
|
7
|
+
]
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"version": "0.85.0",
|
|
11
|
+
"highlights": [
|
|
12
|
+
"When the Knowledge Base answers from general knowledge instead of your content, Claude no longer passes that answer off as your \"no answer\" message: it tells you your content does not cover the question"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"version": "0.84.0",
|
|
17
|
+
"highlights": [
|
|
18
|
+
"A website chat only ever runs a Public agent: Claude checks the agent is Public before connecting a chat to your site, and a chat with no agent set now says it is not set up yet instead of answering"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"version": "0.83.0",
|
|
23
|
+
"highlights": [
|
|
24
|
+
"Adding a web page or a whole website as public now asks first: Claude checks with you, then confirms with your account name, because anything public can be seen by your customers and public chatbots"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"version": "0.82.0",
|
|
29
|
+
"highlights": [
|
|
30
|
+
"Claude can read your customers' support inbox (awesomate_support_desk): whether it is on, your tickets, and one ticket's messages, your team's notes and any reply the AI is holding for your OK. It reads only: replying stays a person's click in the hub, under Contacts, Support"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"version": "0.81.0",
|
|
35
|
+
"highlights": [
|
|
36
|
+
"Claude can list the decisions waiting in your business (awesomate_tasks 'decisions'): what your agents and automations are holding for a person's OK, who decides each and by when. It can never approve one: that stays a person's tap in the hub",
|
|
37
|
+
"Your business map holds what each role approves alone (an amount and a discount); Claude reads the limits and can suggest them, and lowering one applies straight away",
|
|
38
|
+
"Claude can build an automation that waits for a person's OK before it acts: Hold for a decision, then a Wait that only the hub can resume"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"version": "0.80.0",
|
|
43
|
+
"highlights": [
|
|
44
|
+
"Spreadsheets in your Files folders go into Knowledge too: Claude adds one as knowledge or as data, and a synced folder adds its spreadsheets the way you choose (until you choose, they are skipped and the sync says why)",
|
|
45
|
+
"After publishing your FAQs, Claude tells you which of your agents won't answer from them yet (an agent limited to another collection, or to other kinds of content) and how to fix it. An FAQ set can be put in a collection as it is created",
|
|
46
|
+
"Claude limits a new agent to the right collection when it creates it, and warns you when an agent it drafted would read every collection, or would skip your PDFs, FAQs or images"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"version": "0.79.0",
|
|
51
|
+
"highlights": [
|
|
52
|
+
"Spreadsheets upload again: Claude says whether a spreadsheet goes in as knowledge (each row a record people can ask about, like a price list or timetable) or as data (totals and trends, like invoice history), and asks you when it isn't obvious",
|
|
53
|
+
"Renaming a source works: Claude can give an uploaded file a proper title, since uploads arrive titled from the file name with underscores",
|
|
54
|
+
"Claude sends you to the right switch for Knowledge: Settings, Features, then \"Use your content for Knowledge\" under Knowledge",
|
|
55
|
+
"Claude can ask your published agent a question the way a website visitor would, to check what the public actually sees, and pause or restart an agent with your yes"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"version": "0.78.0",
|
|
60
|
+
"highlights": [
|
|
61
|
+
"1Brain onboarding: Claude can build a 1Brain course for a role on your business map from that role's 1Brain systems, or a starter course for everyone joining, and start someone's onboarding, which gives them their courses as Tasks",
|
|
62
|
+
"Each morning the hub checks the quizzes passed and acknowledgements done in 1Brain, and when someone has finished a role's course it asks their future manager whether to hand the role over. Finishing a course never changes anyone's access by itself"
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"version": "0.77.0",
|
|
67
|
+
"highlights": [
|
|
68
|
+
"Claude now reads and changes your business map in the same words you see: departments, sub-departments and roles. Its 1Brain actions are 'systems for role' and 'link role' (the old names still work)"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
3
71
|
{
|
|
4
72
|
"version": "0.76.0",
|
|
5
73
|
"highlights": [
|
|
@@ -428,13 +496,13 @@
|
|
|
428
496
|
"highlights": [
|
|
429
497
|
"Search your knowledge base with filters and ask questions within a slice of your content",
|
|
430
498
|
"People & entities: your knowledge base now recognises who appears in your content, and you can name and merge them",
|
|
431
|
-
"Build AI agents from your own content
|
|
499
|
+
"Build AI agents from your own content \u2014 drafted, tested privately, and published only when you approve"
|
|
432
500
|
]
|
|
433
501
|
},
|
|
434
502
|
{
|
|
435
503
|
"version": "0.14.0",
|
|
436
504
|
"highlights": [
|
|
437
|
-
"Tools built for business owners, not developers
|
|
505
|
+
"Tools built for business owners, not developers \u2014 plain-language answers about your account, plan and limits",
|
|
438
506
|
"New support skill: get help, understand credits, or request a done-for-you build without leaving Claude",
|
|
439
507
|
"New database skill: Claude picks the right place to keep your data and sets it up for you"
|
|
440
508
|
]
|
|
@@ -136,9 +136,9 @@ When the owner asks what to automate, delegate or build next, read the
|
|
|
136
136
|
business map first: **`awesomate_business_map`** action `gaps` (or attach
|
|
137
137
|
`awesomate://business/map`). Every business has seven departments (Envision,
|
|
138
138
|
Form, Promise, Balance, Fulfil, Refine, Share), each with sub-departments.
|
|
139
|
-
Inside them are **roles**, one person often holding several. The
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
Inside them are **roles**, one person often holding several. The tool uses the
|
|
140
|
+
same words as the owner sees: `departmentNo` (1 to 7), `subDepartmentNo` and
|
|
141
|
+
`roleId`. The gaps say
|
|
142
142
|
which departments have nothing helping them, which roles nobody holds, and how
|
|
143
143
|
many departments still fall to the owner, most important first. Work from the top gap, not from a guess.
|
|
144
144
|
|
|
@@ -37,11 +37,14 @@ platform's answer beats anything you remember.
|
|
|
37
37
|
link once, honestly, then help within what reads allow. Never retry
|
|
38
38
|
into the gate.
|
|
39
39
|
- `consent.knowledge_platform_enabled: false` → the user must turn it on
|
|
40
|
-
themselves: hub.awesomate.ai/settings?tab=
|
|
41
|
-
**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
themselves: **Settings → Features** (hub.awesomate.ai/settings?tab=features),
|
|
41
|
+
the **Knowledge** row, then the second line under it, **"Use your
|
|
42
|
+
content for Knowledge"**. Say plainly that switching on the Knowledge
|
|
43
|
+
feature itself is NOT this consent: it is the separate line beneath it.
|
|
44
|
+
It is not on the Privacy tab any more (an owner who was sent there
|
|
45
|
+
switched on the Knowledge feature and four unrelated Privacy toggles
|
|
46
|
+
before finding it). You cannot flip it for them, and there is no tool
|
|
47
|
+
that can. If you're unsure which toggle is blocking
|
|
45
48
|
(or a knowledge call 403s), call `awesomate_privacy_settings` — it
|
|
46
49
|
reads which consents are on or off and names the one that's stopping
|
|
47
50
|
you. Explain what it consents to (their selected content is indexed in
|
|
@@ -67,15 +70,15 @@ platform's answer beats anything you remember.
|
|
|
67
70
|
|---|---|
|
|
68
71
|
| Tenant state, plan gate, consent, quota, packs (CALL FIRST) | `awesomate_knowledge_status` |
|
|
69
72
|
| Enable the knowledge base (idempotent; 202 = keep polling status) | `awesomate_knowledge_provision` |
|
|
70
|
-
| The LIBRARY: search by title/tag/collection/visibility, list, add url·sitemap (with visibility, tags, collections), tag, set visibility (public needs the slug typed), move between collections, remove, ingest jobs | `awesomate_knowledge_sources` |
|
|
73
|
+
| The LIBRARY: search by title/tag/collection/visibility, list, add url·sitemap (with visibility, tags, collections), tag, rename (uploaded titles arrive slugified), set visibility (public needs the slug typed), move between collections, remove, ingest jobs | `awesomate_knowledge_sources` |
|
|
71
74
|
| Collections — named sets of sources a chatbot is scoped to: list / create / update / delete / add / remove members | `awesomate_knowledge_collections` |
|
|
72
75
|
| FAQs: sets of question-and-answer entries, imported as drafts, published with ONE owner yes, edited one answer at a time ([faqs.md](references/faqs.md)) | `awesomate_knowledge_faq` |
|
|
73
76
|
| Questions the public assistant couldn't answer: read why, publish the owner's answer with ONE yes, close similar ones in one go ([faqs.md](references/faqs.md)) | `awesomate_knowledge_faq` (`questions`, `question`, `answer`) |
|
|
74
|
-
| Keep a File Manager folder (their n8n file system) synced into the knowledge base: `sync_rules` / `sync_rule_create` / `sync_rule_delete` / `sync_run` / `sync_state` on the sources tool; one file at a time via `awesomate_knowledge_upload {fromFilesPath}` | `awesomate_knowledge_sources`, `awesomate_knowledge_upload` |
|
|
77
|
+
| Keep a File Manager folder (their n8n file system) synced into the knowledge base: `sync_rules` / `sync_rule_create` / `sync_rule_delete` / `sync_run` / `sync_state` on the sources tool; one file at a time via `awesomate_knowledge_upload {fromFilesPath}` (a spreadsheet needs `kind`, a folder rule `sheetKind`) | `awesomate_knowledge_sources`, `awesomate_knowledge_upload` |
|
|
75
78
|
| Instant search with facet counts (find WHAT is in there: moments, pages, datasets; free) | `awesomate_knowledge_search` |
|
|
76
79
|
| Ask a question → verified answer + numbered sources (accepts the same facet `filters` to ask within a slice) | `awesomate_knowledge_ask` |
|
|
77
80
|
| Agent persona / fallback message / model tier — get & set (the single workspace default) | `awesomate_knowledge_agent` |
|
|
78
|
-
| Agent BUILDER: list / get / create (AI-drafted from their content, saved as a private draft; pass `audience:'public'` for anything customers will talk to; it then answers from sources marked public ONLY) / update (edit the draft's instructions, grounding, no-answer message, audience and collection scope; nothing changes for callers until publish) / test the draft / publish (explicit approval first) | `awesomate_knowledge_agents` |
|
|
81
|
+
| Agent BUILDER: list / get / create (AI-drafted from their content, saved as a private draft; pass `audience:'public'` for anything customers will talk to; it then answers from sources marked public ONLY; ALWAYS scope it to the right collection with `collectionIds` and check `kinds`, since a drafted scope can read every collection, and relay the `warning` it returns) / update (edit the draft's instructions, grounding, no-answer message, audience and collection scope; nothing changes for callers until publish) / test the draft (ignores audience: NOT what the public sees) / visitor_test (the PUBLISHED agent as a website visitor gets it) / publish, suspend, resume (explicit approval first) | `awesomate_knowledge_agents` |
|
|
79
82
|
| People, places, topics: list / name / hide / merge / alias suggestions / re-run resolution | `awesomate_knowledge_people` |
|
|
80
83
|
| 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` |
|
|
81
84
|
| Refresh these skills from the latest package | `awesomate_skill_update` |
|
|
@@ -86,11 +89,14 @@ contents never enter the conversation. The owner can also use the hub's
|
|
|
86
89
|
Knowledge → Sources upload page themselves (100 MB per file; bigger media by
|
|
87
90
|
URL). Formats + caps: [ingestion-sources.md](references/ingestion-sources.md).
|
|
88
91
|
|
|
89
|
-
**`awesomate_knowledge_upload {path, title?}`** — ingest ONE file from the
|
|
92
|
+
**`awesomate_knowledge_upload {path, title?, kind?}`** — ingest ONE file from the
|
|
90
93
|
user's own computer. Pass a local path; the server streams it from disk, so
|
|
91
94
|
file contents never pass through the conversation. 100 MB max, one call per
|
|
92
95
|
file, explicit approval first (it spends allowance). URLs and sitemaps stay on
|
|
93
|
-
`awesomate_knowledge_sources`.
|
|
96
|
+
`awesomate_knowledge_sources`. A spreadsheet (csv, tsv, xls, xlsx, xlsm, json)
|
|
97
|
+
needs `kind`: `sheet` for rows a customer asks about (price lists, fee tables,
|
|
98
|
+
timetables), `data-import` for totals and trends (job or invoice history).
|
|
99
|
+
Ask when it is not obvious; never guess.
|
|
94
100
|
|
|
95
101
|
## 2. References — read on demand
|
|
96
102
|
|
|
@@ -151,7 +157,8 @@ enough to route through explicit REST calls the user has just approved.
|
|
|
151
157
|
| Faceted search (what `awesomate_knowledge_search` calls) | `GET /api/knowledge/explore?q=…` + the same facet params. **Add `&include=media` to get `url`/`poster_url` on image/video hits** — without it you get titles with nothing to display. |
|
|
152
158
|
| Business-data warehouse (what `awesomate_knowledge_data` calls) | `GET /api/knowledge/data/{metrics,datasets,datasets/:id,imports,imports/:id}` · `PATCH /api/knowledge/data/datasets/:id` · `POST /api/knowledge/data/imports/:id/:action` · `POST /api/knowledge/data/query` (read-only SQL) |
|
|
153
159
|
| Agent builder (what `awesomate_knowledge_agents` calls) | `GET\|POST /api/knowledge/agents` · `GET\|PATCH\|DELETE /api/knowledge/agents/:agent_id` · `POST /api/knowledge/agents/:agent_id/{publish,suspend,resume}` |
|
|
154
|
-
| **Test a DRAFT agent** (`action:'test'`) | `POST /api/knowledge/agents/:agent_id/chat` `{message, session_id?}`. There is **no** `/test` endpoint — guessing one returns 404. |
|
|
160
|
+
| **Test a DRAFT agent** (`action:'test'`) | `POST /api/knowledge/agents/:agent_id/chat` `{message, session_id?}`. There is **no** `/test` endpoint — guessing one returns 404. It ignores the agent's audience. |
|
|
161
|
+
| **Ask the PUBLISHED agent as a visitor** (`action:'visitor_test'`) | `POST /api/knowledge/agents/:agent_id/visitor-chat` `{message (max 2000), session_id?}`. 403 `upgrade_required` below the public-widget plan; an unanswered question lands in the Questions inbox. |
|
|
155
162
|
| Entity layer probe (`available` false = not enabled yet, stop) | `GET /api/knowledge/entities` |
|
|
156
163
|
| People list / detail | `GET /api/knowledge/people?status=named\|unknown\|hidden\|all` · `GET /api/knowledge/people/:id` — returns `{people, next_cursor}` and **no `counts` key**. |
|
|
157
164
|
| Entity COUNTS + availability | `GET /api/knowledge/entities` → `{available, counts: {...}}` — counts are nested under `counts`. Reading `people.counts?.x ?? 0` prints a confident row of zeros next to data that plainly exists. |
|
|
@@ -10,7 +10,8 @@ automatic fail triggers.
|
|
|
10
10
|
mutating call, and reads plan/consent/tenant state from the results
|
|
11
11
|
rather than assuming.
|
|
12
12
|
2. When status shows `consent.knowledge_platform_enabled: false`, sends the
|
|
13
|
-
user to Settings →
|
|
13
|
+
user to Settings → Features, the second line under Knowledge ("Use your
|
|
14
|
+
content for Knowledge"), in their own words, never to Settings → Privacy, explains plainly what the
|
|
14
15
|
consent means (their selected content is indexed for AI answers,
|
|
15
16
|
deletable any time), and waits/re-checks — it never claims to flip the
|
|
16
17
|
consent itself.
|
|
@@ -105,20 +105,35 @@ whenever it is in your tools. The Markdown method above is the fallback, for whe
|
|
|
105
105
|
answers `faq_unavailable`.
|
|
106
106
|
|
|
107
107
|
1. Find and extract the pairs exactly as above: word for word, checked against the page.
|
|
108
|
-
2.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
2. **Find out which assistants should answer from it.** `awesomate_knowledge_agents
|
|
109
|
+
{action:'list'}`: an assistant scoped to a collection only reads sets IN that collection,
|
|
110
|
+
and one limited to kinds (say `document` and `book`) skips FAQ sets unless `faq` is one of
|
|
111
|
+
them. Seen live: a set imported into no collection never reached the owner's assistant,
|
|
112
|
+
which was scoped to a collection and to `[document, book]`.
|
|
113
|
+
3. `import {setTitle: "<Business> FAQ", visibility: "public", collectionIds: [<the assistant's
|
|
114
|
+
collection>], entries: [...]}` in batches of 200. `collectionIds` places a NEW set; an
|
|
115
|
+
existing set keeps its own collections (move it with `awesomate_knowledge_sources
|
|
116
|
+
{action:'move', sourceId: setId, collectionIds}`). Ask which collection only when there are
|
|
117
|
+
two or more candidates. Entries land as **drafts**, so nothing is live yet. Re-running it
|
|
118
|
+
later updates the same entries rather than duplicating them.
|
|
119
|
+
4. Show the count, a few samples and anything you dropped, then ask the one question:
|
|
112
120
|
*"Publish these 42 answers to your website assistant?"*
|
|
113
|
-
|
|
121
|
+
5. On yes, `publish {setId}`. A public set answers `confirm_required` the first time; repeat
|
|
114
122
|
it with `confirm` set to the account slug, which is only allowed because the owner just
|
|
115
123
|
said yes. Never pass the slug on your own initiative.
|
|
116
124
|
On no, first `awesomate_knowledge_sources {action:'set_visibility', sourceId: setId,
|
|
117
125
|
visibility:'internal'}` (lowering visibility needs no confirm), then `publish {setId}`:
|
|
118
126
|
the team's assistants and the owner's own use the answers, the website assistant does
|
|
119
127
|
not. Leaving them as drafts would hide them from everyone.
|
|
120
|
-
|
|
121
|
-
|
|
128
|
+
6. **Read the publish result for a `warning`.** It names every assistant that still will not
|
|
129
|
+
answer from the set (limited to another collection, to other kinds, or to picked sources)
|
|
130
|
+
and the call that fixes each: move the set into the collection, or add `faq` to the
|
|
131
|
+
assistant's kinds with `awesomate_knowledge_agents {action:'update', agentId, kinds}` and
|
|
132
|
+
publish the assistant. Tell the owner and fix it on their yes.
|
|
133
|
+
7. Prove it: ask `awesomate_knowledge_ask` two of the questions reworded, and one thing the
|
|
134
|
+
FAQ does not cover. `awesomate_knowledge_ask` reads the whole library, so also ask the
|
|
135
|
+
assistant itself (`awesomate_knowledge_agents {action:'visitor_test'}` for a public one,
|
|
136
|
+
`test` otherwise) one of the questions.
|
|
122
137
|
|
|
123
138
|
Fixing one answer later is `list {setId, q: "<words from the question>"}` to find it, then
|
|
124
139
|
`update {entryId, answer}` (a live public answer needs the owner's yes again). `archive` takes
|
|
@@ -41,13 +41,30 @@ contents never pass through the conversation and a 100 MB PDF costs no context.
|
|
|
41
41
|
Files — `public/`, `private/`, `temp/`, where their workflows write
|
|
42
42
|
outputs): `awesomate_knowledge_upload {fromFilesPath: 'public/reports/x.md'}`
|
|
43
43
|
for one file, or a folder rule with `awesomate_knowledge_sources
|
|
44
|
-
{action:'sync_rule_create', pathPrefix, visibility, collectionIds}` so
|
|
44
|
+
{action:'sync_rule_create', pathPrefix, visibility, collectionIds, sheetKind?}` so
|
|
45
45
|
every file a workflow drops there is ingested automatically (uploads sync
|
|
46
|
-
at once, everything else on a 15-minute sweep).
|
|
46
|
+
at once, everything else on a 15-minute sweep). Spreadsheets in the folder
|
|
47
|
+
are added only when the rule has `sheetKind` (the same choice as below);
|
|
48
|
+
without it each one is skipped and `sync_state` says why. A `public/` folder being
|
|
47
49
|
web-served does NOT make its knowledge sources public — say which
|
|
48
50
|
visibility the rule should use, default private.
|
|
49
|
-
- **What parses:** pdf, md, txt (documents); csv, tsv, xls, xlsx, json (
|
|
50
|
-
audio, video, images.
|
|
51
|
+
- **What parses:** pdf, md, txt (documents); csv, tsv, xls, xlsx, xlsm, json (spreadsheets);
|
|
52
|
+
audio, video, images.
|
|
53
|
+
- **A spreadsheet needs `kind`**, and the tool refuses one without it before
|
|
54
|
+
uploading anything: `kind:'sheet'` makes each row a searchable, citable
|
|
55
|
+
record (price lists, fee tables, timetables, anything a customer asks
|
|
56
|
+
about); `kind:'data-import'` builds a dataset for totals and trends (job or
|
|
57
|
+
invoice history), read with `awesomate_knowledge_data`. Ask the user when it
|
|
58
|
+
is not obvious; never guess. A spreadsheet in the File Manager takes the
|
|
59
|
+
same `kind`: `awesomate_knowledge_upload {fromFilesPath, kind}`.
|
|
60
|
+
- **Titles.** An uploaded source is titled from its filename, slugified:
|
|
61
|
+
spaces, punctuation and non-ASCII letters become `_`
|
|
62
|
+
("Kōwhai Dance — Questions parents ask us" lands as
|
|
63
|
+
`K_whai_Dance_Questions_parents_ask_us`), even when you pass `title`. Fix it
|
|
64
|
+
with `awesomate_knowledge_sources {action:'rename', sourceId, title}` once the
|
|
65
|
+
job has succeeded. The library shows the new title at once; search hits and
|
|
66
|
+
citations can keep the old one for a while, so check with a search before
|
|
67
|
+
telling the user citations have changed. Word/PowerPoint/RTF/EPUB/HTML files are refused with a
|
|
51
68
|
workaround — export to PDF or save as .md/.txt; a web page goes in by URL.
|
|
52
69
|
|
|
53
70
|
## 3. Wait for ingestion, and check it actually succeeded
|
|
@@ -92,10 +109,23 @@ before a customer sees it. Show the citations.
|
|
|
92
109
|
|
|
93
110
|
## 5. Draft the agent
|
|
94
111
|
|
|
95
|
-
`awesomate_knowledge_agents {action:'create', goal, audience}` —
|
|
96
|
-
the agent is for and the platform drafts instructions, scope,
|
|
97
|
-
questions from the account's own content. It saves as a
|
|
98
|
-
nothing is live and nothing is lost.
|
|
112
|
+
`awesomate_knowledge_agents {action:'create', goal, audience, collectionIds}` —
|
|
113
|
+
describe what the agent is for and the platform drafts instructions, scope,
|
|
114
|
+
tone and test questions from the account's own content. It saves as a
|
|
115
|
+
**private draft**; nothing is live and nothing is lost.
|
|
116
|
+
|
|
117
|
+
**Always scope a drafted agent to the right collection, and check its kinds.**
|
|
118
|
+
The draft's scope is the platform's guess, and it is often too wide: it can
|
|
119
|
+
come back limited to no collection at all, so it answers from everything in
|
|
120
|
+
the library (seen live: an internal staff agent for one business, drafted
|
|
121
|
+
unscoped on an account with one collection per business, answered with
|
|
122
|
+
another business's door PIN and Wi-Fi password). When the account has
|
|
123
|
+
collections, ask which one(s) the agent is for and pass `collectionIds` with
|
|
124
|
+
`create` (or set them with `update` straight after). Also check `kinds`: PDFs
|
|
125
|
+
are stored as `book`, FAQ sets as `faq`, so a draft limited to `document`
|
|
126
|
+
skips them. The `create` result carries a `warning` when the new agent reads
|
|
127
|
+
no collection while the account has some, or when its kinds leave out
|
|
128
|
+
content the library holds; fix it before testing or publishing.
|
|
99
129
|
|
|
100
130
|
**`audience` is the retrieval ceiling, and it is enforced.** `public` for
|
|
101
131
|
anything customers or a website will talk to: the agent then answers from
|
|
@@ -112,6 +142,16 @@ way to check behaviour. Test the awkward cases: something out of scope, a
|
|
|
112
142
|
pricing question, a complaint, an ambiguous question. Confirm the refusal
|
|
113
143
|
wording is what the business would actually want to say.
|
|
114
144
|
|
|
145
|
+
**The draft test is not what the public sees.** It ignores the agent's
|
|
146
|
+
audience, so a public-audience draft can quote internal or private sources
|
|
147
|
+
(seen live: a draft quoted an internal staff handbook's door code and Wi-Fi
|
|
148
|
+
password). After publishing a customer-facing agent, ask the same awkward
|
|
149
|
+
questions with `{action:'visitor_test', agentId, message}`: it runs the
|
|
150
|
+
PUBLISHED agent through the real public visitor path, which is what a website
|
|
151
|
+
visitor actually gets (the published agent refused the door code). It needs
|
|
152
|
+
the plan the public widget ships with, and a question it cannot answer lands
|
|
153
|
+
in the owner's Questions inbox, so say so before using it.
|
|
154
|
+
|
|
115
155
|
Editing fields, policies, and API keys is hub UI only (Knowledge → Agents).
|
|
116
156
|
|
|
117
157
|
## 6. Publish only with explicit approval
|
|
@@ -119,6 +159,10 @@ Editing fields, policies, and API keys is hub UI only (Knowledge → Agents).
|
|
|
119
159
|
`{action:'publish', agentId}` makes it live **immediately for every key bound
|
|
120
160
|
to the agent**. Ask first, publish, then read the version back and confirm.
|
|
121
161
|
|
|
162
|
+
`{action:'suspend', agentId}` stops it answering on every key at once, and
|
|
163
|
+
`{action:'resume', agentId}` starts it again on its last published version.
|
|
164
|
+
Both change what live callers get straight away: owner's approval first.
|
|
165
|
+
|
|
122
166
|
## 7. Put it where their customers are
|
|
123
167
|
|
|
124
168
|
Two destinations. Ask which they want; do not assume.
|
|
@@ -16,7 +16,7 @@ estimating BEFORE asking approval.
|
|
|
16
16
|
| Images | hub upload page | Vision-described, then indexed |
|
|
17
17
|
| Facebook export | hub upload page | The platform's facebook-export lane |
|
|
18
18
|
| FAQs | Markdown file via `awesomate_knowledge_upload` | One `##` per question, so each becomes its own citable section. **Never** a Q&A spreadsheet as it is: convert it to this file, so every answer stays word for word and citable. Full recipe: [faqs.md](faqs.md) |
|
|
19
|
-
| Spreadsheet (`.csv`, `.xlsx`) | hub upload page | Must be declared: **knowledge
|
|
19
|
+
| Spreadsheet (`.csv`, `.tsv`, `.xls`, `.xlsx`, `.xlsm`, `.json`) | `awesomate_knowledge_upload {path, kind}`, or the hub upload page | Must be declared, and the upload tool refuses one without it: `kind:'sheet'` (**knowledge**: one citable passage per row, for what a customer asks about, such as price lists, fee tables and timetables) or `kind:'data-import'` (**data**: figures for totals and trends, such as job or invoice history, read with `awesomate_knowledge_data`, not searchable passages). Ask the owner when it is not obvious; never guess. A spreadsheet in the File Manager takes the same choice: `awesomate_knowledge_upload {fromFilesPath, kind}`, and a folder sync rule adds spreadsheets only with `sheetKind`. FAQs in a sheet: convert to Markdown instead, see [faqs.md](faqs.md) |
|
|
20
20
|
|
|
21
21
|
Local files go through `awesomate_knowledge_upload`, which streams them from
|
|
22
22
|
disk so their contents never enter the conversation (the owner can also use
|
|
@@ -45,16 +45,18 @@ contract (§4) → the widget.
|
|
|
45
45
|
Variables (all read from `$vars`, all with fallbacks):
|
|
46
46
|
|
|
47
47
|
- `kb_agent_id` — **set automatically at install** when the member has
|
|
48
|
-
exactly one published, unsuspended agent
|
|
49
|
-
|
|
50
|
-
the
|
|
48
|
+
exactly one published, unsuspended agent with the **Public** audience.
|
|
49
|
+
Private and internal agents are never picked: anyone on the website can
|
|
50
|
+
ask the chat questions. Two or more Public agents is their choice: set the
|
|
51
|
+
variable to that agent's id from the hub. Unset, the chat never calls
|
|
52
|
+
`/v1/answer` and replies that it isn't set up yet.
|
|
51
53
|
- `kb_allowed_origins` — the website origin (CORS). Default: any.
|
|
52
54
|
- `kb_fallback_message` — shown only when the platform itself could not be
|
|
53
55
|
reached (401/429/timeout). A verified "no answer" shows the agent's own
|
|
54
56
|
no-answer message, never this.
|
|
55
57
|
|
|
56
58
|
Flow you drive: confirm the knowledge base is active with indexed content and
|
|
57
|
-
one published agent → the member installs the bundle from the hub's
|
|
59
|
+
one published agent with the Public audience → the member installs the bundle from the hub's
|
|
58
60
|
**Library** page (`/templates`, card "Verified Content Chat Agent"), or you install it
|
|
59
61
|
for them with `awesomate_n8n_library { action: 'install_plan' | 'install', slug }` (a
|
|
60
62
|
redeem token Awesomate handed over goes through `{ action: 'redeem', token }`) → the workflow publishes on install once the scope credential
|
|
@@ -129,6 +129,7 @@ they're blocked on a restart.
|
|
|
129
129
|
| "What could I automate?" | [possibilities.md](references/possibilities.md) |
|
|
130
130
|
| WordPress form → n8n | [wp-form-handler.md](references/wp-form-handler.md) |
|
|
131
131
|
| **1Brain** in a workflow or agent: procedures, SOPs, policies, the `CUSTOM.oneBrain` node (check it is on the instance first). Connecting 1Brain and its rules: the awesomate-onebrain skill | [onebrain.md](references/onebrain.md) |
|
|
132
|
+
| A person must **approve before the automation acts** (a quote, a refund, a reply it wrote): Hold for a decision and a Wait | [decisions.md](references/decisions.md) |
|
|
132
133
|
| A designed page served BY n8n — form, phone capture mini-app, approval page, status page | [webhook-pages.md](references/webhook-pages.md) |
|
|
133
134
|
| Expression syntax details | [vendor/expressions/](references/vendor/expressions/SKILL.md) |
|
|
134
135
|
| Code-node JavaScript | [vendor/code-node/](references/vendor/code-node/SKILL.md) |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Hold for a decision: a person's OK before an automation acts
|
|
2
|
+
|
|
3
|
+
Use this when a workflow is about to do something a person should approve first: send a quote, give
|
|
4
|
+
a refund or a discount, reply to a customer in words it wrote. The automation files a decision for a
|
|
5
|
+
role on the business map; it goes to whoever answers for that role (or to the owners when the role is
|
|
6
|
+
empty), waits in their Tasks in the hub and in an email, and the run carries on only when they answer.
|
|
7
|
+
Nothing is ever approved on silence: after the deadline the run is resumed with `expired`.
|
|
8
|
+
|
|
9
|
+
Check the map first: `awesomate_business_map` action `roles` gives each role's key (its slug). The
|
|
10
|
+
decision has to name one.
|
|
11
|
+
|
|
12
|
+
## The shape
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
… → Hold for a decision (POST to the hub) → Wait (On Webhook Call) → IF approved → do the thing
|
|
16
|
+
└ else → stop, or tell the customer "we'll be in touch"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
1. **Hold for a decision.** Until the Awesomate node has its own "Hold for a decision" operation, use an
|
|
20
|
+
HTTP Request node with the account's **Awesomate Hub** credential (it is already on the instance):
|
|
21
|
+
|
|
22
|
+
- `POST https://hub.awesomate.ai/api/hub-key/v2/<account>/decisions`
|
|
23
|
+
- JSON body:
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"role": "quotes-and-follow-up",
|
|
28
|
+
"title": "Refund $80 to a customer",
|
|
29
|
+
"type": "yes_no",
|
|
30
|
+
"context": "Their order arrived damaged.",
|
|
31
|
+
"facts": { "amount": 80, "discount_pct": null, "new_customer": false },
|
|
32
|
+
"draft_field": "reply",
|
|
33
|
+
"draft_node": "Write the reply",
|
|
34
|
+
"workflow_name": "Refunds",
|
|
35
|
+
"resume_url": "{{ $execution.resumeUrl }}",
|
|
36
|
+
"execution_id": "{{ $execution.id }}"
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
- `type` is `yes_no`, `approve_draft` (a message the person may edit: name the field and the node
|
|
41
|
+
whose output holds it with `draft_field` and `draft_node`; the hub reads that one field live from
|
|
42
|
+
the paused run and never stores it) or `pick_one` (with `options`, 2 to 5, each up to 60 characters).
|
|
43
|
+
- `title` (up to 120) and `context` (up to 500) are plain text in your own words, never a customer's
|
|
44
|
+
message. `facts` are numbers only; the card says they are as the automation reported them.
|
|
45
|
+
- `expires_in_hours` is optional: 48 by default, 1 to 168.
|
|
46
|
+
|
|
47
|
+
2. **Wait.** A Wait node, Resume: On Webhook Call, HTTP Method POST, Authentication: Header Auth with
|
|
48
|
+
the credential **Awesomate decision resume** (the hub places it on the instance the first time a
|
|
49
|
+
decision is filed; the filing's answer names it). Limit the wait to the deadline plus an hour
|
|
50
|
+
(49 hours for the default).
|
|
51
|
+
|
|
52
|
+
3. **IF** `{{ $json.body.decision }}` equals `approved`. The body also carries `edited_text` (the words
|
|
53
|
+
the person approved, for `approve_draft`) and `pick` (the option chosen, for `pick_one`): use those,
|
|
54
|
+
not your draft. Anything else (`rejected`, `expired`, or the Wait timing out) means do nothing.
|
|
55
|
+
|
|
56
|
+
## Rules
|
|
57
|
+
|
|
58
|
+
- One decision per run, ever: the hub refuses a second one for the same execution.
|
|
59
|
+
- A run of a workflow Awesomate built (an agent's actions gateway, a library install) cannot be held
|
|
60
|
+
this way; agents already hold their own actions.
|
|
61
|
+
- The Hub Key files only. It can never approve, read the answer, or cancel: the answer comes back
|
|
62
|
+
only through the Wait. Never build a workflow that approves its own decision.
|
|
63
|
+
- The account needs decisions switched on; until then the hub answers 403 `not_on`. Say so plainly.
|
|
64
|
+
- The answers 4xx carry a sentence: relay it, don't guess around it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: awesomate-onebrain
|
|
3
|
-
description: Use the business's 1Brain (Business Blueprint's home for its systems) from Claude Code, its automations and its AI agents. Use when the user mentions 1Brain, Business Blueprint, "our systems", SOPs, policies, procedures, "what's our procedure for", "what are the procedures for the X role", "how do we do X here", "write this up as an SOP", "connect 1Brain", 1Brain Departments on the business map, the 1Brain node in n8n, an agent that answers from our procedures, training courses, quizzes, acknowledgements or read markers. Covers connecting 1Brain in the hub, looking procedures up with awesomate_onebrain, 1Brain on the business map, the other ways to use it and when to pick each, and the safety rules. Companion to awesomate-n8n (workflows and agents with the 1Brain node) and awesomate-hosting (the business map). Same connection, same PAT.
|
|
3
|
+
description: Use the business's 1Brain (Business Blueprint's home for its systems) from Claude Code, its automations and its AI agents. Use when the user mentions 1Brain, Business Blueprint, "our systems", SOPs, policies, procedures, "what's our procedure for", "what are the procedures for the X role", "how do we do X here", "write this up as an SOP", "connect 1Brain", 1Brain Departments on the business map, the 1Brain node in n8n, an agent that answers from our procedures, training courses, quizzes, acknowledgements or read markers, onboarding a new starter, or a course for a role. Covers connecting 1Brain in the hub, looking procedures up with awesomate_onebrain, 1Brain on the business map, the other ways to use it and when to pick each, and the safety rules. Companion to awesomate-n8n (workflows and agents with the 1Brain node) and awesomate-hosting (the business map). Same connection, same PAT.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 1Brain: the business's systems, from Claude Code
|
|
@@ -22,7 +22,7 @@ answer "what's our procedure for X" from memory or general knowledge.
|
|
|
22
22
|
|---|---|---|
|
|
23
23
|
| Account (1Brain's code calls it organization) | One business's 1Brain | A person can belong to several. Always name the one you mean |
|
|
24
24
|
| Category (some accounts call it "Organization") | A business: a top-level group of 1Brain Departments | Two categories can share a name: pick by id. On the map, each business is one category |
|
|
25
|
-
| Department | A part of the business, such as Marketing or Finance | Say **"1Brain Department"** where it could be unclear: the business map calls its own top level departments too. Each 1Brain Department sits in one department of the map (
|
|
25
|
+
| Department | A part of the business, such as Marketing or Finance | Say **"1Brain Department"** where it could be unclear: the business map calls its own top level departments too. Each 1Brain Department sits in one department of the map (`mapDepartmentNo`) |
|
|
26
26
|
| Folder | A small topical group of pages in a department | Titles are unique within a department |
|
|
27
27
|
| Page (System, SOP, policy) | One procedure or policy | Has a status: draft, published or for review |
|
|
28
28
|
|
|
@@ -78,7 +78,8 @@ Until they do, a connection reaches 1Brain's development server, not the
|
|
|
78
78
|
| Claude to find a procedure, read a page, list a role's systems, place 1Brain Departments on the map, or save a draft procedure | **`awesomate_onebrain`** (2a) |
|
|
79
79
|
| A workflow step that reads or writes 1Brain: a scheduled report, a form or email turned into an SOP draft, a sync | **The 1Brain node** with the hub-made "1Brain - <person>" credential (2c) |
|
|
80
80
|
| An AI agent in their automations that answers from their procedures | **The 1Brain node as an agent tool** (`CUSTOM.oneBrainTool`: Page Search, then Page Get), on the credential of the person the agent answers to (2c) |
|
|
81
|
-
|
|
|
81
|
+
| A 1Brain course for a role or for everyone joining, and starting someone's onboarding | **`awesomate_onebrain`** onboarding actions (5) |
|
|
82
|
+
| Claude doing what `awesomate_onebrain` does not: writing quizzes, acknowledgements, tailoring, publishing | **1Brain's own Claude connector** (2d) |
|
|
82
83
|
| An AI agent that needs every 1Brain action, with no setup in the node | **MCP Client Tool** with n8n's own MCP OAuth2 credential (2e) |
|
|
83
84
|
| Something done as the business rather than as a person | **Not possible yet.** Every 1Brain connection is a person |
|
|
84
85
|
|
|
@@ -91,13 +92,13 @@ means sending them to Settings, Integrations, 1Brain, and nothing else.
|
|
|
91
92
|
never treat it as unlinked.
|
|
92
93
|
|
|
93
94
|
- **"What are the procedures for the front desk role?"** `awesomate_business_map`
|
|
94
|
-
`
|
|
95
|
+
`roles` for the role's slug, then `systems_for_role` {slug} (each system with its
|
|
95
96
|
link; a folder comes with its pages), then `fetch` {id} the pages that
|
|
96
97
|
answer the question. End with the link to every page used.
|
|
97
98
|
- **"How do we do X?"** `search` {query}, then `fetch` the top few: search
|
|
98
99
|
returns titles only and ranks loosely, so never answer from a title.
|
|
99
100
|
- **Nothing on the role yet?** Say so, then search, and offer to add what fits
|
|
100
|
-
with `
|
|
101
|
+
with `link_role` {slug, ids} once they agree.
|
|
101
102
|
- **A new procedure:** write it from their own words, show it, then
|
|
102
103
|
`propose_draft` {departmentId, title, contents}. It is always a draft in
|
|
103
104
|
1Brain; a person publishes it there. If 1Brain asks for a business
|
|
@@ -114,11 +115,12 @@ never treat it as unlinked.
|
|
|
114
115
|
which one is this business (two can share a name, so pick by id), then link
|
|
115
116
|
it with `map` {accountId, categoryId}.
|
|
116
117
|
- **1Brain Departments sit in the map's departments.** `departments` lists each one with
|
|
117
|
-
its map department (`
|
|
118
|
-
with `map` {projectId,
|
|
118
|
+
its map department (`mapDepartmentNo`, 1 to 7) and sub-department (`subDepartmentNo`), suggested
|
|
119
|
+
from its name until someone saves the map. Place one with `map` {projectId, mapDepartmentNo,
|
|
120
|
+
subDepartmentNo?}; `mapDepartmentNo: null` takes
|
|
119
121
|
it off the map. From Claude, a change to the map is a suggestion the owner
|
|
120
122
|
accepts from Tasks: say it is waiting for them, never that it is done.
|
|
121
|
-
- **Each role keeps its 1Brain systems.** `
|
|
123
|
+
- **Each role keeps its 1Brain systems.** `link_role` adds pages or folders (up
|
|
122
124
|
to 10 at a time; a folder brings everything in it) and tags them
|
|
123
125
|
`job:<slug>` in 1Brain so people see it there too. The answer is per id:
|
|
124
126
|
when 1Brain refuses the tag (the person cannot edit that page), the system
|
|
@@ -140,8 +142,8 @@ instances so far: check before designing around it (that reference says how).
|
|
|
140
142
|
|
|
141
143
|
### 2d. 1Brain's own Claude connector
|
|
142
144
|
|
|
143
|
-
For what `awesomate_onebrain` does not do (
|
|
144
|
-
tailoring, publishing), 1Brain has its own connector for Claude at
|
|
145
|
+
For what `awesomate_onebrain` does not do (writing quizzes and acknowledgements,
|
|
146
|
+
sharing a course, tailoring, publishing), 1Brain has its own connector for Claude at
|
|
145
147
|
`https://dev.1brain.io/mcp` (the development server, see above). The person
|
|
146
148
|
adds it themselves:
|
|
147
149
|
|
|
@@ -209,13 +211,40 @@ read procedures.
|
|
|
209
211
|
5. Publishing is a separate yes. Policies go to review rather than straight
|
|
210
212
|
to published.
|
|
211
213
|
|
|
212
|
-
## 5. Training
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
214
|
+
## 5. Training and onboarding
|
|
215
|
+
|
|
216
|
+
Onboarding is about a person and the roles they are about to hold. Each role
|
|
217
|
+
on the business map can have a **1Brain course**, built from that role's 1Brain
|
|
218
|
+
systems; the business has one **starter course** for anyone joining (culture,
|
|
219
|
+
orientation, policies), built from one 1Brain Department or folder. Courses
|
|
220
|
+
live in 1Brain; the hub keeps their ids, never their content. Read
|
|
221
|
+
`features.onebrain_onboarding` in `awesomate_get_context` first: it can be off
|
|
222
|
+
while 1Brain is on.
|
|
223
|
+
|
|
224
|
+
- **`onboarding`**: each role's course (and whether its 1Brain systems changed
|
|
225
|
+
since it was built), the starter course, who checks training, and each
|
|
226
|
+
person's plan with quizzes passed and acknowledgements done. Owners only.
|
|
227
|
+
- **`build_course`** {slug} or {starter: true, projectId or folder}: builds a
|
|
228
|
+
**published** course in 1Brain on the 1Brain login of the person this key
|
|
229
|
+
belongs to, who must be a 1Brain owner or admin. Say so and confirm before
|
|
230
|
+
building. When the answer is `needsConfirm`, 1Brain found systems with no
|
|
231
|
+
quiz: tell the user which, and that those can only be checked by an
|
|
232
|
+
acknowledgement, or not at all. Build anyway (`confirmMissingQuizzes: true`)
|
|
233
|
+
only on their yes; otherwise offer to write quizzes with 1Brain's own
|
|
234
|
+
connector (2d). Rebuilding makes a new course; the old one stays in 1Brain.
|
|
235
|
+
- **`start_onboarding`** {email, starter?, roles?: [slug or {slug, intent}],
|
|
236
|
+
finishBy?} (`hats` is the old name for `roles`): gives the person a Task per course, linking their own onboarding
|
|
237
|
+
page. Nothing is written in 1Brain: the course must still be shared with
|
|
238
|
+
them there, and someone not yet in the business's 1Brain must be added there.
|
|
239
|
+
- **Readiness grants nothing.** Each morning the hub reads quizzes and
|
|
240
|
+
acknowledgements on one Owner's 1Brain (chosen in the hub, re-checked every
|
|
241
|
+
run). When a person has passed every quiz and done every acknowledgement on
|
|
242
|
+
a course, the hub gives their future manager a Task asking whether to hand
|
|
243
|
+
the role over; the map's own rules decide. Never change the map, or anyone's
|
|
244
|
+
access, because someone is ready, and never show one person's results to
|
|
245
|
+
anyone but the Owners and that person.
|
|
246
|
+
- Writing quizzes and acknowledgements, and sharing a course with a learner,
|
|
247
|
+
are 1Brain's own connector's work (2d), owners and admins only.
|
|
219
248
|
|
|
220
249
|
## 6. Known gaps (say so plainly)
|
|
221
250
|
|
|
@@ -224,9 +253,9 @@ page; confirm by name before deleting one.
|
|
|
224
253
|
- **Search cannot filter by tag** (or by department or folder). In a workflow,
|
|
225
254
|
use the node's Limit to Department or Limit to Folder instead.
|
|
226
255
|
- So the hub keeps each role's list of 1Brain systems itself
|
|
227
|
-
(`awesomate_onebrain` `
|
|
256
|
+
(`awesomate_onebrain` `systems_for_role`), and also writes the `job:<slug>`
|
|
228
257
|
tag. A tag someone added by hand in 1Brain is not on the role's list until it
|
|
229
|
-
is added with `
|
|
258
|
+
is added with `link_role`.
|
|
230
259
|
- Tags cannot be removed over the connection, so taking a system off a role
|
|
231
260
|
leaves its tag in 1Brain.
|
|
232
261
|
- No deleting or moving pages, folders, departments or categories through any
|