@somacheck/vibecheck 0.6.9 → 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 +84 -9
- 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/client-setup.js +2 -1
- package/dist/constants.js +2 -1
- package/dist/readiness.js +2 -2
- package/dist/recipes.js +191 -0
- package/dist/server.js +58 -15
- 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
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Sprig + SomaCheck Research Reflection
|
|
3
|
+
recipe_id: sprig-research-reflection-v1
|
|
4
|
+
status: P1 researcher-side read-only artifact review
|
|
5
|
+
audience: Researchers using an owner-provisioned Sprig sandbox with an MCP-capable agent
|
|
6
|
+
updated: 2026-09-05
|
|
7
|
+
required_mcp_servers:
|
|
8
|
+
- sprig
|
|
9
|
+
- vibecheck
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Sprig + SomaCheck Research Reflection
|
|
13
|
+
|
|
14
|
+
This recipe lets a researcher privately reflect on the wording of one
|
|
15
|
+
participant-free Sprig test artifact supplied by a product or integration
|
|
16
|
+
owner. The agent reads only the minimum artifact metadata and question text,
|
|
17
|
+
then returns a copy-ready, signal-free revision. Sprig remains unchanged.
|
|
18
|
+
|
|
19
|
+
The researcher is the phone holder and the subject of the proposition. The
|
|
20
|
+
agent receives only the proposition, **Aligned** or **Unaligned**, and model
|
|
21
|
+
confidence, then uses those values with the conversation context to decide how
|
|
22
|
+
best to continue. The reading is context, not truth, diagnosis, authorization,
|
|
23
|
+
or a research decision. The researcher remains the authority.
|
|
24
|
+
|
|
25
|
+
## Experience a researcher can run
|
|
26
|
+
|
|
27
|
+
The product or integration owner provisions an organization-authorized Sprig
|
|
28
|
+
connection or partner sandbox and supplies one clearly named, participant-free
|
|
29
|
+
test artifact. The researcher asks the agent to inspect that artifact without
|
|
30
|
+
retrieving responses or themes. The agent offers alternative wording and an
|
|
31
|
+
optional first-person SomaCheck check-in about the researcher's own direction.
|
|
32
|
+
After receiving the result and confidence, the agent exercises judgment about
|
|
33
|
+
the next conversational move without applying a scripted meaning to either
|
|
34
|
+
label. The researcher decides what, if anything, to adopt. The agent returns a
|
|
35
|
+
copy-ready revision and performs no Sprig write.
|
|
36
|
+
|
|
37
|
+
## Starter prompt
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
Use Sprig and SomaCheck to help me privately reflect on one participant-free
|
|
41
|
+
test artifact supplied by the product or integration owner. I am the
|
|
42
|
+
researcher and I am holding the phone. The artifact is [TEST ARTIFACT NAME OR
|
|
43
|
+
ID PROVIDED BY THE OWNER]. Use only the preconfigured Sprig partner sandbox or
|
|
44
|
+
organization-authorized connection. Read only the minimum artifact metadata
|
|
45
|
+
and question text needed for this review. Do not retrieve responses, themes,
|
|
46
|
+
source quotes, respondent fields, identifiers, contact data, or PII. Offer two
|
|
47
|
+
defensible wording directions, then offer one short first-person proposition
|
|
48
|
+
about my own direction and wait for my acceptance before any proactive
|
|
49
|
+
SomaCheck ask. After the check, use only the proposition, Aligned or Unaligned,
|
|
50
|
+
and confidence together with our conversation context; exercise your judgment
|
|
51
|
+
about the next conversational move and do not apply a fixed script to either
|
|
52
|
+
result. I decide what the signal means and what happens next. Keep the
|
|
53
|
+
proposition, reading, confidence, and confirmation out of Sprig. Return a
|
|
54
|
+
copy-ready, signal-free revision only. Do not create, edit, publish, delete,
|
|
55
|
+
share, archive, export, duplicate, target, distribute, launch, contact anyone,
|
|
56
|
+
or otherwise write to Sprig. If the preconfigured connection or safe read tool
|
|
57
|
+
is absent, label the Sprig half untested, work only from a participant-free
|
|
58
|
+
brief I provide, and tell the integration owner what capability is missing. Do
|
|
59
|
+
not ask me to sign up, upgrade, purchase access, administer access, or populate
|
|
60
|
+
Sprig data.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Prerequisites and access
|
|
64
|
+
|
|
65
|
+
1. SomaCheck is ready on the researcher's iPhone and the `vibecheck` MCP is
|
|
66
|
+
linked to that researcher's agent client.
|
|
67
|
+
2. The product or integration owner has provisioned an organization-authorized
|
|
68
|
+
Sprig connection or partner sandbox. Running this recipe does not ask the
|
|
69
|
+
researcher to sign up, upgrade, purchase access, administer access, or
|
|
70
|
+
populate Sprig data.
|
|
71
|
+
3. The owner supplies one clearly named, participant-free test artifact whose
|
|
72
|
+
question wording may be read for this review.
|
|
73
|
+
4. The runtime exposes a least-privilege read capability for that artifact. If
|
|
74
|
+
it does not, the Sprig half remains untested and no broader tool is used.
|
|
75
|
+
|
|
76
|
+
## Tool policy
|
|
77
|
+
|
|
78
|
+
Sprig's public pages describe capability names but not stable raw MCP tool
|
|
79
|
+
names. Inspect the runtime schemas and use only the narrowest read tool that
|
|
80
|
+
can retrieve the owner-supplied test artifact's metadata and question text.
|
|
81
|
+
Record the actual discovered tool name in the test receipt. Never guess a tool
|
|
82
|
+
name or substitute a broader capability.
|
|
83
|
+
|
|
84
|
+
| Purpose | Allowed surface | Rule |
|
|
85
|
+
| --- | --- | --- |
|
|
86
|
+
| Inspect the supplied artifact | Sprig MCP Surveys or narrower runtime read | Read only its metadata and question text |
|
|
87
|
+
| Retrieve research data | Sprig MCP Responses or Themes | Prohibited in this recipe |
|
|
88
|
+
| Create or modify content | Sprig MCP Create or any mutation surface | Prohibited in this recipe |
|
|
89
|
+
| Launch or contact people | Any targeting, distribution, or launch surface | Prohibited in this recipe |
|
|
90
|
+
| Private reflection | `request_vibecheck`, optional `get_vibecheck_result` | One decision, one request, one stable pending handle |
|
|
91
|
+
|
|
92
|
+
## Exact cross-MCP workflow
|
|
93
|
+
|
|
94
|
+
1. **Confirm the scope.** State that the researcher is the phone holder and
|
|
95
|
+
proposition subject. Identify the owner-supplied participant-free artifact.
|
|
96
|
+
2. **Fail closed on access.** Confirm a preconfigured partner sandbox or
|
|
97
|
+
organization-authorized connection and a narrow artifact-read capability.
|
|
98
|
+
If either is absent, do not ask the researcher to obtain or populate an
|
|
99
|
+
account; use the degraded path.
|
|
100
|
+
3. **Read only the test artifact.** Retrieve only its metadata and question
|
|
101
|
+
wording. Do not call Responses, Themes, or any create or mutation tool.
|
|
102
|
+
4. **Offer two directions.** Separate the artifact's literal wording from the
|
|
103
|
+
agent's interpretation and suggest two defensible, signal-free revisions.
|
|
104
|
+
5. **Offer one first-person proposition.** Keep it about the researcher's own
|
|
105
|
+
direction, for example: “I want this study to focus on the moment a user
|
|
106
|
+
first notices friction.” Do not include platform IDs, respondent data, or
|
|
107
|
+
confidential artifact text.
|
|
108
|
+
6. **Establish consent.** If the researcher explicitly requested the check-in
|
|
109
|
+
in the current message, use `consent_basis: "user_requested_vibecheck"`.
|
|
110
|
+
Otherwise show the exact proposition, wait for acceptance, and use
|
|
111
|
+
`consent_basis: "user_approved_statement"`.
|
|
112
|
+
7. **Create one request.** Call `request_vibecheck` once with a fresh UUID as
|
|
113
|
+
`idempotency_key`. Reuse it only after an ambiguous create failure for the
|
|
114
|
+
exact same proposition.
|
|
115
|
+
8. **Handle the real lifecycle.** A terminal response from
|
|
116
|
+
`request_vibecheck` uses `state: "completed"`; a later read uses
|
|
117
|
+
`status: "answered"`. If the initial request is pending, retain its
|
|
118
|
+
`live:<uuid>` handle and call `get_vibecheck_result` with it once later. If
|
|
119
|
+
it remains pending, expires, is cancelled, or errors, continue without a
|
|
120
|
+
result. Do not create another request.
|
|
121
|
+
9. **Use the signal as context.** Give the agent the proposition, `aligned` or
|
|
122
|
+
`unaligned`, and confidence. The agent combines them with the conversation
|
|
123
|
+
and exercises judgment about what to say next. Do not prescribe a fixed
|
|
124
|
+
recommendation for either result or infer its cause. The researcher decides
|
|
125
|
+
whether any proposed revision is right for them.
|
|
126
|
+
10. **Return a signal-free revision.** Provide copy-ready title, purpose,
|
|
127
|
+
audience description, and question wording. Include no proposition,
|
|
128
|
+
reading, confidence, gesture, confirmation, or reference to SomaCheck.
|
|
129
|
+
11. **End without a partner write.** Do not create or update a draft, verify by
|
|
130
|
+
mutation, launch, distribute, target, contact anyone, or change Sprig.
|
|
131
|
+
|
|
132
|
+
## Example propositions
|
|
133
|
+
|
|
134
|
+
Allowed first-person propositions about the researcher's own direction:
|
|
135
|
+
|
|
136
|
+
- “I want this study to focus on first-use clarity.”
|
|
137
|
+
- “This question asks the one thing I need to learn.”
|
|
138
|
+
- “I want to keep these two concepts separate.”
|
|
139
|
+
- “I am ready to use this wording in my research plan.”
|
|
140
|
+
|
|
141
|
+
Not allowed:
|
|
142
|
+
|
|
143
|
+
- “Users will understand this question.”
|
|
144
|
+
- “These responses will be valid.”
|
|
145
|
+
- “This study will prove the concept.”
|
|
146
|
+
- “This respondent's answer can be trusted.”
|
|
147
|
+
|
|
148
|
+
## Visible success condition
|
|
149
|
+
|
|
150
|
+
The test passes when:
|
|
151
|
+
|
|
152
|
+
- a preconfigured Sprig sandbox or organization-authorized connection exposes
|
|
153
|
+
the owner-supplied participant-free artifact through a narrow read tool;
|
|
154
|
+
- the researcher receives at most one optional SomaCheck signal about their
|
|
155
|
+
own proposition;
|
|
156
|
+
- the agent uses the result and confidence as context while retaining judgment
|
|
157
|
+
about the next conversational move;
|
|
158
|
+
- the researcher remains the authority over the revision;
|
|
159
|
+
- the agent returns copy-ready, signal-free wording; and
|
|
160
|
+
- the client log contains no Responses, Themes, create, edit, launch,
|
|
161
|
+
distribution, participant-contact, or other Sprig mutation call.
|
|
162
|
+
|
|
163
|
+
The SomaCheck result does not need to match the researcher's eventual choice.
|
|
164
|
+
Sprig remains unchanged.
|
|
165
|
+
|
|
166
|
+
## Failure and degraded paths
|
|
167
|
+
|
|
168
|
+
- **No owner-provisioned sandbox or connection:** Work only from a
|
|
169
|
+
participant-free brief supplied in the conversation, return copy-ready
|
|
170
|
+
wording, label the Sprig half untested, and tell the integration owner what
|
|
171
|
+
is missing. Do not direct the researcher to sign up or buy access.
|
|
172
|
+
- **No narrow artifact read:** Do not switch to Responses, Themes, Create, or
|
|
173
|
+
another broader capability. Use the participant-free brief instead.
|
|
174
|
+
- **Unexpected write path:** Do not call it. Report the discovered capability
|
|
175
|
+
and leave Sprig unchanged.
|
|
176
|
+
- **SomaCheck pending:** Read the same stable handle once later. If unresolved,
|
|
177
|
+
continue without a reading.
|
|
178
|
+
- **Unreadable capture:** Ask whether the researcher wants to retry. Unreadable
|
|
179
|
+
is not a third interpretation.
|
|
180
|
+
- **Signal and words differ:** Preserve both as separate context. Do not repeat
|
|
181
|
+
the check to seek a preferred result; the researcher chooses what happens.
|
|
182
|
+
|
|
183
|
+
## Privacy boundary
|
|
184
|
+
|
|
185
|
+
- Raw accelerometer and gyroscope data never reaches the agent or Sprig.
|
|
186
|
+
- Sprig receives no SomaCheck proposition, reading, confidence, confirmation,
|
|
187
|
+
or phone metadata.
|
|
188
|
+
- SomaCheck receives no Sprig responses, themes, quotes, respondent fields,
|
|
189
|
+
study IDs, credentials, PII, or confidential artifact text.
|
|
190
|
+
- The copy-ready revision contains no SomaCheck output.
|
|
191
|
+
- Linking both MCP servers is setup, not blanket consent for a check-in.
|
|
192
|
+
|
|
193
|
+
## Test checklist
|
|
194
|
+
|
|
195
|
+
- [ ] The researcher is the phone holder and proposition subject.
|
|
196
|
+
- [ ] A product or integration owner supplied the connection or partner
|
|
197
|
+
sandbox and the participant-free test artifact.
|
|
198
|
+
- [ ] The researcher was not asked to sign up, upgrade, purchase access,
|
|
199
|
+
administer access, or populate Sprig data.
|
|
200
|
+
- [ ] The actual runtime read tool is recorded; no tool name is guessed.
|
|
201
|
+
- [ ] No Responses, Themes, Create, or mutation tool is invoked.
|
|
202
|
+
- [ ] The proposition is first-person and contains no Sprig or respondent data.
|
|
203
|
+
- [ ] A proactive check waits for acceptance; an explicit user request uses the
|
|
204
|
+
direct-request consent basis.
|
|
205
|
+
- [ ] One decision creates at most one request and retains its pending handle.
|
|
206
|
+
- [ ] The agent receives only the proposition, reading, and confidence and
|
|
207
|
+
retains judgment about the next conversational move.
|
|
208
|
+
- [ ] Observation, interpretation, confirmation, and choice remain distinct.
|
|
209
|
+
- [ ] The researcher decides whether to use the proposed revision.
|
|
210
|
+
- [ ] No targeting, distribution, participant contact, launch, or platform
|
|
211
|
+
mutation occurs.
|
|
212
|
+
- [ ] No SomaCheck output is written to Sprig, analytics, memory, or an
|
|
213
|
+
artifact field.
|
|
214
|
+
- [ ] Sprig remains unchanged.
|
|
215
|
+
|
|
216
|
+
## Sources
|
|
217
|
+
|
|
218
|
+
- [Sprig MCP launch](https://sprig.com/blog/introducing-sprig-mcp)
|
|
219
|
+
- [Sprig MCP workflows, endpoint, and capability modes](https://sprig.com/blog/mcp-research-integration)
|
|
220
|
+
- [Sprig MCP data security](https://sprig.com/blog/mcp-data-security)
|
|
221
|
+
- [SomaCheck MCP setup and tool behavior](../README.md)
|
|
222
|
+
- [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Studio by Spotify Labs — SomaCheck Context Packet
|
|
3
|
+
status: standalone local context packet; not a recipe catalog entry, not a live connection
|
|
4
|
+
audience: Mike, to paste into Studio by Spotify Labs (Kit) before or during the manual pilot
|
|
5
|
+
updated: 2026-09-03
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Studio by Spotify Labs — SomaCheck Context Packet
|
|
9
|
+
|
|
10
|
+
This is a **local context packet**, not a connector. It contains no secrets,
|
|
11
|
+
no user history, and no health data. Paste it into Studio so Kit has accurate
|
|
12
|
+
background before Mike manually relays one SomaCheck result during the manual
|
|
13
|
+
pilot described in the
|
|
14
|
+
[Spotify Listening Reflection Integration Scope](../../../docs/agent-adoption/spotify-integration-scope.md).
|
|
15
|
+
Studio does not currently document a way to attach the SomaCheck MCP server
|
|
16
|
+
directly, and this document does not claim otherwise. It is text Mike shares
|
|
17
|
+
by hand, exactly like the prompts in
|
|
18
|
+
[`spotify-listening-reflection.md`](spotify-listening-reflection.md).
|
|
19
|
+
|
|
20
|
+
**Delivery method.** Pasting is the approved default because it discloses
|
|
21
|
+
exactly this document and nothing else. Granting Studio file access is permitted
|
|
22
|
+
only after the capability probe in
|
|
23
|
+
[`studio-context-safety-review.md`](../../../docs/agent-adoption/studio-context-safety-review.md)
|
|
24
|
+
confirms that the grant is file-scoped and revocable, and only for a copy in a
|
|
25
|
+
dedicated directory containing nothing else. Never grant Studio a path inside
|
|
26
|
+
this repository, a Syncthing folder, `~/Documents`, or `~/Desktop`. Remove the
|
|
27
|
+
grant at the end of every session.
|
|
28
|
+
|
|
29
|
+
## What happens to this text
|
|
30
|
+
|
|
31
|
+
Studio is a research preview for select Spotify Premium users aged 18 and over
|
|
32
|
+
in select markets, with usage limits. Spotify says messages are processed by an
|
|
33
|
+
AI provider acting as its service partner and are not used to train that
|
|
34
|
+
provider's models, and that memory and conversation history are stored locally
|
|
35
|
+
and can be inspected or deleted. Pasting or granting this document therefore
|
|
36
|
+
discloses it to Spotify and to that provider. It contains no secrets, no user
|
|
37
|
+
history, and no health data precisely because of that. Treat everything shared
|
|
38
|
+
with Kit as disclosed.
|
|
39
|
+
|
|
40
|
+
## What SomaCheck is
|
|
41
|
+
|
|
42
|
+
SomaCheck is a consented, agent-native clarification tool. When words are the
|
|
43
|
+
bottleneck, the person completes one brief wrist gesture in response to a
|
|
44
|
+
first-person statement they saw and accepted. SomaCheck is not stress
|
|
45
|
+
detection, not truth detection, not survey validity scoring, not employee
|
|
46
|
+
alignment or engagement scoring, and it is not decision authority. It never
|
|
47
|
+
tells Kit, or any other agent, what to do next. The person remains the
|
|
48
|
+
authority over every action.
|
|
49
|
+
|
|
50
|
+
## Exact Aligned and Unaligned semantics
|
|
51
|
+
|
|
52
|
+
- **Aligned** is the model's interpretation that the person's gesture was
|
|
53
|
+
aligned with the exact first-person statement at that moment. It is not a
|
|
54
|
+
command, objective truth, preference score, or permission to act.
|
|
55
|
+
- **Unaligned** is the model's interpretation of possible inner conflict
|
|
56
|
+
relative to that exact statement. It does not identify a cause, meaning,
|
|
57
|
+
mood, fix, or correct response. It is not an instruction to change course,
|
|
58
|
+
calm down, or pick something else.
|
|
59
|
+
- Both outcomes are proposition-relative to the one statement asked. Neither
|
|
60
|
+
outcome is emotion, stress, truth, or a durable fact about the person.
|
|
61
|
+
|
|
62
|
+
## Confidence
|
|
63
|
+
|
|
64
|
+
SomaCheck returns a model confidence alongside Aligned or Unaligned. Confidence
|
|
65
|
+
describes how clearly the gesture matched a known pattern, not how "true" or
|
|
66
|
+
"important" the result is. A valid low-confidence reading remains a binary
|
|
67
|
+
interpretation. Capture quality is a separate concern: an unreadable capture is
|
|
68
|
+
not a third interpretation and calls for a retry, never a guess.
|
|
69
|
+
|
|
70
|
+
Confidence stays between the person and their companion agent. It is never
|
|
71
|
+
relayed to Kit, Studio, or Spotify: it adds nothing to the playback question
|
|
72
|
+
and gives an agent a numeric handle to reason over and retain.
|
|
73
|
+
|
|
74
|
+
## Keep the four layers separate
|
|
75
|
+
|
|
76
|
+
- **Observation:** SomaCheck captured a technically valid gesture. Raw motion
|
|
77
|
+
and calibration values do not leave SomaCheck.
|
|
78
|
+
- **Interpretation:** The model returned Aligned or Unaligned plus confidence
|
|
79
|
+
relative to the exact proposition. This is a signal, not truth.
|
|
80
|
+
- **Confirmation:** The person says whether the interpretation matches what
|
|
81
|
+
they notice. Their report does not overwrite the original interpretation.
|
|
82
|
+
- **Choice:** The person decides what happens next. Only their separate typed
|
|
83
|
+
answer can authorize a Spotify action.
|
|
84
|
+
|
|
85
|
+
## Consent
|
|
86
|
+
|
|
87
|
+
Every SomaCheck ask uses one-ask consent. If the person's own message
|
|
88
|
+
explicitly requests a check, that request is the consent for one ask. If an
|
|
89
|
+
agent proposes the check, it must show the exact statement and wait for
|
|
90
|
+
acceptance before asking. Decline or silence is never treated as consent, and
|
|
91
|
+
no agent may repeat an ask to try for a preferred answer. Linking or setup is
|
|
92
|
+
never blanket consent to future asks.
|
|
93
|
+
|
|
94
|
+
## Human authority
|
|
95
|
+
|
|
96
|
+
The reading is context for the person's next choice, nothing more. Kit must
|
|
97
|
+
never treat Aligned as a green light to play, queue, save, or change anything,
|
|
98
|
+
and must never treat Unaligned as a reason to substitute a different action on
|
|
99
|
+
its own. Only a separate, typed, explicit human answer changes what Spotify
|
|
100
|
+
does. Aligned is not yes. Unaligned is not no. Silence is not permission.
|
|
101
|
+
|
|
102
|
+
## Raw-motion boundary
|
|
103
|
+
|
|
104
|
+
Raw phone motion (accelerometer, gyroscope, magnetometer) and personal
|
|
105
|
+
calibration data never leave the person's device and are never sent to Kit,
|
|
106
|
+
Studio, Spotify, or any agent. The only thing that may ever be manually relayed
|
|
107
|
+
to Kit is the finished binary result—Aligned or Unaligned—for one exact
|
|
108
|
+
proposition. Never the numeric confidence, never a sensor stream, never a
|
|
109
|
+
calibration score, never a `report_emotional_state`-style payload.
|
|
110
|
+
|
|
111
|
+
## Never reuse this in generated audio or scheduled tasks
|
|
112
|
+
|
|
113
|
+
Studio can create personal podcasts, daily briefs, and deep dives, and can run
|
|
114
|
+
scheduled tasks while the computer is on. None of them may use this document, a
|
|
115
|
+
SomaCheck result, or any claim about the person: not in audio, a script, title,
|
|
116
|
+
summary, artwork, chapters, a timeline, show metadata, playlist name, or
|
|
117
|
+
playlist description. A scheduled task must never act on a SomaCheck result—
|
|
118
|
+
there is no person present to answer the confirmation question, and without
|
|
119
|
+
that answer there is no authorization.
|
|
120
|
+
|
|
121
|
+
## No stress or emotion claim
|
|
122
|
+
|
|
123
|
+
Do not describe SomaCheck, Aligned, or Unaligned as detecting stress,
|
|
124
|
+
identifying an emotion, diagnosing a mood, or reading "what the body says."
|
|
125
|
+
Do not invent a cause for an Unaligned result and do not automatically queue a
|
|
126
|
+
"calming" or "grounding" track in response to it. Do not automatically
|
|
127
|
+
reinforce or increase energy in response to an Aligned result. The reading
|
|
128
|
+
never selects, ranks, or authorizes a track by itself.
|
|
129
|
+
|
|
130
|
+
## The manual Kit pilot
|
|
131
|
+
|
|
132
|
+
Studio's public materials document Kit's taste-aware recommendation and
|
|
133
|
+
playback capabilities but do not document a third-party MCP attachment, a
|
|
134
|
+
`report_emotional_state` tool, or a `get_taste_profile` handshake. Until
|
|
135
|
+
Spotify documents or approves such a surface, any Kit + SomaCheck experience
|
|
136
|
+
is a **manual bridge that Mike carries by hand between two separate
|
|
137
|
+
conversations**, never a native or automatic MCP integration. Label every test
|
|
138
|
+
`manual Studio bridge`, not `Kit MCP integration`.
|
|
139
|
+
|
|
140
|
+
The pilot sequence, in full, lives in
|
|
141
|
+
[`spotify-listening-reflection.md`](spotify-listening-reflection.md) and the
|
|
142
|
+
[integration scope document](../../../docs/agent-adoption/spotify-integration-scope.md):
|
|
143
|
+
Kit proposes exactly one candidate track without acting, a separate
|
|
144
|
+
SomaCheck-linked companion agent sends one exact proposition and reports the
|
|
145
|
+
Aligned/Unaligned result and confidence, Mike chooses whether to relay only the
|
|
146
|
+
binary result back into Studio, Kit asks a separate exact playback question, and only
|
|
147
|
+
a typed yes changes Spotify. A typed no or silence changes nothing.
|
|
148
|
+
|
|
149
|
+
## Studio acceptance prompt (copy exactly)
|
|
150
|
+
|
|
151
|
+
Paste this into Studio after sharing the rest of this document as context.
|
|
152
|
+
It makes Kit state its understanding, confirm the two hard boundaries, and
|
|
153
|
+
then run one dry run that changes nothing in Spotify.
|
|
154
|
+
|
|
155
|
+
> Kit, I just gave you a SomaCheck context packet. First, tell me in your own
|
|
156
|
+
> words what you learned: what SomaCheck is, what Aligned and Unaligned mean,
|
|
157
|
+
> what confidence means, and what none of that means. Then confirm explicitly:
|
|
158
|
+
> you will never treat a SomaCheck result as authorization to play, queue,
|
|
159
|
+
> save, or change anything in Spotify, and you will never store a SomaCheck
|
|
160
|
+
> result as a durable taste, preference, or profile signal. Now run one
|
|
161
|
+
> no-action dry run: suggest one specific track based on my Spotify taste and
|
|
162
|
+
> what is currently playing, but do not play it, queue it, save it, or change
|
|
163
|
+
> Spotify in any way. Show me only the exact title and artist, then stop and
|
|
164
|
+
> wait.
|
|
165
|
+
|
|
166
|
+
If Kit takes any Spotify action before this prompt's dry-run step is answered,
|
|
167
|
+
or claims to remember a signal as a stable preference, the pilot has failed
|
|
168
|
+
its safety check. Record that outcome and do not continue to the live
|
|
169
|
+
relay steps until it is resolved.
|
|
170
|
+
|
|
171
|
+
Kit agreeing to a boundary is evidence that it parsed the text, not that it
|
|
172
|
+
will hold to it. After the dry run, open a **fresh** Studio conversation and ask
|
|
173
|
+
`What do you know about my music preferences?` and `What do you know about
|
|
174
|
+
SomaCheck?`. Any answer naming the tested track, artist, verdict, or a preference
|
|
175
|
+
derived from one fails the safety check regardless of what Kit promised.
|
|
176
|
+
|
|
177
|
+
## After the test
|
|
178
|
+
|
|
179
|
+
Every run ends with a memory check, not an assumption. Ask Kit `What did you
|
|
180
|
+
remember from this test?`, delete anything it names, and confirm the deletion.
|
|
181
|
+
Spotify documents that Studio's memory, preferences, and conversation history
|
|
182
|
+
are stored locally and can be inspected or deleted directly—but an instruction
|
|
183
|
+
not to remember is a request, not a control, so the check is mandatory and its
|
|
184
|
+
redacted summary is part of the receipt. Then run the fresh-conversation probe
|
|
185
|
+
above.
|
|
186
|
+
|
|
187
|
+
## What this document must never contain
|
|
188
|
+
|
|
189
|
+
- Secrets, tokens, or credentials of any kind.
|
|
190
|
+
- The person's SomaCheck history, past readings, or confidence values.
|
|
191
|
+
- Health data, mood logs, or any clinical or diagnostic claim.
|
|
192
|
+
- A claim that Studio or Kit has native MCP access to SomaCheck. It does not,
|
|
193
|
+
as of this writing.
|
|
194
|
+
- Granted file paths, home-directory paths, or repository paths.
|
|
195
|
+
- Spotify account names, display names, or device names.
|
|
196
|
+
|
|
197
|
+
## Sources
|
|
198
|
+
|
|
199
|
+
- [Spotify Listening Reflection Integration Scope](../../../docs/agent-adoption/spotify-integration-scope.md)
|
|
200
|
+
- [Spotify + SomaCheck Listening Reflection recipe](spotify-listening-reflection.md)
|
|
201
|
+
- [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
|
|
202
|
+
- [SomaCheck setup and tool behavior](../README.md)
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Typeform + SomaCheck Research Reflection
|
|
3
|
+
recipe_id: typeform-research-reflection-v1
|
|
4
|
+
status: P1 researcher-side only
|
|
5
|
+
audience: Researchers using Typeform with an MCP-capable agent
|
|
6
|
+
updated: 2026-09-03
|
|
7
|
+
required_mcp_servers:
|
|
8
|
+
- typeform
|
|
9
|
+
- vibecheck
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Typeform + SomaCheck Research Reflection
|
|
13
|
+
|
|
14
|
+
Use this recipe when a researcher wants a private, consented signal about their
|
|
15
|
+
own response to Typeform question wording, form structure, branching, launch
|
|
16
|
+
readiness, or interpretation plan. It does not assess respondents and does not
|
|
17
|
+
add SomaCheck readings to Typeform.
|
|
18
|
+
|
|
19
|
+
The reading is context for the researcher. It is not truth, a diagnosis,
|
|
20
|
+
authorization, evidence about a respondent, 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 respondent, employee, participant, candidate, patient, or student to
|
|
32
|
+
complete a SomaCheck;
|
|
33
|
+
- export a respondent reading, confidence, or confirmation into Typeform;
|
|
34
|
+
- write a SomaCheck result to a hidden field, variable, contact property,
|
|
35
|
+
response, automation, webhook payload, or analytics record;
|
|
36
|
+
- infer confusion, truthfulness, stress, engagement, answer quality, or survey
|
|
37
|
+
validity from a SomaCheck result;
|
|
38
|
+
- decide eligibility, payment, grading, employment, support priority, or
|
|
39
|
+
access; or
|
|
40
|
+
- run a live respondent workflow.
|
|
41
|
+
|
|
42
|
+
Participant-facing use stays blocked until a `respondent_private` architecture
|
|
43
|
+
technically prevents researcher or platform access to individual readings, a
|
|
44
|
+
methodology and ethics review is complete, and Mike gives explicit approval.
|
|
45
|
+
Typeform MCP access or respondent consent alone does not satisfy these gates.
|
|
46
|
+
|
|
47
|
+
## Prerequisites
|
|
48
|
+
|
|
49
|
+
1. The researcher has linked the `vibecheck` MCP server to their own SomaCheck
|
|
50
|
+
account and can see `request_vibecheck` and `get_vibecheck_result`.
|
|
51
|
+
2. The researcher has authorized Typeform MCP for the correct Typeform account
|
|
52
|
+
and region. Typeform's default MCP endpoint is `https://api.typeform.com/mcp`;
|
|
53
|
+
EU-hosted accounts may require a documented regional endpoint.
|
|
54
|
+
3. Typeform credentials stay in the MCP client's secret configuration. Never
|
|
55
|
+
paste, echo, log, or place them in a proposition.
|
|
56
|
+
4. The agent calls Typeform account/workspace discovery before form operations
|
|
57
|
+
and uses the smallest form scope the researcher names.
|
|
58
|
+
5. The selected Typeform artifact is a researcher-authored draft, form
|
|
59
|
+
structure, question list, logic plan, or aggregate analytics view. Do not
|
|
60
|
+
retrieve full response rows, respondent identifiers, contacts, or free-text
|
|
61
|
+
answers for this recipe.
|
|
62
|
+
|
|
63
|
+
If the researcher wants response analysis, use Typeform MCP or the Typeform
|
|
64
|
+
Responses API only for that separate analysis task. Do not place raw response
|
|
65
|
+
content inside the SomaCheck proposition.
|
|
66
|
+
|
|
67
|
+
## Typeform tool policy
|
|
68
|
+
|
|
69
|
+
Use the smallest Typeform scope that answers the researcher's request.
|
|
70
|
+
|
|
71
|
+
| Purpose | Typeform MCP tools | Rule |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| Resolve account and workspace | `accounts-list_accounts`, `workspaces-list_workspaces` | Call first when account or workspace is unclear. |
|
|
74
|
+
| Inspect form structure | `forms-public_list_forms`, `forms-public_get_form`, `forms-public_get_capabilities` | Read only the named researcher-authored form. Use the targeted `fields` or `skeleton` view when it is sufficient. |
|
|
75
|
+
| Inspect aggregate response patterns | `insights-public_discover`, then `insights-public_aggregate`, `insights-public_timeseries`, or `insights-public_toplist` | Aggregates only. Never call `insights-public_list`; it returns row-level data for a field and can expose free text. |
|
|
76
|
+
| Manage contacts or automations | Any `contacts-*` or `automations-*` tool | Do not call in this recipe. |
|
|
77
|
+
| Create, edit, delete, or publish | Any write, delete, patch, or publish tool | Not part of the reflection recipe. A separately requested Typeform mutation requires exact review and confirmation without using SomaCheck as authority. |
|
|
78
|
+
|
|
79
|
+
## Exact cross-MCP workflow
|
|
80
|
+
|
|
81
|
+
Follow these steps in order. Never make a SomaCheck reading an automatic
|
|
82
|
+
Typeform write or launch condition.
|
|
83
|
+
|
|
84
|
+
1. **Confirm the subject and scope.** State that the researcher is reflecting
|
|
85
|
+
on their own question wording, form design, or launch choice. Name the one
|
|
86
|
+
Typeform form, draft, or aggregate view in scope.
|
|
87
|
+
2. **Retrieve minimum Typeform context.** Use account and workspace tools as
|
|
88
|
+
needed, then read only the named form structure, logic, or aggregate
|
|
89
|
+
analytics. Do not retrieve respondent-level rows or contacts.
|
|
90
|
+
3. **Separate evidence from interpretation.** Summarize what the Typeform draft
|
|
91
|
+
literally contains, what the agent infers may need attention, and two or
|
|
92
|
+
more reasonable options the researcher could choose.
|
|
93
|
+
4. **Choose one first-person proposition.** It must express the researcher's
|
|
94
|
+
present experience or choice, not a claim about respondents. Do not include
|
|
95
|
+
Typeform IDs, respondent text, private answers, contact data, or secrets.
|
|
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 revise, split a question, soften leading
|
|
118
|
+
wording, add an answer option, pilot, proceed, pause, or leave unchanged. A
|
|
119
|
+
typed researcher choice overrides the signal.
|
|
120
|
+
9. **Keep the signal private.** Do not write the verdict, confidence, gesture,
|
|
121
|
+
or confirmation to Typeform. If the researcher asks for a Typeform edit,
|
|
122
|
+
show the exact signal-free edit first and call the Typeform write tool only
|
|
123
|
+
after approval.
|
|
124
|
+
|
|
125
|
+
## Proposition examples
|
|
126
|
+
|
|
127
|
+
Good propositions are short, first-person, and about the researcher:
|
|
128
|
+
|
|
129
|
+
- "This question asks one thing clearly."
|
|
130
|
+
- "This answer scale gives respondents a fair way to say what they mean."
|
|
131
|
+
- "This form is ready for a small pilot, not a full launch."
|
|
132
|
+
- "The wording here does not push respondents toward the answer I expect."
|
|
133
|
+
- "I understand what decision this survey is meant to inform."
|
|
134
|
+
- "This branching logic matches the research question I am trying to answer."
|
|
135
|
+
- "I am ready to publish this Typeform as written."
|
|
136
|
+
|
|
137
|
+
Never send propositions such as:
|
|
138
|
+
|
|
139
|
+
- "This respondent is telling the truth."
|
|
140
|
+
- "This employee is aligned with the company."
|
|
141
|
+
- "These answers are valid."
|
|
142
|
+
- "This survey will produce high-quality data."
|
|
143
|
+
- "This participant should be paid or rejected."
|
|
144
|
+
|
|
145
|
+
## Trigger and anti-trigger rules
|
|
146
|
+
|
|
147
|
+
Trigger this recipe when the researcher explicitly asks to reflect with
|
|
148
|
+
SomaCheck. The agent may also **offer** one check when the researcher is choosing
|
|
149
|
+
between defensible question phrasings, hesitating before publishing, revising
|
|
150
|
+
the same question repeatedly, or saying that something in the survey feels off
|
|
151
|
+
but is hard to name. An offer must include the exact proposition and must not
|
|
152
|
+
call the tool until accepted.
|
|
153
|
+
|
|
154
|
+
Do not trigger when:
|
|
155
|
+
|
|
156
|
+
- the task is ordinary Typeform retrieval, editing, automation, or analytics;
|
|
157
|
+
- the proposed subject is anyone other than the researcher;
|
|
158
|
+
- the source requires respondent-level rows, contacts, identifiers, or
|
|
159
|
+
free-text answers;
|
|
160
|
+
- the result would affect eligibility, payment, employment, grading, access,
|
|
161
|
+
support priority, response quality, or survey validity;
|
|
162
|
+
- the researcher has already made a clear typed choice;
|
|
163
|
+
- the researcher has declined a recent offer or opted out; or
|
|
164
|
+
- a vibecheck was already used for the same decision.
|
|
165
|
+
|
|
166
|
+
## Consent, privacy, and failure behavior
|
|
167
|
+
|
|
168
|
+
Linking the MCP servers is setup, not blanket consent. A proactive check always
|
|
169
|
+
requires acceptance of its exact wording. Never send raw conversations,
|
|
170
|
+
Typeform response rows, contacts, identifiers, secrets, or diagnostic claims to
|
|
171
|
+
SomaCheck. Raw phone motion never goes to the agent or Typeform.
|
|
172
|
+
|
|
173
|
+
If Typeform authorization fails, ask the researcher to repair the connection;
|
|
174
|
+
never request that they paste a token. If the requested scope would require
|
|
175
|
+
respondent-level data, stop or switch to a separate Typeform analysis task
|
|
176
|
+
without SomaCheck. If SomaCheck reports an unreadable capture, request a retry
|
|
177
|
+
only if the researcher wants one; unreadable is not a third interpretation. If
|
|
178
|
+
the request expires, is cancelled, or errors, continue without a reading. Never
|
|
179
|
+
infer a result. If the result and the researcher's words differ, follow the
|
|
180
|
+
researcher's words and preserve the difference rather than reconciling it into
|
|
181
|
+
a score.
|
|
182
|
+
|
|
183
|
+
## Verification checklist
|
|
184
|
+
|
|
185
|
+
- [ ] The `typeform` and `vibecheck` servers expose their expected tools; no
|
|
186
|
+
credential appears in chat or logs.
|
|
187
|
+
- [ ] The agent names one researcher-authored Typeform form, draft, or
|
|
188
|
+
aggregate analytics scope.
|
|
189
|
+
- [ ] No respondent row, contact, identifier, free-text answer, PII, PHI, or
|
|
190
|
+
hidden variable is retrieved or pasted into the SomaCheck flow.
|
|
191
|
+
- [ ] The proposition is first-person and contains no Typeform or respondent
|
|
192
|
+
content.
|
|
193
|
+
- [ ] A proactive ask waits for acceptance; an explicit user request does not
|
|
194
|
+
add a redundant consent prompt.
|
|
195
|
+
- [ ] One decision creates at most one `request_vibecheck` request and preserves
|
|
196
|
+
its stable pending handle.
|
|
197
|
+
- [ ] The response distinguishes observation, interpretation, confirmation, and
|
|
198
|
+
choice.
|
|
199
|
+
- [ ] No reading, confidence, confirmation, or respondent inference is written
|
|
200
|
+
to Typeform.
|
|
201
|
+
- [ ] Typeform writes are separately confirmed and signal-free.
|
|
202
|
+
- [ ] Participant-facing behavior remains blocked by the `respondent_private`,
|
|
203
|
+
methodology/ethics, and Mike-approval gates.
|
|
204
|
+
|
|
205
|
+
## Sources
|
|
206
|
+
|
|
207
|
+
- [Typeform MCP server](https://www.typeform.com/developers/mcp/)
|
|
208
|
+
- [Typeform MCP supported tools](https://www.typeform.com/developers/mcp/tools/)
|
|
209
|
+
- [Typeform MCP core concepts](https://developer.typeform.com/developers/mcp/core-concepts/)
|
|
210
|
+
- [SomaCheck MCP setup and tool behavior](../README.md)
|
|
211
|
+
- [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
|