@somacheck/vibecheck 0.6.10 → 0.6.11
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/LICENSE +21 -0
- package/README.md +77 -7
- package/claude-marketplace/.claude-plugin/marketplace.json +1 -1
- package/claude-marketplace/plugins/vibecheck/.claude-plugin/plugin.json +4 -4
- package/claude-marketplace/plugins/vibecheck/hooks/hooks.json +1 -1
- package/dist/cli.js +31 -0
- package/dist/constants.js +2 -1
- package/dist/readiness.js +2 -2
- package/dist/recipes.js +191 -0
- package/dist/server.js +33 -19
- package/package.json +4 -4
- package/recipes/chattermill-research-reflection.md +323 -0
- package/recipes/dovetail-research-reflection.md +204 -0
- package/recipes/great-question-research-reflection.md +212 -0
- package/recipes/maze-research-reflection.md +325 -0
- package/recipes/prolific-research-reflection.md +215 -0
- package/recipes/questionpro-research-reflection.md +151 -0
- package/recipes/spotify-listening-reflection.md +459 -0
- package/recipes/sprig-research-reflection.md +222 -0
- package/recipes/studio-somacheck-context.md +202 -0
- package/recipes/typeform-research-reflection.md +211 -0
- package/recipes/user-interviews-research-reflection.md +253 -0
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@somacheck/vibecheck",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.11",
|
|
4
4
|
"mcpName": "io.github.Sensie-agents/vibecheck",
|
|
5
5
|
"description": "Send a consented vibecheck to SomaCheck and use the result as a signal.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "git+https://github.com/
|
|
9
|
-
"directory": "packages/vibecheck"
|
|
8
|
+
"url": "git+https://github.com/Sensie-agents/vibecheck.git"
|
|
10
9
|
},
|
|
11
10
|
"type": "module",
|
|
12
11
|
"bin": {
|
|
@@ -18,6 +17,7 @@
|
|
|
18
17
|
"files": [
|
|
19
18
|
"dist/*.js",
|
|
20
19
|
"SKILL.md",
|
|
20
|
+
"recipes/**",
|
|
21
21
|
"claude-marketplace/**"
|
|
22
22
|
],
|
|
23
23
|
"scripts": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"tsx": "^4.23.1",
|
|
41
41
|
"typescript": "^5.9.3"
|
|
42
42
|
},
|
|
43
|
-
"license": "
|
|
43
|
+
"license": "MIT",
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
46
46
|
}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Chattermill + SomaCheck Research Reflection
|
|
3
|
+
recipe_id: chattermill-research-reflection-v1
|
|
4
|
+
status: P1 researcher-side read-only reflection; aggregate metrics and generated highlights only
|
|
5
|
+
audience: Researchers and CX analysts using Chattermill with an MCP-capable agent
|
|
6
|
+
updated: 2026-09-05
|
|
7
|
+
required_mcp_servers:
|
|
8
|
+
- chattermill
|
|
9
|
+
- vibecheck
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Chattermill + SomaCheck Research Reflection
|
|
13
|
+
|
|
14
|
+
This recipe gives a Chattermill researcher one private SomaCheck check-in while
|
|
15
|
+
shaping the researcher's own interpretation of customer-feedback insights. The
|
|
16
|
+
researcher stays the only person who reads, decides, or acts. The recipe reads
|
|
17
|
+
only aggregate metrics or generated highlights and performs no Chattermill
|
|
18
|
+
write.
|
|
19
|
+
|
|
20
|
+
Chattermill exposes a hosted read-only MCP surface
|
|
21
|
+
(`https://app.chattermill.com/mcp`, Streamable HTTP). Its published OAuth
|
|
22
|
+
protected-resource metadata advertises only the `mcp:read` scope alongside
|
|
23
|
+
`openid profile email offline_access`; there is no write scope, and the server
|
|
24
|
+
is documented as read-only. Existing Chattermill roles and permissions still
|
|
25
|
+
apply, so an agent never sees data the researcher cannot already view.
|
|
26
|
+
|
|
27
|
+
The SomaCheck reading is context for the researcher's own interpretation or
|
|
28
|
+
next step. It is not truth, diagnosis, authorization, evidence about any
|
|
29
|
+
individual customer, or a research decision. The researcher remains the
|
|
30
|
+
authority.
|
|
31
|
+
|
|
32
|
+
## Capability and access boundary
|
|
33
|
+
|
|
34
|
+
Chattermill documents the hosted MCP as read-only and OAuth 2.1 authenticated
|
|
35
|
+
at `https://app.chattermill.com/mcp`. A product or integration owner provides
|
|
36
|
+
an organization-authorized connection or partner sandbox that can already
|
|
37
|
+
view the named project's aggregate metrics and highlights. The provisioned MCP
|
|
38
|
+
client completes Chattermill's OAuth flow at `auth.chattermill.com`. Running
|
|
39
|
+
this recipe never asks the researcher to sign up, purchase access, administer
|
|
40
|
+
access, or populate Chattermill data.
|
|
41
|
+
|
|
42
|
+
The MCP server's protected-resource metadata advertises `mcp:read` as its only
|
|
43
|
+
MCP scope. There is no write tool in the published contract. If a write
|
|
44
|
+
surface appears at runtime anyway, this recipe still performs no write.
|
|
45
|
+
|
|
46
|
+
This P1 recipe is researcher-side only. Do not use it to:
|
|
47
|
+
|
|
48
|
+
- ask a customer, respondent, employee, candidate, patient, or student to
|
|
49
|
+
complete a SomaCheck;
|
|
50
|
+
- retrieve individual feedback responses, verbatim comments, source quotes,
|
|
51
|
+
respondent identifiers, contact fields, or any free-text feedback;
|
|
52
|
+
- retrieve observation clusters that surface representative verbatim snippets
|
|
53
|
+
or observation identifiers tied to individual feedback;
|
|
54
|
+
- use a reading for customer targeting, eligibility, payment, ranking,
|
|
55
|
+
churn scoring, authenticity, quality, or performance evaluation;
|
|
56
|
+
- write a SomaCheck reading, confidence, gesture, confirmation, or hidden
|
|
57
|
+
score into Chattermill, a dashboard, a tag, a theme, a highlight, an
|
|
58
|
+
insight, or any analytics record; or
|
|
59
|
+
- create, edit, publish, delete, share, export, or otherwise mutate any
|
|
60
|
+
Chattermill project, theme, attribute, metric, dashboard, or insight.
|
|
61
|
+
|
|
62
|
+
Participant- or customer-facing use stays blocked until a `respondent_private`
|
|
63
|
+
architecture prevents researcher or platform access to individual readings,
|
|
64
|
+
methodology and ethics review is complete, and Sensie gives explicit
|
|
65
|
+
privacy/legal approval. Chattermill MCP access, read-only scope, or participant
|
|
66
|
+
consent alone does not satisfy these gates.
|
|
67
|
+
|
|
68
|
+
## Experience a researcher can run
|
|
69
|
+
|
|
70
|
+
The researcher holds the phone and selects one existing Chattermill project
|
|
71
|
+
supplied by the workspace owner, then provides one research question. The agent
|
|
72
|
+
reads only that project's aggregate metrics (`get_metrics`) or generated
|
|
73
|
+
highlights (`generate_highlights`), plus the discovery metadata needed to build
|
|
74
|
+
the query (`list_themes`, `list_attributes`, `search_attributes`,
|
|
75
|
+
`list_metric_options`). It never calls `get_feedback` (individual responses)
|
|
76
|
+
or `search_observations` (observation identifiers and representative verbatim
|
|
77
|
+
snippets), and never surfaces individual feedback, source quotes, respondent
|
|
78
|
+
identifiers, or free text. The agent offers two defensible interpretations of
|
|
79
|
+
what the aggregate signal suggests, then one short first-person proposition
|
|
80
|
+
about the researcher's own interpretation or next step. After the researcher's
|
|
81
|
+
typed choice, the agent stops. There is no Chattermill write.
|
|
82
|
+
|
|
83
|
+
## Starter prompt
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
Use Chattermill and SomaCheck to help me reflect on my own interpretation of
|
|
87
|
+
customer-feedback insights for one named Chattermill project. I am the
|
|
88
|
+
researcher and I am holding the phone. The project is:
|
|
89
|
+
[PROJECT NAME OR ID PROVIDED BY THE WORKSPACE OWNER]. Use only the
|
|
90
|
+
preconfigured official hosted read-only Chattermill MCP at
|
|
91
|
+
https://app.chattermill.com/mcp. Read only aggregate metrics (get_metrics) or
|
|
92
|
+
generated highlights (generate_highlights), plus discovery metadata
|
|
93
|
+
(list_themes, list_attributes, search_attributes, list_metric_options) needed
|
|
94
|
+
to build the query. Never call get_feedback or search_observations. Never
|
|
95
|
+
surface individual feedback, source quotes, respondent identifiers, contact
|
|
96
|
+
fields, or free text. Propose two defensible interpretations of what the
|
|
97
|
+
aggregate signal suggests, with the tradeoff for each. Then offer one short
|
|
98
|
+
first-person proposition about my own interpretation or next step and wait
|
|
99
|
+
for my acceptance before any proactive SomaCheck ask. Treat Aligned or
|
|
100
|
+
Unaligned plus confidence as context, not truth, diagnosis, authorization, or
|
|
101
|
+
evidence about any individual customer. Ask what I choose in words. Keep the
|
|
102
|
+
proposition, reading, confidence, and my confirmation out of Chattermill. Do
|
|
103
|
+
not write to Chattermill; the hosted MCP is read-only. If the preconfigured
|
|
104
|
+
connection, mcp:read, or a safe aggregate tool is absent, return the copy-ready
|
|
105
|
+
interpretation and tell the integration owner what capability is missing. Do
|
|
106
|
+
not ask me to sign up, purchase access, administer access, or populate
|
|
107
|
+
Chattermill data.
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Prerequisites and account access
|
|
111
|
+
|
|
112
|
+
1. The researcher can complete a normal SomaCheck request through the connected
|
|
113
|
+
`vibecheck` MCP server (`request_vibecheck` and
|
|
114
|
+
`get_vibecheck_result`).
|
|
115
|
+
2. A product or integration owner has provisioned an authorized organization
|
|
116
|
+
connection or partner sandbox that can already view the named project's
|
|
117
|
+
aggregate metrics and highlights. Existing Chattermill roles and permissions
|
|
118
|
+
apply; the MCP grants no access beyond the provisioned workspace.
|
|
119
|
+
3. The provisioned MCP client is connected to exactly
|
|
120
|
+
`https://app.chattermill.com/mcp` and authenticated through the OAuth 2.1
|
|
121
|
+
flow Chattermill publishes at `auth.chattermill.com`. Do not substitute a
|
|
122
|
+
different host, path, or non-Chattermill endpoint.
|
|
123
|
+
4. The workspace owner supplies one named existing Chattermill project (by name
|
|
124
|
+
or ID) whose aggregate metrics or generated highlights are enough for the
|
|
125
|
+
reflection task, with no need for individual responses or verbatim comments.
|
|
126
|
+
The researcher is not responsible for creating or populating it.
|
|
127
|
+
5. No credential, OAuth token, API key, project ID containing PII, or
|
|
128
|
+
respondent identifier appears in chat, logs, prompts, or the SomaCheck
|
|
129
|
+
proposition.
|
|
130
|
+
|
|
131
|
+
## Chattermill tool policy
|
|
132
|
+
|
|
133
|
+
Chattermill publishes a hosted, read-only MCP (`mcp:read` scope). It documents
|
|
134
|
+
eight tools in two groups: discovery tools and data tools. The agent must
|
|
135
|
+
inspect the live tool list at runtime and use only the smallest tools that
|
|
136
|
+
return aggregate or generated output. Treat the live schemas as
|
|
137
|
+
runtime-discovered; do not assume undocumented tool names.
|
|
138
|
+
|
|
139
|
+
| Purpose | Allowed surface | Rule |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| Discover theme/category names | `list_themes` | Metadata only; names configured in the project, never feedback content |
|
|
142
|
+
| Discover filterable attributes | `list_attributes` | Metadata only; attribute names, never feedback values |
|
|
143
|
+
| Discover valid filter values | `search_attributes` | Metadata only for segment attributes (country, product, data source); never enumerate an identifier-bearing attribute such as email or customer ID |
|
|
144
|
+
| Discover metric options | `list_metric_options` | Metadata only; chart types, metrics, frequencies, breakdown options |
|
|
145
|
+
| Read aggregate quantitative data | `get_metrics` | Aggregate NPS, sentiment, volume, or trend metrics only |
|
|
146
|
+
| Read generated highlights | `generate_highlights` | AI-generated summary of themes, issues, or trends only |
|
|
147
|
+
| Read individual feedback responses | `get_feedback` | Prohibited in this recipe |
|
|
148
|
+
| Search observation clusters with snippets | `search_observations` | Prohibited in this recipe; returns observation identifiers and representative verbatim snippets |
|
|
149
|
+
| Any create, edit, publish, delete, share, export, or mutation | any write or mutation tool | Prohibited in this recipe |
|
|
150
|
+
| Private reflection | `request_vibecheck`, optional `get_vibecheck_result` | One decision, one request, one stable pending handle |
|
|
151
|
+
|
|
152
|
+
Do not broaden a connection to a root or all-tools endpoint to make this
|
|
153
|
+
recipe work. If the runtime does not expose `get_metrics` or
|
|
154
|
+
`generate_highlights`, label the Chattermill half untested and stop.
|
|
155
|
+
|
|
156
|
+
## Exact cross-MCP workflow
|
|
157
|
+
|
|
158
|
+
1. **Confirm the subject and scope.** State that the researcher is the phone
|
|
159
|
+
holder and the subject of the proposition. Name the one existing Chattermill
|
|
160
|
+
project supplied by the workspace owner (by name or ID) and the research
|
|
161
|
+
question.
|
|
162
|
+
2. **Verify access honestly.** Confirm the client is connected to exactly
|
|
163
|
+
`https://app.chattermill.com/mcp` through Chattermill's OAuth flow and
|
|
164
|
+
that the `mcp:read` scope is present. Do not claim a live pass on
|
|
165
|
+
documentation, a fixture, or a connection that lacks the read scope.
|
|
166
|
+
3. **Read only aggregate or generated output.** Call `get_metrics` or
|
|
167
|
+
`generate_highlights`, using discovery metadata (`list_themes`,
|
|
168
|
+
`list_attributes`, `search_attributes`, `list_metric_options`) only to
|
|
169
|
+
build the query. Do not call `get_feedback` or `search_observations`, and
|
|
170
|
+
do not surface individual feedback, source quotes, respondent identifiers,
|
|
171
|
+
contact fields, or free text.
|
|
172
|
+
4. **Separate evidence from interpretation.** Label what the aggregate
|
|
173
|
+
metrics or highlights literally contain, what the agent infers, and what
|
|
174
|
+
the researcher's own judgment must still decide.
|
|
175
|
+
5. **Propose two interpretations.** Offer two defensible interpretations of
|
|
176
|
+
what the aggregate signal suggests, with the tradeoff for each.
|
|
177
|
+
6. **Choose one first-person proposition.** It must be short, first-person,
|
|
178
|
+
and about the researcher's own interpretation or next step. Do not include
|
|
179
|
+
project IDs containing PII, individual feedback, source quotes,
|
|
180
|
+
respondent identifiers, contact fields, or free text.
|
|
181
|
+
7. **Establish one-ask consent.** If the researcher explicitly requested a
|
|
182
|
+
SomaCheck check-in in the current message, use
|
|
183
|
+
`consent_basis: "user_requested_vibecheck"`. Otherwise show the exact
|
|
184
|
+
proposition, wait for acceptance, and use
|
|
185
|
+
`consent_basis: "user_approved_statement"`.
|
|
186
|
+
8. **Request once.** Call `request_vibecheck` with the approved statement and
|
|
187
|
+
a fresh UUID `idempotency_key`. Reuse it only to retry the identical
|
|
188
|
+
request after an ambiguous create failure.
|
|
189
|
+
9. **Handle the real lifecycle.** A terminal response from
|
|
190
|
+
`request_vibecheck` uses `state: "completed"`; a later read uses
|
|
191
|
+
`status: "answered"`. If the initial response is `pending`, retain the
|
|
192
|
+
returned `live:<uuid>` handle and call `get_vibecheck_result` with it once
|
|
193
|
+
later. If it is still `pending`, `expired`, `cancelled`, or errors,
|
|
194
|
+
continue without a result. Never issue a replacement ask.
|
|
195
|
+
10. **Return authority.** Separate observation (a valid gesture was
|
|
196
|
+
captured), interpretation (`aligned` or `unaligned` plus model
|
|
197
|
+
confidence), confirmation (what the researcher says), and choice (what the
|
|
198
|
+
researcher decides). `unaligned` may indicate possible inner conflict
|
|
199
|
+
relative to the proposition; it does not name a cause, choose an
|
|
200
|
+
interpretation, or justify a research claim.
|
|
201
|
+
11. **Ask for words.** Ask the researcher which interpretation they choose,
|
|
202
|
+
whether they want a third option, or whether they want to stop. Follow
|
|
203
|
+
their typed choice.
|
|
204
|
+
12. **Keep the signal out of Chattermill.** Do not call any write, mutation,
|
|
205
|
+
export, tag, theme, highlight, insight, or analytics tool. Do not store
|
|
206
|
+
the proposition, reading, confidence, confirmation, or gesture metadata
|
|
207
|
+
in Chattermill.
|
|
208
|
+
13. **End the test.** Report the exact Chattermill tool names used and the
|
|
209
|
+
exact aggregate or generated fields returned, or report the copy-ready
|
|
210
|
+
interpretation when the Chattermill half is untested. Do not create,
|
|
211
|
+
edit, publish, delete, share, or export any Chattermill object.
|
|
212
|
+
|
|
213
|
+
## Proposition examples
|
|
214
|
+
|
|
215
|
+
Allowed:
|
|
216
|
+
|
|
217
|
+
- "I can interpret this aggregate signal without reading individual
|
|
218
|
+
feedback."
|
|
219
|
+
- "I have a clear reading of what these aggregate metrics suggest."
|
|
220
|
+
- "I am ready to act on generated highlights without opening verbatim
|
|
221
|
+
comments."
|
|
222
|
+
- "I want to keep individual responses out of my interpretation."
|
|
223
|
+
- "I can state what this trend does and does not show."
|
|
224
|
+
|
|
225
|
+
Not allowed:
|
|
226
|
+
|
|
227
|
+
- "This customer is telling the truth."
|
|
228
|
+
- "These respondents are engaged."
|
|
229
|
+
- "This feedback proves the feature is broken."
|
|
230
|
+
- "This customer should be flagged or deprioritized."
|
|
231
|
+
- "This aggregate metric validates my hypothesis."
|
|
232
|
+
|
|
233
|
+
## Visible success condition
|
|
234
|
+
|
|
235
|
+
The test passes when:
|
|
236
|
+
|
|
237
|
+
- the researcher selects one existing Chattermill project supplied by a
|
|
238
|
+
workspace owner whose provisioned connection can view its aggregate metrics
|
|
239
|
+
and highlights;
|
|
240
|
+
- the agent reads only aggregate metrics (`get_metrics`) or generated
|
|
241
|
+
highlights (`generate_highlights`) through the hosted read-only
|
|
242
|
+
Chattermill MCP and reports the exact tool names used;
|
|
243
|
+
- the agent never calls `get_feedback` or `search_observations`, and never
|
|
244
|
+
surfaces individual feedback, source quotes, respondent identifiers,
|
|
245
|
+
contact fields, or free text;
|
|
246
|
+
- the researcher receives at most one optional SomaCheck check-in on their
|
|
247
|
+
phone on an exact first-person proposition about their own interpretation or
|
|
248
|
+
next step;
|
|
249
|
+
- the agent presents the result as context, asks the researcher to state their
|
|
250
|
+
choice in words, and follows the typed choice;
|
|
251
|
+
- the agent makes no Chattermill write, mutation, export, share, tag,
|
|
252
|
+
comment, or analytics call; and
|
|
253
|
+
- no individual customer, respondent, or employee data enters the cross-MCP
|
|
254
|
+
flow.
|
|
255
|
+
|
|
256
|
+
## Failure and degraded paths
|
|
257
|
+
|
|
258
|
+
- **Read scope absent or OAuth failure:** Report the missing capability to the
|
|
259
|
+
product or integration owner; never request a token or API key in chat or ask
|
|
260
|
+
the researcher to sign up, purchase access, or administer access. Label the
|
|
261
|
+
Chattermill half untested, return the copy-ready interpretation, and stop.
|
|
262
|
+
- **Runtime exposes only individual-response or observation tools:** Do not
|
|
263
|
+
call them. Label the Chattermill half untested and stop. Do not broaden
|
|
264
|
+
the connection to make this recipe work.
|
|
265
|
+
- **MCP returns individual feedback, source quotes, respondent identifiers,
|
|
266
|
+
contact fields, or free text:** Stop immediately. Discard the individual
|
|
267
|
+
content from the agent context. Report the exact fields received and ask the
|
|
268
|
+
product or integration owner to revoke or limit the scope. Do not use the
|
|
269
|
+
individual content in any proposition, framing, or interpretation.
|
|
270
|
+
- **SomaCheck unresolved:** Use the same `live:<uuid>` handle once later,
|
|
271
|
+
then proceed without a reading if still unresolved.
|
|
272
|
+
- **Unreadable capture:** Offer a retry only if the researcher wants it;
|
|
273
|
+
unreadable is not a third interpretation.
|
|
274
|
+
- **Researcher disagrees with the reading:** Follow the researcher's typed
|
|
275
|
+
choice without reconciliation or repetition.
|
|
276
|
+
|
|
277
|
+
## Privacy boundary
|
|
278
|
+
|
|
279
|
+
- Raw phone motion never reaches Chattermill or the agent.
|
|
280
|
+
- Chattermill receives no proposition, reading, confidence, confirmation,
|
|
281
|
+
gesture metadata, or SomaCheck output through this recipe.
|
|
282
|
+
- SomaCheck receives no Chattermill project ID containing PII, individual
|
|
283
|
+
feedback, source quote, respondent identifier, contact field, free-text
|
|
284
|
+
comment, or verbatim response.
|
|
285
|
+
- No individual customer, respondent, or employee data is read into the agent
|
|
286
|
+
conversation, prompt, proposition, framing, or memory.
|
|
287
|
+
- The Chattermill project remains unchanged. No write, mutation, export,
|
|
288
|
+
share, tag, comment, insight, or analytics call occurs.
|
|
289
|
+
|
|
290
|
+
## Test checklist
|
|
291
|
+
|
|
292
|
+
- [ ] The researcher is the phone holder and the subject of the proposition.
|
|
293
|
+
- [ ] The client is connected to exactly `https://app.chattermill.com/mcp`
|
|
294
|
+
through Chattermill's OAuth 2.1 flow; no other host, path, or
|
|
295
|
+
non-Chattermill endpoint is used.
|
|
296
|
+
- [ ] The `mcp:read` scope is present and no write scope is assumed.
|
|
297
|
+
- [ ] No Chattermill credential, OAuth token, or API key appears in chat,
|
|
298
|
+
logs, or the SomaCheck proposition.
|
|
299
|
+
- [ ] The agent reads only `get_metrics` or `generate_highlights`, using
|
|
300
|
+
discovery metadata only to build the query, and reports the exact
|
|
301
|
+
runtime tool names used.
|
|
302
|
+
- [ ] The agent does not call `get_feedback` or `search_observations`.
|
|
303
|
+
- [ ] No individual feedback, source quote, respondent identifier, contact
|
|
304
|
+
field, or free text appears in the conversation, proposition, or
|
|
305
|
+
interpretation.
|
|
306
|
+
- [ ] The proposition is first-person and contains no Chattermill content.
|
|
307
|
+
- [ ] At most one SomaCheck request is created for the choice.
|
|
308
|
+
- [ ] Observation, interpretation, confirmation, and choice remain separate.
|
|
309
|
+
- [ ] The researcher states a choice in words and the agent follows the typed choice.
|
|
310
|
+
- [ ] The agent makes no Chattermill write, mutation, export, share, tag,
|
|
311
|
+
comment, or analytics call.
|
|
312
|
+
- [ ] No individual customer, respondent, or employee data enters the
|
|
313
|
+
cross-MCP flow.
|
|
314
|
+
|
|
315
|
+
## Sources
|
|
316
|
+
|
|
317
|
+
- [Chattermill MCP server guide](https://docs.chattermill.com/en/articles/13943134-chattermill-mcp-server)
|
|
318
|
+
- [Chattermill MCP endpoint](https://app.chattermill.com/mcp)
|
|
319
|
+
- [Chattermill MCP protected-resource metadata](https://app.chattermill.com/.well-known/oauth-protected-resource/mcp)
|
|
320
|
+
- [Chattermill MCP authorization-server metadata](https://app.chattermill.com/.well-known/oauth-authorization-server)
|
|
321
|
+
- [SomaCheck MCP setup and tool behavior](../README.md)
|
|
322
|
+
- [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
|
|
323
|
+
- [MCP Customer-Testable Experience Catalog](../../../docs/agent-adoption/customer-experience-catalog.md)
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Dovetail + SomaCheck Research Reflection
|
|
3
|
+
recipe_id: dovetail-research-reflection-v1
|
|
4
|
+
status: P1 researcher-side only
|
|
5
|
+
audience: Researchers using Dovetail with an MCP-capable agent
|
|
6
|
+
updated: 2026-09-03
|
|
7
|
+
required_mcp_servers:
|
|
8
|
+
- dovetail
|
|
9
|
+
- vibecheck
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Dovetail + SomaCheck Research Reflection
|
|
13
|
+
|
|
14
|
+
Use this recipe when a researcher wants a private, consented signal about their
|
|
15
|
+
own response to research work held in Dovetail. It supports reflection on
|
|
16
|
+
question wording, study design, and evidence interpretation. It does not assess
|
|
17
|
+
participants and does not add SomaCheck readings to the research record.
|
|
18
|
+
|
|
19
|
+
The reading is context for the researcher. It is not truth, a diagnosis,
|
|
20
|
+
authorization, evidence about a participant, or a research decision. The
|
|
21
|
+
researcher remains the authority.
|
|
22
|
+
|
|
23
|
+
## Launch boundary
|
|
24
|
+
|
|
25
|
+
This P1 recipe is **researcher-side only**. The person holding the phone and
|
|
26
|
+
receiving the SomaCheck result must be the researcher interacting with the
|
|
27
|
+
agent.
|
|
28
|
+
|
|
29
|
+
Do not use this recipe to:
|
|
30
|
+
|
|
31
|
+
- ask a participant or employee to complete a SomaCheck;
|
|
32
|
+
- read, infer, compare, rank, monitor, or gate a participant;
|
|
33
|
+
- export a participant reading, confidence, or confirmation into Dovetail;
|
|
34
|
+
- tag, score, or characterize a transcript, highlight, contact, response, or
|
|
35
|
+
participant using a SomaCheck result;
|
|
36
|
+
- decide eligibility, compensation, research quality, truthfulness, or whether
|
|
37
|
+
evidence should be included; or
|
|
38
|
+
- run a live respondent workflow.
|
|
39
|
+
|
|
40
|
+
Participant-facing use stays blocked until a `respondent_private` architecture
|
|
41
|
+
technically prevents researcher or platform access to individual readings, a
|
|
42
|
+
methodology and ethics review is complete, and Mike gives explicit approval.
|
|
43
|
+
Documentation or workspace access is not approval to cross this boundary.
|
|
44
|
+
|
|
45
|
+
## Prerequisites
|
|
46
|
+
|
|
47
|
+
1. The researcher has linked the `vibecheck` MCP server to their own SomaCheck
|
|
48
|
+
account and can see `request_vibecheck` and `get_vibecheck_result`.
|
|
49
|
+
2. The agent has the Dovetail MCP connection authorized by the researcher. Use
|
|
50
|
+
Dovetail's hosted endpoint, `https://dovetail.com/api/mcp`, or its documented
|
|
51
|
+
self-hosted server. Keep API tokens in the MCP client's secret configuration,
|
|
52
|
+
never in prompts, propositions, comments, or logs.
|
|
53
|
+
3. The researcher names the exact Dovetail doc in scope. Access to a workspace
|
|
54
|
+
is not consent to search the whole workspace.
|
|
55
|
+
4. The source is allowlisted: a researcher-authored research brief, discussion
|
|
56
|
+
guide, study plan, or de-identified researcher-authored synthesis.
|
|
57
|
+
|
|
58
|
+
Never open raw interviews, transcripts, recordings, highlights, channel data,
|
|
59
|
+
contacts, participant identifiers, or participant-authored responses for this
|
|
60
|
+
recipe. If the selected Dovetail artifact mixes allowed planning material with
|
|
61
|
+
participant content, stop and ask for a researcher-authored, de-identified
|
|
62
|
+
summary.
|
|
63
|
+
|
|
64
|
+
## Dovetail tool policy
|
|
65
|
+
|
|
66
|
+
Use the smallest read scope that answers the researcher's request.
|
|
67
|
+
|
|
68
|
+
| Purpose | Dovetail MCP tools | Rule |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| Locate the named planning artifact | `get_doc`, or `list_docs` only when the researcher supplied a title rather than an ID | Use `get_doc` directly for a researcher-supplied ID. Do not list the workspace or search content when the ID is already known. |
|
|
71
|
+
| Read the planning artifact | `get_doc_content` | Read only an allowlisted researcher-authored doc. |
|
|
72
|
+
| Record a chosen next step | `create_comment` | Optional; call only after the researcher explicitly approves the exact comment. Never include the reading or confidence. |
|
|
73
|
+
| Broad or participant-bearing content | `search_workspace`, project-data, highlight, channel, contact, and file-download tools | Do not call in this recipe. |
|
|
74
|
+
| Other writes | project, folder, doc, data, tag, upload, and import creation tools | Not part of this recipe. Require a separate, explicit user request. |
|
|
75
|
+
|
|
76
|
+
## Exact cross-MCP workflow
|
|
77
|
+
|
|
78
|
+
Follow these steps in order. Never call Dovetail and SomaCheck in a way that
|
|
79
|
+
makes the reading an automatic write condition.
|
|
80
|
+
|
|
81
|
+
1. **Confirm the subject and scope.** State that the researcher is reflecting
|
|
82
|
+
on their own response. Name the one Dovetail doc to read.
|
|
83
|
+
2. **Retrieve only the approved artifact.** If the researcher supplied a doc ID,
|
|
84
|
+
resolve it directly with `get_doc`. If they supplied only a title, use
|
|
85
|
+
`list_docs` to match that exact title, then resolve it with `get_doc`. Read the
|
|
86
|
+
approved doc with `get_doc_content`. Do not call `search_workspace`. Stop if
|
|
87
|
+
the doc contains participant-authored or identifying material.
|
|
88
|
+
3. **Separate evidence from interpretation.** Summarize:
|
|
89
|
+
- what the planning artifact literally says;
|
|
90
|
+
- what the agent infers may need attention; and
|
|
91
|
+
- two or more reasonable options the researcher could choose.
|
|
92
|
+
4. **Choose one first-person proposition.** It must express the researcher's
|
|
93
|
+
present experience or choice, not a claim about participants. Do not place
|
|
94
|
+
Dovetail content, participant text, names, project identifiers, or secrets in
|
|
95
|
+
the proposition.
|
|
96
|
+
5. **Establish one-ask consent.** If the researcher explicitly asked for a
|
|
97
|
+
SomaCheck vibecheck in the current message, call `request_vibecheck` with
|
|
98
|
+
`consent_basis: "user_requested_vibecheck"`. Otherwise show the exact
|
|
99
|
+
proposition, wait for acceptance, and use
|
|
100
|
+
`consent_basis: "user_approved_statement"`.
|
|
101
|
+
6. **Request once.** Call `request_vibecheck` with the approved statement and a
|
|
102
|
+
fresh UUID as `idempotency_key`. Reuse that UUID only to retry the same
|
|
103
|
+
statement after an ambiguous create failure. Never repeat an ask to seek a
|
|
104
|
+
preferred result.
|
|
105
|
+
7. **Handle the exact result.** `request_vibecheck` reports a terminal answer as
|
|
106
|
+
`state: "completed"`; a later `get_vibecheck_result` read reports the same
|
|
107
|
+
lifecycle point as `status: "answered"`. Treat either as the terminal result
|
|
108
|
+
and keep four layers distinct: observation (a valid gesture was captured),
|
|
109
|
+
interpretation (`aligned` or `unaligned` plus model confidence), confirmation
|
|
110
|
+
(what the researcher says), and choice (what the researcher decides).
|
|
111
|
+
`unaligned` means possible inner conflict relative to the proposition; it
|
|
112
|
+
does not identify a cause. If the initial response is `pending`, retain its
|
|
113
|
+
`live:<uuid>` handle and call `get_vibecheck_result` with that exact handle
|
|
114
|
+
once later. Do not create a replacement request. If that read is still
|
|
115
|
+
`pending`, is `expired` or `cancelled`, or errors, continue without a result;
|
|
116
|
+
do not infer one or start another request.
|
|
117
|
+
8. **Return authority.** Offer the options to revise, investigate, proceed,
|
|
118
|
+
pause, or leave the artifact unchanged. A typed researcher choice overrides
|
|
119
|
+
the signal.
|
|
120
|
+
9. **Keep the signal private.** Do not write the verdict, confidence, gesture,
|
|
121
|
+
or confirmation to Dovetail. If the researcher asks to record a next step,
|
|
122
|
+
show a signal-free comment first and call `create_comment` only after exact
|
|
123
|
+
approval.
|
|
124
|
+
|
|
125
|
+
## Proposition examples
|
|
126
|
+
|
|
127
|
+
Good propositions are short, first-person, and about the researcher:
|
|
128
|
+
|
|
129
|
+
- “I can explain why this question asks one thing at a time.”
|
|
130
|
+
- “I want to use this discussion guide in its current form.”
|
|
131
|
+
- “My interpretation separates what participants said from what I inferred.”
|
|
132
|
+
- “I am ready to treat this synthesis as one input to the next design choice.”
|
|
133
|
+
- “I want to investigate a competing explanation before I proceed.”
|
|
134
|
+
|
|
135
|
+
Never send propositions such as:
|
|
136
|
+
|
|
137
|
+
- “This participant is telling the truth.”
|
|
138
|
+
- “This transcript is high quality.”
|
|
139
|
+
- “These users support the conclusion.”
|
|
140
|
+
- “This employee is aligned with the company.”
|
|
141
|
+
|
|
142
|
+
## Trigger and anti-trigger rules
|
|
143
|
+
|
|
144
|
+
Trigger this recipe when the researcher explicitly asks to reflect with
|
|
145
|
+
SomaCheck. The agent may also **offer** one check when the researcher is choosing
|
|
146
|
+
between defensible question phrasings, sees tension between evidence and an
|
|
147
|
+
interpretation, or says that something in the design feels off but is hard to
|
|
148
|
+
name. An offer must include the exact proposition and must not call the tool
|
|
149
|
+
until accepted.
|
|
150
|
+
|
|
151
|
+
Do not trigger when:
|
|
152
|
+
|
|
153
|
+
- the task is ordinary Dovetail retrieval, summarization, tagging, or export;
|
|
154
|
+
- the proposed subject is anyone other than the researcher;
|
|
155
|
+
- the source contains raw or identifiable participant material;
|
|
156
|
+
- the researcher has already made a clear typed choice;
|
|
157
|
+
- the result would determine inclusion, quality, compensation, performance, or
|
|
158
|
+
another consequential outcome; or
|
|
159
|
+
- a vibecheck was already used for the same decision.
|
|
160
|
+
|
|
161
|
+
## Consent, privacy, and failure behavior
|
|
162
|
+
|
|
163
|
+
Linking the MCP servers is setup, not blanket consent. A proactive check always
|
|
164
|
+
requires acceptance of its exact wording. Never send raw conversations,
|
|
165
|
+
Dovetail text, participant data, identifiers, secrets, or diagnostic claims to
|
|
166
|
+
SomaCheck. Raw phone motion never goes to the agent or Dovetail.
|
|
167
|
+
|
|
168
|
+
If Dovetail authorization fails, ask the researcher to repair the connection;
|
|
169
|
+
never request that they paste a token. If the document's provenance or
|
|
170
|
+
de-identification is unclear, stop before reading it. If SomaCheck reports an
|
|
171
|
+
unreadable capture, request a retry only if the researcher wants one; unreadable
|
|
172
|
+
is not a third interpretation. If the request expires, is cancelled, or errors,
|
|
173
|
+
continue without a reading. Never infer a result. If the result and the
|
|
174
|
+
researcher's words differ, follow the researcher's words and preserve the
|
|
175
|
+
difference rather than reconciling it into a score.
|
|
176
|
+
|
|
177
|
+
## Verification checklist
|
|
178
|
+
|
|
179
|
+
- [ ] Both MCP servers expose their expected tools; no credential appears in
|
|
180
|
+
chat or logs.
|
|
181
|
+
- [ ] The agent names one researcher-authored, participant-free Dovetail doc.
|
|
182
|
+
- [ ] Broad search and disallowed Dovetail data, highlight, channel, contact,
|
|
183
|
+
and download tools are not called.
|
|
184
|
+
- [ ] The proposition is first-person and contains no Dovetail or participant
|
|
185
|
+
content.
|
|
186
|
+
- [ ] A proactive ask waits for acceptance; an explicit user request does not
|
|
187
|
+
add a redundant consent prompt.
|
|
188
|
+
- [ ] One decision creates at most one `request_vibecheck` request and preserves
|
|
189
|
+
its stable pending handle.
|
|
190
|
+
- [ ] The response distinguishes observation, interpretation, confirmation, and
|
|
191
|
+
choice.
|
|
192
|
+
- [ ] No reading, confidence, confirmation, or participant inference is written
|
|
193
|
+
to Dovetail.
|
|
194
|
+
- [ ] Any Dovetail comment contains only the researcher's explicitly approved,
|
|
195
|
+
signal-free next step.
|
|
196
|
+
- [ ] Participant-facing behavior remains blocked by the `respondent_private`,
|
|
197
|
+
methodology/ethics, and Mike-approval gates.
|
|
198
|
+
|
|
199
|
+
## Sources
|
|
200
|
+
|
|
201
|
+
- [Dovetail MCP server documentation](https://developers.dovetail.com/docs/mcp)
|
|
202
|
+
- [Dovetail API overview](https://docs.dovetail.com/integrations/dovetail-api)
|
|
203
|
+
- [SomaCheck MCP setup and tool behavior](../README.md)
|
|
204
|
+
- [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
|