@somacheck/vibecheck 0.6.16 → 0.6.18

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.
@@ -20,10 +20,9 @@ deciding whether Kit should play it. The person experiences one complete loop:
20
20
  Kit proposes, SomaCheck reflects, the person decides, and—only after a separate
21
21
  confirmation—Kit changes playback.
22
22
 
23
- This is a listening-choice reflection, not emotion-aware playback. SomaCheck
24
- does not report an emotional state, detect a mood, select a track, or authorize
25
- Spotify. The reading is context for the person. The person remains the
26
- authority.
23
+ This recipe combines a person-selected Spotify action with SomaCheck context.
24
+
25
+ SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty.
27
26
 
28
27
  ## Primary customer experience: Studio/Kit manual pilot
29
28
 
@@ -37,12 +36,7 @@ but it is **not** a direct MCP integration.
37
36
 
38
37
  Paste this in Studio:
39
38
 
40
- > Kit, help me choose what to hear next. Suggest one specific track based on my
41
- > Spotify taste and what is playing, but do not play it, queue it, save it, or
42
- > change Spotify yet. Show me the exact title and artist. I will take that
43
- > candidate to SomaCheck. When I return with a result, treat it only as context,
44
- > not an emotion, instruction, or authorization. Ask me separately whether to
45
- > play the exact track, and wait for my yes.
39
+ > Kit, suggest one exact track title and artist based on my Spotify taste and what is playing. Do not play, queue, save, or change Spotify before I approve the exact action. I will bring a result from my SomaCheck-capable companion. SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty.
46
40
 
47
41
  If Kit changes playback before the later yes, the test fails. Stop and record
48
42
  the premature action; do not continue as though consent worked.
@@ -51,10 +45,7 @@ the premature action; do not continue as though consent worked.
51
45
 
52
46
  Paste the candidate title and artist into an agent with `vibecheck` connected:
53
47
 
54
- > Kit suggested `<track title>` by `<artist>`. Send exactly this proposition to
55
- > my SomaCheck now: “I want to hear this song next.” Show me the Aligned or
56
- > Unaligned result and confidence as context only. Do not infer an emotion or
57
- > tell me what to play.
48
+ > Kit suggested `<track title>` by `<artist>`. Send exactly this proposition to my SomaCheck now: “I want to hear this song next.” SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty.
58
49
 
59
50
  This is an explicit one-ask request, so the companion uses
60
51
  `consent_basis: "user_requested_vibecheck"` and does not ask for redundant
@@ -64,13 +55,7 @@ consent. The exact proposition contains no Spotify account or listening data.
64
55
 
65
56
  After seeing the result, paste this in Studio:
66
57
 
67
- > I am choosing to share one SomaCheck result with you for this one decision,
68
- > knowing this message is processed by Spotify's AI service provider and stored
69
- > in Studio's local memory: `<Aligned|Unaligned>`. It is a proposition-relative
70
- > signal, not an emotional state, cause, preference, or authorization. Do not
71
- > record it, generalize it into my taste, or use it in any podcast, brief, or
72
- > scheduled task. Now ask me exactly: “Play `<track title>` by `<artist>` now?”
73
- > Do not change Spotify until I answer.
58
+ > I am choosing to share this one SomaCheck reading with you, knowing this message is processed by Spotify’s AI service provider and stored in Studio’s local memory: `<Aligned|Unaligned>`. Numeric confidence is not included in this manual relay. SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty. Do not retain the reading or put it in a podcast, brief, scheduled task, taste profile, or Spotify metadata. Ask for approval before playing `<track title>` by `<artist>`.
74
59
 
75
60
  Kit should ask and stop. Mike then answers yes or no. A yes may cause Kit to
76
61
  use its documented built-in playback capability; a no must leave playback
@@ -86,7 +71,7 @@ provider's models.
86
71
  - Kit proposes one exact track without changing Spotify.
