@somacheck/vibecheck 0.6.10 → 0.6.12
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 +108 -17
- 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/claude-hook.js +4 -0
- package/dist/cli.js +42 -10
- package/dist/client-setup.js +8 -2
- package/dist/constants.js +2 -1
- package/dist/readiness.js +2 -2
- package/dist/recipes.js +191 -0
- package/dist/runtime-mode.js +14 -0
- package/dist/server.js +44 -21
- 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,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: QuestionPro + SomaCheck Research Reflection
|
|
3
|
+
recipe_id: questionpro-research-reflection-v1
|
|
4
|
+
status: P1 researcher-private partner-sandbox template
|
|
5
|
+
audience: Researchers evaluating a QuestionPro partnership workflow
|
|
6
|
+
updated: 2026-09-05
|
|
7
|
+
required_mcp_servers:
|
|
8
|
+
- questionpro-surveybuilder
|
|
9
|
+
- vibecheck
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# QuestionPro + SomaCheck Research Reflection
|
|
13
|
+
|
|
14
|
+
This recipe helps a researcher privately compare two questionnaire framings and
|
|
15
|
+
produce a copy-ready, non-distributed survey definition. It is not a request for
|
|
16
|
+
the researcher to become a QuestionPro customer or populate a personal account.
|
|
17
|
+
The QuestionPro half is inspected only when a product or integration owner has
|
|
18
|
+
provided a partner-approved sandbox with no participant data.
|
|
19
|
+
|
|
20
|
+
The researcher holds the phone and is the subject of the proposition. SomaCheck
|
|
21
|
+
returns Aligned or Unaligned plus confidence to the agent as context. The agent
|
|
22
|
+
uses its judgment; the reading is not truth, diagnosis, authorization, evidence
|
|
23
|
+
about a respondent, or a research decision. The researcher remains the authority.
|
|
24
|
+
|
|
25
|
+
## Experience a partner team can evaluate
|
|
26
|
+
|
|
27
|
+
The researcher supplies a participant-free survey goal. The agent drafts two
|
|
28
|
+
four-question versions and may offer one SomaCheck check-in on the researcher's
|
|
29
|
+
own preferred direction. The researcher then chooses in words. The output is a
|
|
30
|
+
signal-free survey definition for a QuestionPro owner to review. This recipe
|
|
31
|
+
does not create, publish, distribute, or populate a survey.
|
|
32
|
+
|
|
33
|
+
## Starter prompt
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
Use QuestionPro and SomaCheck to help me prepare a four-question, participant-free
|
|
37
|
+
test-survey plan without changing QuestionPro. I am the researcher and I am
|
|
38
|
+
holding the phone. The survey goal is [GOAL]. Work only from what I provide. If a
|
|
39
|
+
product or integration owner has supplied a preconfigured official QuestionPro
|
|
40
|
+
partner sandbox, you may inspect the focused Survey Builder capability names and
|
|
41
|
+
schemas, but do not call a platform data or action tool. Do not ask me to sign up,
|
|
42
|
+
upgrade, buy a plan, administer access, or populate QuestionPro data. Propose two
|
|
43
|
+
questionnaire framings and show the exact questions. Then offer one short
|
|
44
|
+
first-person proposition about my own preferred direction and wait for my
|
|
45
|
+
acceptance before any proactive SomaCheck ask. Give the result and confidence to
|
|
46
|
+
the agent as context and let it use its judgment. Ask what I choose in words.
|
|
47
|
+
Keep the proposition, reading, confidence, and confirmation out of QuestionPro.
|
|
48
|
+
Return a copy-ready, signal-free survey definition only. Do not create, edit,
|
|
49
|
+
send, distribute, publish, recruit, launch, access responses, or spend anything.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Prerequisites and partner access
|
|
53
|
+
|
|
54
|
+
1. The researcher supplies a participant-free goal and holds the linked
|
|
55
|
+
SomaCheck phone.
|
|
56
|
+
2. QuestionPro or the integration owner supplies a partner-approved sandbox or
|
|
57
|
+
schema fixture. The recipe never asks the researcher to open or fund an
|
|
58
|
+
ordinary customer account.
|
|
59
|
+
3. If live discovery is authorized, use only the focused endpoint
|
|
60
|
+
`https://mcp.questionpro.com/surveybuilder`, not the root, `/all`, or `/full`
|
|
61
|
+
surface.
|
|
62
|
+
4. Inspect capability names and schemas only. Do not call create, read, send,
|
|
63
|
+
audience, response, poll, community, employee, or other platform tools.
|
|
64
|
+
5. If no partner sandbox or safe schema fixture exists, label the QuestionPro
|
|
65
|
+
half untested and still return the copy-ready plan.
|
|
66
|
+
|
|
67
|
+
## Exact workflow
|
|
68
|
+
|
|
69
|
+
1. Confirm that the researcher is the phone holder and proposition subject.
|
|
70
|
+
2. Draft two four-question variants using only the supplied brief.
|
|
71
|
+
3. Offer one concise first-person proposition about the researcher's direction.
|
|
72
|
+
4. If the researcher explicitly asks for a vibecheck, use
|
|
73
|
+
`consent_basis: "user_requested_vibecheck"`. Otherwise wait for acceptance
|
|
74
|
+
and use `consent_basis: "user_approved_statement"`.
|
|
75
|
+
5. Use one fresh UUID idempotency key and retain the same request handle while
|
|
76
|
+
pending. Never create a second request to replace an unresolved one.
|
|
77
|
+
6. Give the proposition, Aligned or Unaligned result, and confidence to the
|
|
78
|
+
agent. Let the agent use its judgment in context without treating the result
|
|
79
|
+
as authorization or a claim about respondents.
|
|
80
|
+
7. Ask what the researcher chooses in words. Their choice controls the plan.
|
|
81
|
+
8. Return a copy-ready payload with title, purpose, questions, answer choices,
|
|
82
|
+
and optional logic. Exclude all SomaCheck data and platform identifiers.
|
|
83
|
+
9. Stop before any QuestionPro data or action call. A partner owner may review
|
|
84
|
+
the payload separately in its own governed workflow.
|
|
85
|
+
|
|
86
|
+
## Proposition examples
|
|
87
|
+
|
|
88
|
+
Allowed:
|
|
89
|
+
|
|
90
|
+
- “I want this survey to focus on first-use clarity.”
|
|
91
|
+
- “This question asks what I am trying to learn.”
|
|
92
|
+
- “I want to separate usability from perceived value.”
|
|
93
|
+
|
|
94
|
+
Not allowed:
|
|
95
|
+
|
|
96
|
+
- “Respondents will understand this survey.”
|
|
97
|
+
- “This employee's response proves commitment.”
|
|
98
|
+
- “These answers will be truthful.”
|
|
99
|
+
- “This survey will produce valid data.”
|
|
100
|
+
|
|
101
|
+
## Visible success condition
|
|
102
|
+
|
|
103
|
+
The recipe passes when the researcher receives at most one optional check-in,
|
|
104
|
+
states a choice, and receives a four-question, signal-free survey definition.
|
|
105
|
+
No QuestionPro data or action tool runs. Partner integration and distribution
|
|
106
|
+
remain unproven until QuestionPro supplies a sandbox and a documented path that
|
|
107
|
+
another non-Sensie customer can discover, authorize, use, and revoke.
|
|
108
|
+
|
|
109
|
+
## Failure and degraded paths
|
|
110
|
+
|
|
111
|
+
- **No partner sandbox:** return the copy-ready plan and label platform
|
|
112
|
+
interoperability untested. Do not ask the researcher to sign up or upgrade.
|
|
113
|
+
- **Only a broad server is available:** stop rather than connect root, `/all`,
|
|
114
|
+
`/full`, response, send, audience, community, poll, or employee surfaces.
|
|
115
|
+
- **SomaCheck remains pending:** retain the handle and continue without a result
|
|
116
|
+
if it expires or is cancelled. Do not create a replacement request.
|
|
117
|
+
- **Unreadable capture:** offer a retry only if the researcher wants one.
|
|
118
|
+
- **The researcher's words differ from the reading:** follow their words.
|
|
119
|
+
|
|
120
|
+
## Privacy boundary
|
|
121
|
+
|
|
122
|
+
- Raw motion never reaches QuestionPro or the agent.
|
|
123
|
+
- QuestionPro receives no proposition, reading, confidence, confirmation, or
|
|
124
|
+
gesture metadata.
|
|
125
|
+
- SomaCheck receives no QuestionPro questions, responses, respondent records,
|
|
126
|
+
survey IDs, credentials, or hidden fields.
|
|
127
|
+
- No participant-bearing or platform action tool is called.
|
|
128
|
+
|
|
129
|
+
## Test checklist
|
|
130
|
+
|
|
131
|
+
- [ ] The researcher is the phone holder and proposition subject.
|
|
132
|
+
- [ ] Any QuestionPro surface was supplied by a partner owner, not purchased or
|
|
133
|
+
populated for this test.
|
|
134
|
+
- [ ] Live access, if present, is limited to schema discovery on the focused
|
|
135
|
+
`/surveybuilder` endpoint.
|
|
136
|
+
- [ ] No existing responses, analytics, respondents, audiences, employees, or
|
|
137
|
+
workspace data are retrieved.
|
|
138
|
+
- [ ] One decision creates at most one SomaCheck request.
|
|
139
|
+
- [ ] The agent receives Aligned or Unaligned plus confidence and retains
|
|
140
|
+
judgment; the researcher retains authority.
|
|
141
|
+
- [ ] The output contains four signal-free questions and no platform write.
|
|
142
|
+
- [ ] No SomaCheck output is written to QuestionPro.
|
|
143
|
+
|
|
144
|
+
## Sources
|
|
145
|
+
|
|
146
|
+
- [QuestionPro MCP overview and capability catalog](https://www.questionpro.com/headless/)
|
|
147
|
+
- [QuestionPro MCP connector setup and focused server list](https://www.questionpro.com/help/mcp-help-file.html)
|
|
148
|
+
- [QuestionPro Survey Results tools, excluded from this recipe](https://www.questionpro.com/headless/survey-results/)
|
|
149
|
+
- [QuestionPro LivePolls tools, excluded from this recipe](https://www.questionpro.com/headless/livepolls/)
|
|
150
|
+
- [SomaCheck MCP setup and tool behavior](../README.md)
|
|
151
|
+
- [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
|
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Spotify + SomaCheck Listening Reflection
|
|
3
|
+
recipe_id: spotify-listening-reflection-v1
|
|
4
|
+
status: P0 Studio/Kit manual pilot plus MCP fallback; direct attachment gated
|
|
5
|
+
audience: Studio research-preview users (Premium, 18+, select markets, usage limits apply) with a SomaCheck-capable companion agent
|
|
6
|
+
updated: 2026-09-03
|
|
7
|
+
required_mcp_servers:
|
|
8
|
+
- vibecheck
|
|
9
|
+
partner_paths:
|
|
10
|
+
- Studio/Kit manual bridge; not an installable MCP server
|
|
11
|
+
- Spotify first-party Claude integration after capability probe
|
|
12
|
+
- Reviewed Spotify Web API companion adapter; not a public Spotify MCP server
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Spotify + SomaCheck Listening Reflection
|
|
16
|
+
|
|
17
|
+
Use this recipe when a person wants Kit in Studio by Spotify Labs to suggest a
|
|
18
|
+
specific track, then wants one private, consented SomaCheck signal before
|
|
19
|
+
deciding whether Kit should play it. The person experiences one complete loop:
|
|
20
|
+
Kit proposes, SomaCheck reflects, the person decides, and—only after a separate
|
|
21
|
+
confirmation—Kit changes playback.
|
|
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.
|
|
27
|
+
|
|
28
|
+
## Primary customer experience: Studio/Kit manual pilot
|
|
29
|
+
|
|
30
|
+
Spotify documents Kit's taste-aware recommendation and playback capabilities,
|
|
31
|
+
but does not document a way to attach SomaCheck MCP to Studio. The currently
|
|
32
|
+
testable Studio experience therefore uses an explicit manual relay through a
|
|
33
|
+
separate SomaCheck-capable agent. This is a real experience test inside Kit,
|
|
34
|
+
but it is **not** a direct MCP integration.
|
|
35
|
+
|
|
36
|
+
### 1. Ask Kit for one candidate without changing playback
|
|
37
|
+
|
|
38
|
+
Paste this in Studio:
|
|
39
|
+
|
|
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.
|
|
46
|
+
|
|
47
|
+
If Kit changes playback before the later yes, the test fails. Stop and record
|
|
48
|
+
the premature action; do not continue as though consent worked.
|
|
49
|
+
|
|
50
|
+
### 2. Ask the SomaCheck-capable companion agent once
|
|
51
|
+
|
|
52
|
+
Paste the candidate title and artist into an agent with `vibecheck` connected:
|
|
53
|
+
|
|
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.
|
|
58
|
+
|
|
59
|
+
This is an explicit one-ask request, so the companion uses
|
|
60
|
+
`consent_basis: "user_requested_vibecheck"` and does not ask for redundant
|
|
61
|
+
consent. The exact proposition contains no Spotify account or listening data.
|
|
62
|
+
|
|
63
|
+
### 3. Relay only the authorized result to Kit, then choose
|
|
64
|
+
|
|
65
|
+
After seeing the result, paste this in Studio:
|
|
66
|
+
|
|
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.
|
|
74
|
+
|
|
75
|
+
Kit should ask and stop. Mike then answers yes or no. A yes may cause Kit to
|
|
76
|
+
use its documented built-in playback capability; a no must leave playback
|
|
77
|
+
unchanged. After the test, Mike must ask Kit what it remembers, delete anything
|
|
78
|
+
retained, verify the deletion, and then open a fresh conversation and confirm it
|
|
79
|
+
holds no memory of the track, the verdict, or SomaCheck. Spotify says Studio's
|
|
80
|
+
memory and conversation history can be inspected and deleted locally, while
|
|
81
|
+
messages are processed by an AI service provider and are not used to train that
|
|
82
|
+
provider's models.
|
|
83
|
+
|
|
84
|
+
### Observable Studio success
|
|
85
|
+
|
|
86
|
+
- Kit proposes one exact track without changing Spotify.
|
|
87
|
+
- The companion sends exactly one SomaCheck ask.
|
|
88
|
+
- 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.
|
|
90
|
+
- Kit asks the exact playback question and waits.
|
|
91
|
+
- Yes plays the named track; no makes no playback change.
|
|
92
|
+
- Studio's memory audit shows nothing retained, or shows it and the deletion is
|
|
93
|
+
verified in a fresh conversation.
|
|
94
|
+
- The lane is described as a manual Studio bridge with a local context packet,
|
|
95
|
+
never as a Studio skill, Kit integration, or MCP attachment.
|
|
96
|
+
|
|
97
|
+
The handoff between Studio and the companion is manual. Do not describe this as
|
|
98
|
+
Kit having called SomaCheck, SomaCheck controlling Spotify, or a deployed
|
|
99
|
+
Spotify MCP integration.
|
|
100
|
+
|
|
101
|
+
## Official same-agent pilot: Spotify in Claude + SomaCheck
|
|
102
|
+
|
|
103
|
+
Spotify also publishes a first-party Spotify integration for Claude on web,
|
|
104
|
+
mobile, and desktop. Spotify says it can provide taste-based recommendations,
|
|
105
|
+
preview/save/play results, open them in Spotify, and use Spotify Connect to
|
|
106
|
+
inspect or control devices. This is an official consumer integration, not a
|
|
107
|
+
public Spotify MCP contract and not Studio/Kit.
|
|
108
|
+
|
|
109
|
+
If one Claude conversation can see both the official Spotify integration and
|
|
110
|
+
the linked SomaCheck remote MCP, Mike can test the complete loop without a
|
|
111
|
+
manual relay or a self-hosted Web API adapter. Run a capability probe first;
|
|
112
|
+
availability in the Claude consumer app does not prove the same tool exists in
|
|
113
|
+
Claude Code or another agent host.
|
|
114
|
+
|
|
115
|
+
### Exact Claude prompt
|
|
116
|
+
|
|
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.
|
|
122
|
+
|
|
123
|
+
The test passes when Claude proposes one Spotify result without acting, makes
|
|
124
|
+
one SomaCheck request, reports the result, waits at the exact playback question,
|
|
125
|
+
and changes Spotify only after a typed yes. A no must create zero Spotify
|
|
126
|
+
mutations. If either integration is missing, stop and use the Studio manual
|
|
127
|
+
pilot or Save to Spotify path; do not substitute an unofficial connector while
|
|
128
|
+
calling it the first-party Claude integration.
|
|
129
|
+
|
|
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.
|
|
136
|
+
|
|
137
|
+
Spotify says both Free and Premium listeners can connect Spotify to Claude,
|
|
138
|
+
with some personalized prompt capabilities differing by plan. Confirm the
|
|
139
|
+
actual playback/device tool before the test. Spotify also says it does not
|
|
140
|
+
share Spotify audio or video content with Anthropic for training.
|
|
141
|
+
|
|
142
|
+
## Official agent-native wedge: reflect, make a brief, Save to Spotify
|
|
143
|
+
|
|
144
|
+
Spotify now publishes the `spotify/save-to-spotify` CLI and agent skill for
|
|
145
|
+
Codex, Claude Code, Cursor, OpenClaw, and compatible skill hosts. This is not a
|
|
146
|
+
consumer Web API MCP server and does not attach SomaCheck to Kit, but it is an
|
|
147
|
+
official, immediately installable agent path into a person's Spotify Library.
|
|
148
|
+
|
|
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.
|
|
154
|
+
|
|
155
|
+
### Exact personal-brief prompt
|
|
156
|
+
|
|
157
|
+
Use a non-sensitive topic for the first test, such as a public article or a
|
|
158
|
+
short set of notes created specifically for the demo.
|
|
159
|
+
|
|
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.
|
|
173
|
+
|
|
174
|
+
### Prerequisites
|
|
175
|
+
|
|
176
|
+
- Install a reviewed, checksum-verified release from Spotify's official
|
|
177
|
+
[`spotify/save-to-spotify`](https://github.com/spotify/save-to-spotify)
|
|
178
|
+
repository and complete its browser login. Do not paste its stored token into
|
|
179
|
+
chat. As of this review, the latest published release is `v0.2.0`.
|
|
180
|
+
- Use the latest Spotify app and an account with Save to Spotify beta access.
|
|
181
|
+
Spotify says eligible Free and Premium accounts can use the feature.
|
|
182
|
+
- Provide a supported audio file: `.mp3`, `.m4a`, `.wav`, or `.ogg`.
|
|
183
|
+
- Choose a voice engine separately. The Save to Spotify CLI uploads audio but
|
|
184
|
+
does not synthesize speech. Prefer local TTS for the first test; obtain
|
|
185
|
+
separate consent before sending personal source material to a hosted TTS
|
|
186
|
+
provider.
|
|
187
|
+
- Keep the content primarily spoken-word. Music-first content is not permitted.
|
|
188
|
+
|
|
189
|
+
### Exact workflow
|
|
190
|
+
|
|
191
|
+
1. Present two brief directions without invoking SomaCheck or generating audio.
|
|
192
|
+
2. Because the customer prompt explicitly requests it, call
|
|
193
|
+
`request_vibecheck` once with the exact proposition and
|
|
194
|
+
`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.
|
|
201
|
+
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:
|
|
204
|
+
`Save this episode to Spotify now?`
|
|
205
|
+
9. Only after a typed yes, invoke the official skill/CLI upload once. Capture
|
|
206
|
+
the returned episode/library link and readiness status. Do not duplicate an
|
|
207
|
+
upload after an ambiguous response.
|
|
208
|
+
10. Open the returned link in Spotify and listen. The episode remains private
|
|
209
|
+
personal content and currently cannot be shared.
|
|
210
|
+
|
|
211
|
+
### Observable success and failure
|
|
212
|
+
|
|
213
|
+
Success means one SomaCheck ask, one explicit direction choice, an approved
|
|
214
|
+
talk script, one approved local TTS operation, one separately approved upload,
|
|
215
|
+
and a playable episode in Your Library. The saved episode contains no
|
|
216
|
+
SomaCheck result or claim about the person's state.
|
|
217
|
+
|
|
218
|
+
If Save to Spotify access is unavailable, content is rejected, processing
|
|
219
|
+
fails, a usage limit is reached, or the audio is not primarily talk, keep the
|
|
220
|
+
local file and report the exact bounded failure. Do not switch to a public
|
|
221
|
+
podcast host, share the content, or repeat the upload without instruction.
|
|
222
|
+
|
|
223
|
+
Spotify currently documents beta limits of five shows with 30 episodes per
|
|
224
|
+
show for Free and ten shows with 60 episodes per show for Premium. Treat those
|
|
225
|
+
limits as changeable and check the current support page before operational use.
|
|
226
|
+
|
|
227
|
+
## Automated MCP fallback outside Studio
|
|
228
|
+
|
|
229
|
+
1. Start any track on an active Spotify device.
|
|
230
|
+
2. In Spotify, choose one candidate next track and copy its Spotify track link.
|
|
231
|
+
3. Give the exact prompt below to an MCP-capable agent that has both SomaCheck
|
|
232
|
+
and a reviewed Spotify Web API adapter.
|
|
233
|
+
4. Complete the one SomaCheck ask on the phone.
|
|
234
|
+
5. Read the Aligned or Unaligned result and confidence in the agent.
|
|
235
|
+
6. Answer the agent's separate question about whether to queue the named track.
|
|
236
|
+
7. If the answer is yes, see that exact track in the Spotify queue. If the
|
|
237
|
+
answer is no, Spotify is unchanged.
|
|
238
|
+
|
|
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.
|
|
242
|
+
|
|
243
|
+
## Exact fallback prompt
|
|
244
|
+
|
|
245
|
+
Replace the placeholder with one Spotify track link. Keep the SomaCheck
|
|
246
|
+
statement exactly as written.
|
|
247
|
+
|
|
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.
|
|
257
|
+
|
|
258
|
+
Because this prompt explicitly requests one SomaCheck, use
|
|
259
|
+
`consent_basis: "user_requested_vibecheck"`; do not ask for redundant consent
|
|
260
|
+
for the phone ask. The later Spotify confirmation is separate and mandatory.
|
|
261
|
+
|
|
262
|
+
## Prerequisites
|
|
263
|
+
|
|
264
|
+
1. The person has linked `vibecheck` to their own SomaCheck account and the
|
|
265
|
+
agent can see `request_vibecheck` and `get_vibecheck_result`.
|
|
266
|
+
2. The agent has a reviewed Spotify connector. Spotify does not publish an
|
|
267
|
+
official MCP server for the consumer Web API, so inspect the connector's
|
|
268
|
+
tools and prove that the required operations map to the official endpoints
|
|
269
|
+
below. Do not treat a community MCP package as Spotify-supported software.
|
|
270
|
+
3. The Spotify app uses Authorization Code with PKCE for a local, desktop, or
|
|
271
|
+
mobile client, stores tokens outside chat, and requests only
|
|
272
|
+
`user-read-currently-playing` and `user-modify-playback-state` for this
|
|
273
|
+
recipe.
|
|
274
|
+
4. The Spotify developer-app owner has Premium. In Development Mode, the
|
|
275
|
+
current quota documentation limits the app to five allowlisted authenticated
|
|
276
|
+
users and applies a shared quota distinct from rate limits.
|
|
277
|
+
5. The listener has Premium and an active, non-restricted Spotify Connect
|
|
278
|
+
device. Start playback manually before the test so queueing has an active
|
|
279
|
+
target.
|
|
280
|
+
6. The person supplies one exact `open.spotify.com/track/...` link or
|
|
281
|
+
`spotify:track:...` URI. The adapter converts a link to its exact track URI
|
|
282
|
+
locally. This P0 path does not ask an agent to search for or recommend music.
|
|
283
|
+
|
|
284
|
+
Do not paste a Spotify access token, refresh token, client secret, SomaCheck
|
|
285
|
+
link token, or developer credential into the conversation or proposition.
|
|
286
|
+
|
|
287
|
+
## Required Spotify capability map
|
|
288
|
+
|
|
289
|
+
Actual MCP tool names vary. Validate behavior against these official Web API
|
|
290
|
+
operations instead of assuming names:
|
|
291
|
+
|
|
292
|
+
| Purpose | Official operation | Scope | Rule |
|
|
293
|
+
| --- | --- | --- | --- |
|
|
294
|
+
| Resolve the person's exact candidate | `GET /v1/tracks/{id}` | No additional user scope | Read once from the exact supplied track ID; do not search or recommend. |
|
|
295
|
+
| Confirm the active listening context | `GET /v1/me/player/currently-playing` | `user-read-currently-playing` | Read once. A `204`/empty state means the person must start Spotify manually. |
|
|
296
|
+
| Add the person's exact candidate | `POST /v1/me/player/queue?uri={spotify_uri}` | `user-modify-playback-state` | Call only after a post-result yes. A successful `204` means the command was accepted, not that playback changed. |
|
|
297
|
+
| Verify the result | `GET /v1/me/player/queue` | `user-read-currently-playing` or `user-read-playback-state` | Read once and check for the exact URI. Do not continuously poll. |
|
|
298
|
+
|
|
299
|
+
If the connector lacks queueing, do not silently substitute immediate playback,
|
|
300
|
+
playlist creation, save-to-library, skip, or volume control. Return the exact
|
|
301
|
+
Spotify link so the person can add it manually.
|
|
302
|
+
|
|
303
|
+
## Exact cross-MCP workflow
|
|
304
|
+
|
|
305
|
+
Follow these steps in order.
|
|
306
|
+
|
|
307
|
+
1. **Validate the candidate.** Parse only an exact Spotify track link or URI.
|
|
308
|
+
Reject playlists, albums, episodes, malformed IDs, and shortened or unknown
|
|
309
|
+
redirect links for this P0 recipe. Show the resolved track title, artist, and
|
|
310
|
+
Spotify link with Spotify attribution before any write.
|
|
311
|
+
2. **Read current playback once.** Use the connector operation mapped to
|
|
312
|
+
`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.
|
|
314
|
+
3. **Request one SomaCheck.** Call `request_vibecheck` exactly once with:
|
|
315
|
+
|
|
316
|
+
```json
|
|
317
|
+
{
|
|
318
|
+
"statement": "I want this song to be next.",
|
|
319
|
+
"idempotency_key": "<fresh UUID for this logical ask>",
|
|
320
|
+
"consent_basis": "user_requested_vibecheck"
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Reuse the same UUID only when retrying the exact same statement after an
|
|
325
|
+
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.
|
|
337
|
+
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
|
|
340
|
+
choice means no Spotify write.
|
|
341
|
+
7. **Queue only after yes.** Add only the exact supplied Spotify track URI. Do
|
|
342
|
+
not add a recommendation, change playback, skip, change volume, create a
|
|
343
|
+
playlist, or persist the SomaCheck result.
|
|
344
|
+
8. **Verify once.** Read the queue once and report either that the exact URI is
|
|
345
|
+
visible or that Spotify accepted the command but the verification did not
|
|
346
|
+
confirm it. Spotify warns that ordering is not guaranteed when Player API
|
|
347
|
+
commands are combined, so do not promise that the item will be literally
|
|
348
|
+
next if other commands or clients changed the queue concurrently.
|
|
349
|
+
|
|
350
|
+
## What must never cross the boundary
|
|
351
|
+
|
|
352
|
+
- Raw or batched gyroscope, accelerometer, or magnetometer data.
|
|
353
|
+
- Personal-baseline or calibration data, including any invented
|
|
354
|
+
`calibration_score` field.
|
|
355
|
+
- 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.
|
|
358
|
+
- The verdict, confidence, confirmation, or inferred meaning in any Spotify
|
|
359
|
+
URI, query, playlist, description, metadata field, analytics event, or log.
|
|
360
|
+
- Spotify listening data in the SomaCheck proposition. “I want this song to be
|
|
361
|
+
next” is intentionally self-contained and first-person.
|
|
362
|
+
- Spotify content used to train or fine-tune an AI model. Use minimal metadata
|
|
363
|
+
transiently for the requested action and follow Spotify's attribution and
|
|
364
|
+
retention rules.
|
|
365
|
+
|
|
366
|
+
## Observable success
|
|
367
|
+
|
|
368
|
+
The test passes only when all of the following are visible:
|
|
369
|
+
|
|
370
|
+
- Spotify was already playing on the person's active device.
|
|
371
|
+
- The agent displays the exact candidate title, artist, and Spotify link.
|
|
372
|
+
- 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.
|
|
375
|
+
- The agent pauses before a Spotify write and asks for a separate yes/no choice.
|
|
376
|
+
- A typed yes produces one queue-add call for the exact candidate URI.
|
|
377
|
+
- A single queue read shows the exact URI, or the agent truthfully reports that
|
|
378
|
+
the command was accepted but not verified.
|
|
379
|
+
- A typed no produces zero Spotify writes.
|
|
380
|
+
|
|
381
|
+
The transcript plus redacted tool names/status codes is the demo receipt. Do
|
|
382
|
+
not record credentials, the raw gesture, or the person's reading in Spotify.
|
|
383
|
+
|
|
384
|
+
## Failure behavior
|
|
385
|
+
|
|
386
|
+
- **No Studio/Kit connector:** use this recipe in another MCP-capable agent.
|
|
387
|
+
Do not call it a Studio integration. A manual copy from that agent into Kit is
|
|
388
|
+
a manual relay, not a bidirectional MCP demo.
|
|
389
|
+
- **No Spotify queue tool:** show the exact track link and ask the person to add
|
|
390
|
+
it in Spotify. Do not substitute another mutation.
|
|
391
|
+
- **No active device / empty playback:** ask the person to open Spotify and
|
|
392
|
+
start a track, then retry only the Spotify read. Do not repeat the SomaCheck.
|
|
393
|
+
- **Restricted device or `401`/`403`:** stop the write, identify whether auth,
|
|
394
|
+
scope, Premium, allowlist, or device support needs repair, and never request a
|
|
395
|
+
token in chat.
|
|
396
|
+
- **`429` rate or quota response:** honor `Retry-After` when present. Do not
|
|
397
|
+
retry in a tight loop. Development quota errors may identify
|
|
398
|
+
`reason: "QUOTA_EXCEEDED"` and need a later retry rather than backoff alone.
|
|
399
|
+
- **SomaCheck pending, expired, cancelled, unreadable, or error:** do not infer
|
|
400
|
+
a result and do not create a replacement ask. The person may still decide
|
|
401
|
+
about Spotify directly.
|
|
402
|
+
- **Candidate mismatch:** do not queue. Show the mismatch and ask the person
|
|
403
|
+
for a new exact Spotify track link.
|
|
404
|
+
- **Queue verification mismatch:** report uncertainty. Do not enqueue again,
|
|
405
|
+
because the first `204` may already have mutated the queue.
|
|
406
|
+
|
|
407
|
+
## Acceptance tests
|
|
408
|
+
|
|
409
|
+
Run both contract tests and one real-account smoke test before describing the
|
|
410
|
+
recipe as operational.
|
|
411
|
+
|
|
412
|
+
| Test | Expected result |
|
|
413
|
+
| --- | --- |
|
|
414
|
+
| 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. |
|
|
417
|
+
| Human says yes | Exactly one queue-add call contains only the supplied URI; one later queue read verifies it. |
|
|
418
|
+
| 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. |
|
|
421
|
+
| Spotify `204`, verification absent | No duplicate write; agent reports accepted but not verified. |
|
|
422
|
+
| Spotify `401`/`403`/restricted device | No fallback mutation and no credential request in chat. |
|
|
423
|
+
| Spotify `429` | Connector honors `Retry-After` and distinguishes shared quota exhaustion when the response supplies that reason. |
|
|
424
|
+
| 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. |
|
|
426
|
+
|
|
427
|
+
## Launch boundary
|
|
428
|
+
|
|
429
|
+
The manual Studio pilot is available only to people with access to Spotify's
|
|
430
|
+
research preview. The adapter recipe is suitable for a personal, allowlisted
|
|
431
|
+
Development Mode demo. Neither is approval for public or commercial
|
|
432
|
+
distribution. Spotify's Player API
|
|
433
|
+
pages state that streaming applications may not be commercial, while current
|
|
434
|
+
Extended Quota access requires a qualifying organization and Spotify review.
|
|
435
|
+
Obtain Spotify policy/partner approval and Sensie privacy/legal review before a
|
|
436
|
+
public launch or paid offering.
|
|
437
|
+
|
|
438
|
+
## Sources
|
|
439
|
+
|
|
440
|
+
- [Studio by Spotify Labs](https://labs.spotify.com/studio)
|
|
441
|
+
- [How Studio works](https://labs.spotify.com/studio/how-it-works)
|
|
442
|
+
- [Spotify support: How to use Studio](https://support.spotify.com/us/article/studio/)
|
|
443
|
+
- [Studio by Spotify Labs research-preview launch](https://newsroom.spotify.com/2026-05-21/studio-by-spotify-labs-launch/)
|
|
444
|
+
- [Spotify Web API: Building with AI](https://developer.spotify.com/documentation/web-api/tutorials/building-with-ai)
|
|
445
|
+
- [Spotify Web API: Add Item to Playback Queue](https://developer.spotify.com/documentation/web-api/reference/add-to-queue)
|
|
446
|
+
- [Spotify Web API: Get Track](https://developer.spotify.com/documentation/web-api/reference/get-track)
|
|
447
|
+
- [Spotify Web API: Get Currently Playing Track](https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track)
|
|
448
|
+
- [Spotify Web API: Get the User's Queue](https://developer.spotify.com/documentation/web-api/reference/get-queue)
|
|
449
|
+
- [Spotify Web API: Authorization Code with PKCE](https://developer.spotify.com/documentation/web-api/tutorials/code-pkce-flow)
|
|
450
|
+
- [Spotify Web API: Scopes](https://developer.spotify.com/documentation/web-api/concepts/scopes)
|
|
451
|
+
- [Spotify Web API: Quota modes](https://developer.spotify.com/documentation/web-api/concepts/quota-modes)
|
|
452
|
+
- [Spotify Web API: Rate limits](https://developer.spotify.com/documentation/web-api/concepts/rate-limits)
|
|
453
|
+
- [Spotify's 2024 endpoint-access changes](https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api)
|
|
454
|
+
- [Spotify: Save Your Personal Podcast to Spotify](https://newsroom.spotify.com/2026-05-07/personal-podcasts-launch/)
|
|
455
|
+
- [Spotify Brings Music and Podcast Recommendations to Claude](https://newsroom.spotify.com/2026-04-23/claude-integration/)
|
|
456
|
+
- [Spotify support: Save to Spotify](https://support.spotify.com/us/article/save-to-spotify/)
|
|
457
|
+
- [Official Save to Spotify CLI and agent skill](https://github.com/spotify/save-to-spotify)
|
|
458
|
+
- [SomaCheck setup and tool behavior](../README.md)
|
|
459
|
+
- [SomaCheck immediate-request contract](../LIVE-ASK-CONTRACT.md)
|