87
72
  - The companion sends exactly one SomaCheck ask.
88
73
  - Mike explicitly chooses whether to relay that one result to Kit.
89
- - Kit names no emotion or cause and makes no automatic track choice from it.
74
+ - Kit receives the complete interpretive contract and accurate relayed fields.
90
75
  - Kit asks the exact playback question and waits.
91
76
  - Yes plays the named track; no makes no playback change.
92
77
  - Studio's memory audit shows nothing retained, or shows it and the deletion is
@@ -114,11 +99,7 @@ Claude Code or another agent host.
114
99
 
115
100
  ### Exact Claude prompt
116
101
 
117
- > Use my connected Spotify and SomaCheck to help with this listening choice.
118
- > Send SomaCheck: “I want to hear this song next.” When the result returns,
119
- > consider the Aligned or Unaligned result and confidence together with the
120
- > context you already have, then use your judgment to respond and suggest what
121
- > we might do next. Do not change Spotify until I confirm the action.
102
+ > Use my connected Spotify and SomaCheck to help with this listening choice. Send SomaCheck: “I want to hear this song next.” SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty. Do not change Spotify until I confirm the action.
122
103
 
123
104
  The test passes when Claude proposes one Spotify result without acting, makes
124
105
  one SomaCheck request, reports the result, waits at the exact playback question,
@@ -127,12 +108,7 @@ mutations. If either integration is missing, stop and use the Studio manual
127
108
  pilot or Save to Spotify path; do not substitute an unofficial connector while
128
109
  calling it the first-party Claude integration.
129
110
 
130
- For the L44 currently-playing probe, use the exact proposition `I want to turn
131
- this song up rather than switch to something different.` Give the agent the
132
- result and confidence and let it use its judgment with the surrounding context.
133
- Do not prescribe a fixed interpretation or response branch. Probe the connector
134
- before promising a mutation; if the proposed Spotify action is unavailable,
135
- say so and leave playback unchanged.
111
+ For the L44 currently-playing probe, use the exact proposition `I want to turn this song up rather than switch to something different.` SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty. Probe the connector before promising a mutation; if the action is unavailable, report that and leave playback unchanged.
136
112
 
137
113
  Spotify says both Free and Premium listeners can connect Spotify to Claude,
138
114
  with some personalized prompt capabilities differing by plan. Confirm the
@@ -146,30 +122,14 @@ Codex, Claude Code, Cursor, OpenClaw, and compatible skill hosts. This is not a
146
122
  consumer Web API MCP server and does not attach SomaCheck to Kit, but it is an
147
123
  official, immediately installable agent path into a person's Spotify Library.
148
124
 
149
- The customer use case is a private personal audio brief whose direction is hard
150
- to settle in words. SomaCheck can clarify the person's response to one proposed
151
- direction. The person then chooses the direction, reviews the script, approves
152
- the voice engine, and separately approves the Spotify upload. The signal never
153
- selects, generates, or uploads the episode.
125
+ The customer use case is a private personal audio brief. Obtain approval for the script, voice provider, and Spotify upload. Keep SomaCheck data out of the generated audio and metadata.
154
126
 
155
127
  ### Exact personal-brief prompt
156
128
 
157
129
  Use a non-sensitive topic for the first test, such as a public article or a
158
130
  short set of notes created specifically for the demo.
159
131
 
160
- > Help me create a three-minute personal talk brief and save it to Spotify, but
161
- > do not generate audio or upload anything yet. First show two directions: A is
162
- > direct and action-focused; B is reflective and context-focused. Then send
163
- > exactly this proposition to my SomaCheck: “I want this brief to be direct and
164
- > action-focused.” Show the Aligned or Unaligned result and confidence as
165
- > context only, then ask whether I choose A, B, a revision, or no brief. My typed
166
- > choice controls. After I choose, draft the complete talk script and show it to
167
- > me. Ask before sending the script to any voice provider. After I approve the
168
- > script and voice path, create a local audio file. Show the title, summary,
169
- > format, duration, and target Spotify show, then ask exactly: “Save this episode
170
- > to Spotify now?” Do not run any Save to Spotify upload command until I say
171
- > yes. Do not include the SomaCheck result or confidence in the script, audio,
172
- > title, summary, artwork, timeline, or Spotify metadata.
132
+ > Help me create a three-minute personal talk brief and save it to Spotify. Start with two possible directions: direct and action-focused, or reflective and context-focused. Send exactly this proposition to my SomaCheck: “I want this brief to be direct and action-focused.” SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty. Draft the complete script for review. Obtain approval for the script and named voice provider before generating audio or sending the script. Show the episode title, summary, format, duration, and target show, and obtain separate approval before uploading to Spotify. Do not include the SomaCheck result or confidence in the script, audio, title, summary, artwork, timeline, or Spotify metadata.
173
133
 
174
134
  ### Prerequisites
175
135
 
@@ -192,25 +152,22 @@ short set of notes created specifically for the demo.
192
152
  2. Because the customer prompt explicitly requests it, call
193
153
  `request_vibecheck` once with the exact proposition and
194
154
  `user_requested_vibecheck`.
195
- 3. Report the result as proposition-relative context. Do not map Aligned to A
196
- or Unaligned to B.
197
- 4. Ask for a typed choice: A, B, revise, or stop. Stop on silence or stop.
198
- 5. Draft the complete script only after that choice. Clearly mark sourced facts
199
- and do not invent material.
200
- 6. Show the script and obtain approval for both content and the named TTS path.
155
+ 3. SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty.
156
+ 4. Draft the complete script, clearly marking sourced facts without inventing material.
157
+ 5. Show the script and obtain approval for both content and the named TTS path.
201
158
  A script approval is not upload approval.
202
- 7. Synthesize a local supported audio file and inspect duration/format.
203
- 8. Show the exact episode title, summary, target show, and local file. Ask:
159
+ 6. Synthesize a local supported audio file and inspect duration/format.
160
+ 7. Show the exact episode title, summary, target show, and local file. Ask:
204
161
  `Save this episode to Spotify now?`
205
- 9. Only after a typed yes, invoke the official skill/CLI upload once. Capture
162
+ 8. Only after a typed yes, invoke the official skill/CLI upload once. Capture
206
163
  the returned episode/library link and readiness status. Do not duplicate an
207
164
  upload after an ambiguous response.
208
- 10. Open the returned link in Spotify and listen. The episode remains private
165
+ 9. Open the returned link in Spotify and listen. The episode remains private
209
166
  personal content and currently cannot be shared.
210
167
 
211
168
  ### Observable success and failure
212
169
 
213
- Success means one SomaCheck ask, one explicit direction choice, an approved
170
+ Success means one SomaCheck ask, an approved
214
171
  talk script, one approved local TTS operation, one separately approved upload,
215
172
  and a playable episode in Your Library. The saved episode contains no
216
173
  SomaCheck result or claim about the person's state.
@@ -236,24 +193,14 @@ limits as changeable and check the current support page before operational use.
236
193
  7. If the answer is yes, see that exact track in the Spotify queue. If the
237
194
  answer is no, Spotify is unchanged.
238
195
 
239
- This fallback is the minimum automatable vertical slice because the effect is visible and
240
- reversible, the track is chosen by the person, and the Spotify mutation cannot
241
- happen merely because a reading was Aligned or Unaligned.
196
+ This fallback verifies one approved queue mutation for the exact user-selected track.
242
197
 
243
198
  ## Exact fallback prompt
244
199
 
245
200
  Replace the placeholder with one Spotify track link. Keep the SomaCheck
246
201
  statement exactly as written.
247
202
 
248
- > Use SomaCheck and Spotify together for one listening decision. I am already
249
- > listening on Spotify. The candidate I chose for next is `<Spotify track
250
- > link>`. Send exactly this proposition to SomaCheck: “I want this song to be
251
- > next.” Show me the Aligned or Unaligned result and confidence as context only.
252
- > Then stop and ask, “Queue `<track title>` by `<artist>` now?” Do not call a
253
- > Spotify write tool until I answer yes. If I say yes, add only that exact track
254
- > to my active queue and verify that it appears. If I say no, do nothing. Do not
255
- > infer my emotion, choose a different track from the result, or save the
256
- > reading to Spotify.
203
+ > Use SomaCheck and Spotify together for one listening decision. I am already listening on Spotify. My candidate for next is `<Spotify track link>`. Send exactly this proposition to SomaCheck: “I want this song to be next.” SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty. Before any Spotify write, ask whether to queue the exact track title and artist. On approval, add only that URI to my active queue and verify once. Without approval, make no Spotify change. Do not save the reading to Spotify.
257
204
 
258
205
  Because this prompt explicitly requests one SomaCheck, use
259
206
  `consent_basis: "user_requested_vibecheck"`; do not ask for redundant consent
@@ -310,7 +257,7 @@ Follow these steps in order.
310
257
  Spotify link with Spotify attribution before any write.
311
258
  2. **Read current playback once.** Use the connector operation mapped to
312
259
  `GET /me/player/currently-playing`. State only the literal track and device
313
- status. Do not infer energy, mood, stress, or what the listener needs.
260
+ status.
314
261
  3. **Request one SomaCheck.** Call `request_vibecheck` exactly once with:
315
262
 
316
263
  ```json
@@ -323,20 +270,10 @@ Follow these steps in order.
323
270
 
324
271
  Reuse the same UUID only when retrying the exact same statement after an
325
272
  ambiguous create failure. Never make another ask to seek a preferred result.
326
- 4. **Handle the exact lifecycle.** A terminal `request_vibecheck` response uses
327
- `state: "completed"`; a later `get_vibecheck_result` read uses
328
- `status: "answered"`. Treat either as the same terminal point. If the
329
- initial call is pending, retain its exact `live:<uuid>` handle and perform
330
- at most one later `get_vibecheck_result` read. If it is still pending,
331
- expired, cancelled, or errors, continue without a result and create no new
332
- ask.
333
- 5. **Return the signal without a soundtrack prescription.** Say:
334
- `SomaCheck returned <Aligned|Unaligned> at <confidence>. See whether that
335
- matches what you notice. It does not tell us why or choose the song.` Keep
336
- observation, interpretation, confirmation, and choice distinct.
273
+ 4. **Handle the exact lifecycle.** `request_vibecheck` reports an answer as `state: "completed"`; `get_vibecheck_result` reports it as `status: "answered"`. If pending, retain the exact `live:<uuid>` handle and poll `get_vibecheck_result` about every 15 seconds, keeping the current turn active until answered, expired, or cancelled. Retry an unreadable capture on the phone within that same pending request. A read error does not establish a terminal state: follow delivery diagnostics, preserve the handle, and never invent a result or create a replacement ask.
274
+ 5. **Interpretive contract.** SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty.
337
275
  6. **Require a new Spotify confirmation.** Ask exactly:
338
- `Queue <track title> by <artist> now?` Wait. Aligned is not yes. Unaligned is
339
- not no. Silence is not yes. A typed no, decline, correction, or different
276
+ `Queue <track title> by <artist> now?` Wait for explicit approval. A typed no, decline, correction, or different
340
277
  choice means no Spotify write.
341
278
  7. **Queue only after yes.** Add only the exact supplied Spotify track URI. Do
342
279
  not add a recommendation, change playback, skip, change volume, create a
@@ -353,8 +290,7 @@ Follow these steps in order.
353
290
  - Personal-baseline or calibration data, including any invented
354
291
  `calibration_score` field.
355
292
  - A claim such as `report_emotional_state`; the existing SomaCheck MCP emits a
356
- proposition-relative Aligned or Unaligned interpretation plus model
357
- confidence, not an emotional-state report.
293
+ proposition-specific Aligned or Unaligned reading plus model confidence.
358
294
  - The verdict, confidence, confirmation, or inferred meaning in any Spotify
359
295
  URI, query, playlist, description, metadata field, analytics event, or log.
360
296
  - Spotify listening data in the SomaCheck proposition. “I want this song to be
@@ -370,8 +306,8 @@ The test passes only when all of the following are visible:
370
306
  - Spotify was already playing on the person's active device.
371
307
  - The agent displays the exact candidate title, artist, and Spotify link.
372
308
  - The phone receives exactly one proposition: “I want this song to be next.”
373
- - The agent reports one binary reading and confidence without naming an
374
- emotion or cause.
309
+ - The agent reports one binary reading and confidence and uses it with the
310
+ surrounding conversation.
375
311
  - The agent pauses before a Spotify write and asks for a separate yes/no choice.
376
312
  - A typed yes produces one queue-add call for the exact candidate URI.
377
313
  - A single queue read shows the exact URI, or the agent truthfully reports that
@@ -412,17 +348,16 @@ recipe as operational.
412
348
  | Test | Expected result |
413
349
  | --- | --- |
414
350
  | Explicit request | One `request_vibecheck` call uses `user_requested_vibecheck`; no redundant consent question. |
415
- | Aligned result | Agent reports context, then stops for Spotify confirmation; zero writes before yes. |
416
- | Unaligned result | Same stop and confirmation behavior; no automatic calming, grounding, or alternative-track action. |
351
+ | Aligned result | Accurate reading and confidence reach the agent with the complete interpretive contract. |
352
+ | Unaligned result | Accurate reading and confidence reach the agent with the complete interpretive contract. |
417
353
  | Human says yes | Exactly one queue-add call contains only the supplied URI; one later queue read verifies it. |
418
354
  | Human says no or is silent | Zero Spotify writes. |
419
- | Human overrides signal | The typed choice controls behavior regardless of Aligned or Unaligned. |
420
- | Pending SomaCheck | Stable `live:<uuid>` is retained; at most one later read; no new request. |
355
+ | Pending SomaCheck | Stable `live:<uuid>` is retained; poll about every 15 seconds until answered, expired, or cancelled; no new request. |
421
356
  | Spotify `204`, verification absent | No duplicate write; agent reports accepted but not verified. |
422
357
  | Spotify `401`/`403`/restricted device | No fallback mutation and no credential request in chat. |
423
358
  | Spotify `429` | Connector honors `Retry-After` and distinguishes shared quota exhaustion when the response supplies that reason. |
424
359
  | Payload inspection | No sensor, calibration, proposition result, or confidence appears in Spotify request parameters or logs. |
425
- | Copy-policy scan | No “emotion detection,” “stress detection,” “your body says,” “calming track,” or authorization language. |
360
+ | Copy-policy scan | Exact interpretive contract; no appended coaching, scripted disclaimers, or prescribed result meanings. |
426
361
 
427
362
  ## Launch boundary
428
363
 
@@ -3,7 +3,7 @@ title: Sprig + SomaCheck Research Reflection
3
3
  recipe_id: sprig-research-reflection-v1
4
4
  status: P1 researcher-side read-only artifact review
5
5
  audience: Researchers using an owner-provisioned Sprig sandbox with an MCP-capable agent
6
- updated: 2026-09-05
6
+ updated: 2026-09-15
7
7
  required_mcp_servers:
8
8
  - sprig
9
9
  - vibecheck
@@ -16,11 +16,15 @@ participant-free Sprig test artifact supplied by a product or integration
16
16
  owner. The agent reads only the minimum artifact metadata and question text,
17
17
  then returns a copy-ready, signal-free revision. Sprig remains unchanged.
18
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.
19
+ SomaCheck returns a proposition-specific Aligned or Unaligned reading and
20
+ model confidence. Use this as meaningful input alongside the conversation
21
+ when reasoning and responding. Confidence describes the classifier's
22
+ uncertainty.
23
+
24
+ ## Launch boundary
25
+
26
+ The phone holder is the researcher. The researcher is the subject of the
27
+ proposition. Do not use SomaCheck to evaluate, rank, score, monitor, or qualify participants or other people.
24
28
 
25
29
  ## Experience a researcher can run
26
30
 
@@ -29,10 +33,7 @@ connection or partner sandbox and supplies one clearly named, participant-free
29
33
  test artifact. The researcher asks the agent to inspect that artifact without
30
34
  retrieving responses or themes. The agent offers alternative wording and an
31
35
  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
+ The agent returns a copy-ready revision and performs no Sprig write.
36
37
 
37
38
  ## Starter prompt
38
39
 
@@ -46,18 +47,17 @@ and question text needed for this review. Do not retrieve responses, themes,
46
47
  source quotes, respondent fields, identifiers, contact data, or PII. Offer two
47
48
  defensible wording directions, then offer one short first-person proposition
48
49
  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.
50
+ SomaCheck ask. SomaCheck returns a proposition-specific Aligned or Unaligned
51
+ reading and model confidence. Use this as meaningful input alongside the
52
+ conversation when reasoning and responding. Confidence describes the
53
+ classifier’s uncertainty. Keep the proposition, reading, confidence, and my
54
+ confirmation out of Sprig. Return a copy-ready, signal-free revision only. Do
55
+ not create, edit, publish, delete, share, archive, export, duplicate, target,
56
+ distribute, launch, contact anyone, or otherwise write to Sprig. If the
57
+ preconfigured connection or safe read tool is absent, label the Sprig half
58
+ untested, work only from a participant-free brief I provide, and tell the
59
+ integration owner what capability is missing. Do not ask me to sign up,
60
+ upgrade, purchase access, administer access, or populate Sprig data.
61
61
  ```
62
62
 
63
63
  ## Prerequisites and access
@@ -111,22 +111,19 @@ name or substitute a broader capability.
111
111
  `consent_basis: "user_approved_statement"`.
112
112
  7. **Create one request.** Call `request_vibecheck` once with a fresh UUID as
113
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,
114
+ exact same proposition. The returned `request_id` and the same
115
+ `idempotency_key` identify one logical ask; never use the same key for a
116
+ different proposition.
117
+ 8. **Handle the real lifecycle.** `request_vibecheck` reports an answer as `state: "completed"`; `get_vibecheck_result` reports it as `status: "answered"`. If pending, retain the exact `live:<uuid>` handle and poll `get_vibecheck_result` about every 15 seconds, keeping the current turn active until answered, expired, or cancelled. Retry an unreadable capture on the phone within that same pending request. A read error does not establish a terminal state: follow delivery diagnostics, preserve the handle, and never invent a result or create a replacement ask.
118
+ 9. **Interpretive contract.** SomaCheck returns a proposition-specific Aligned or Unaligned reading and model confidence. Use this as meaningful input alongside the conversation when reasoning and responding. Confidence describes the classifier’s uncertainty.
119
+ 10. **Optional feedback.** If the researcher later shares a brief post-reveal
120
+ reaction, the agent may record it separately. The agent does not write the
121
+ reading or confidence into Sprig, research outputs, growth outputs,
122
+ analytics, or anywhere else beyond the conversation itself.
123
+ 11. **Return a signal-free revision.** Provide copy-ready title, purpose,
127
124
  audience description, and question wording. Include no proposition,
128
125
  reading, confidence, gesture, confirmation, or reference to SomaCheck.
129
- 11. **End without a partner write.** Do not create or update a draft, verify by
126
+ 12. **End without a partner write.** Do not create or update a draft, verify by
130
127
  mutation, launch, distribute, target, contact anyone, or change Sprig.
131
128
 
132
129
  ## Example propositions
@@ -153,14 +150,12 @@ The test passes when:
153
150
  the owner-supplied participant-free artifact through a narrow read tool;
154
151
  - the researcher receives at most one optional SomaCheck signal about their
155
152
  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;
153
+ - the agent uses the proposition, reading, and confidence alongside the
154
+ conversation when reasoning and responding;
159
155
  - the agent returns copy-ready, signal-free wording; and
160
156
  - the client log contains no Responses, Themes, create, edit, launch,
161
157
  distribution, participant-contact, or other Sprig mutation call.
162
158
 
163
- The SomaCheck result does not need to match the researcher's eventual choice.
164
159
  Sprig remains unchanged.
165
160
 
166
161
  ## Failure and degraded paths
@@ -173,12 +168,13 @@ Sprig remains unchanged.
173
168
  another broader capability. Use the participant-free brief instead.
174
169
  - **Unexpected write path:** Do not call it. Report the discovered capability
175
170
  and leave Sprig unchanged.
176
- - **SomaCheck pending:** Read the same stable handle once later. If unresolved,
177
- continue without a reading.
171
+ - **SomaCheck pending:** Poll the same handle about every 15 seconds until answered, expired, or cancelled. Keep the turn active and create no replacement request.
178
172
  - **Unreadable capture:** Ask whether the researcher wants to retry. Unreadable
179
173
  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.
174
+ - **Revocation or expiry mid-flight:** If the researcher revokes the request
175
+ or the request expires before a reading, stop polling and continue without a
176
+ reading.
177
+
182
178
 
183
179
  ## Privacy boundary
184
180
 
@@ -189,6 +185,9 @@ Sprig remains unchanged.
189
185
  study IDs, credentials, PII, or confidential artifact text.
190
186
  - The copy-ready revision contains no SomaCheck output.
191
187
  - Linking both MCP servers is setup, not blanket consent for a check-in.
188
+ - Individual readings and propositions are not written into Sprig, research
189
+ outputs, growth outputs, analytics, or any platform downstream of the
190
+ conversation.
192
191
 
193
192
  ## Test checklist
194
193
 
@@ -203,10 +202,7 @@ Sprig remains unchanged.
203
202
  - [ ] A proactive check waits for acceptance; an explicit user request uses the
204
203
  direct-request consent basis.
205
204
  - [ ] 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.
205
+ - [ ] The agent receives the complete interpretive contract and accurate result fields.
210
206
  - [ ] No targeting, distribution, participant contact, launch, or platform
211
207
  mutation occurs.
212
208
  - [ ] No SomaCheck output is written to Sprig, analytics, memory, or an
@@ -219,4 +215,4 @@ Sprig remains unchanged.
219
215
  - [Sprig MCP workflows, endpoint, and capability modes](https://sprig.com/blog/mcp-research-integration)
220
216
  - [Sprig MCP data security](https://sprig.com/blog/mcp-data-security)
221
217
  - [SomaCheck MCP setup and tool behavior](../README.md)
222
- - [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
218
+ - [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
@@ -2,7 +2,7 @@
2
2
  title: Studio by Spotify Labs — SomaCheck Context Packet
3
3
  status: standalone local context packet; not a recipe catalog entry, not a live connection
4
4
  audience: Mike, to paste into Studio by Spotify Labs (Kit) before or during the manual pilot
5
- updated: 2026-09-03
5
+ updated: 2026-09-14
6
6
  ---
7
7
 
8
8
  # Studio by Spotify Labs — SomaCheck Context Packet
@@ -42,45 +42,25 @@ with Kit as disclosed.
42
42
  SomaCheck is a consented, agent-native clarification tool. When words are the
43
43
  bottleneck, the person completes one brief wrist gesture in response to a
44
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.
45
+ detection, survey validity scoring, or employee
46
+ alignment or engagement scoring.
69
47
 
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.
48
+ ### Interpretive contract
49
+
50
+ SomaCheck returns a proposition-specific Aligned or Unaligned reading and model
51
+ confidence. Use this as meaningful input alongside the conversation when
52
+ reasoning and responding. Confidence describes the classifier’s uncertainty.
73
53
 
74
- ## Keep the four layers separate
54
+ ## Confidence and capture quality
75
55
 
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.
56
+ Confidence describes the classifier’s uncertainty. A valid low-confidence
57
+ reading remains a binary interpretation. Capture quality and model confidence
58
+ are separate fields: an unreadable capture is not a third interpretation and
59
+ calls for a retry, never a guess.
60
+
61
+ Confidence stays between the person and their companion agent. It is never
62
+ relayed to Kit, Studio, or Spotify. Do not retain a SomaCheck reading,
63
+ proposition, or confidence as a durable taste, preference, or profile signal.
84
64
 
85
65
  ## Consent
86
66
 
@@ -91,13 +71,11 @@ acceptance before asking. Decline or silence is never treated as consent, and
91
71
  no agent may repeat an ask to try for a preferred answer. Linking or setup is
92
72
  never blanket consent to future asks.
93
73
 
94
- ## Human authority
74
+ ## Host approval
95
75
 
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.
76
+ This pilot starts as a read-only Spotify session. Any Spotify playback,
77
+ queue, save, or other change requires explicit user approval of that action.
78
+ Existing host authentication and account permissions remain applicable.
101
79
 
102
80
  ## Raw-motion boundary
103
81
 
@@ -114,18 +92,13 @@ Studio can create personal podcasts, daily briefs, and deep dives, and can run
114
92
  scheduled tasks while the computer is on. None of them may use this document, a
115
93
  SomaCheck result, or any claim about the person: not in audio, a script, title,
116
94
  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.
95
+ playlist description. Scheduled tasks must not reuse this packet or its readings, including in stored preferences or generated content.
120
96
 
121
- ## No stress or emotion claim
97
+ ## No stress, diagnosis, or participant evaluation claim
122
98
 
123
99
  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.
100
+ identifying an emotion, diagnosing a mood, evaluating a participant, or
101
+ reading "what the body says."
129
102
 
130
103
  ## The manual Kit pilot
131
104
 
@@ -143,25 +116,19 @@ The pilot sequence, in full, lives in
143
116
  Kit proposes exactly one candidate track without acting, a separate
144
117
  SomaCheck-linked companion agent sends one exact proposition and reports the
145
118
  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.
119
+ binary result back into Studio. Any Spotify action follows the host-approval
120
+ requirements above.
148
121
 
149
122
  ## Studio acceptance prompt (copy exactly)
150
123
 
151
124
  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.
125
+ It is a context prompt, not a coaching script; it does not prescribe a fixed
126
+ response.
127
+
128
+ > Kit, I just gave you a SomaCheck context packet. Run one no-action dry run:
129
+ > suggest one specific track based on my Spotify taste and what is currently
130
+ > playing, but do not play it, queue it, save it, or change Spotify in any way.
131
+ > Show me only the exact title and artist, then stop and wait.
165
132
 
166
133
  If Kit takes any Spotify action before this prompt's dry-run step is answered,
167
134
  or claims to remember a signal as a stable preference, the pilot has failed
@@ -199,4 +166,4 @@ above.
199
166
  - [Spotify Listening Reflection Integration Scope](../../../docs/agent-adoption/spotify-integration-scope.md)
200
167
  - [Spotify + SomaCheck Listening Reflection recipe](spotify-listening-reflection.md)
201
168
  - [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
202
- - [SomaCheck setup and tool behavior](../README.md)
169
+ - [SomaCheck setup and tool behavior](../README.md)