@somacheck/vibecheck 0.6.13 → 0.6.14

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/README.md CHANGED
@@ -11,7 +11,7 @@ Your agent has your context. It does not have your gut. This is the bridge.
11
11
 
12
12
  Fair. Here is what you need, without executing anything.
13
13
 
14
- **What the `link` command does.** `npx -y @somacheck/vibecheck@0.6.13 link <CODE> --client <CLIENT>`
14
+ **What the `link` command does.** `npx -y @somacheck/vibecheck@0.6.14 link <CODE> --client <CLIENT>`
15
15
  exchanges a short-lived pairing code, generated inside the SomaCheck iOS app, for
16
16
  a bearer token. It writes that token to `~/.sensie/config.json` with mode `0600`,
17
17
  offers to configure supported agent clients found on the computer, and checks the
@@ -42,8 +42,8 @@ code is not used. Non-interactive implicit selection,
42
42
 
43
43
  **What the server does once running.** It exposes MCP tools that share bounded,
44
44
  user-authorized context summaries, create a statement for the user to test,
45
- read its outcome, recover recent completed gesture context, and keep a
46
- three-statement feed stocked. Version 0.6 adds `request_vibecheck` for a
45
+ read its outcome, recover recent completed gesture context, and optionally stock
46
+ up to three feed items when the person asks. Version 0.6 adds `request_vibecheck` for a
47
47
  person-approved, immediate phone check-in. That path is deliberately separate
48
48
  from the reflection feed.
49
49
 
@@ -102,20 +102,20 @@ before the pairing code is redeemed.
102
102
  To configure or repair a client later:
103
103
 
104
104
  ```text
105
- npx -y @somacheck/vibecheck@0.6.13 setup codex
106
- npx -y @somacheck/vibecheck@0.6.13 setup claude
107
- npx -y @somacheck/vibecheck@0.6.13 doctor
105
+ npx -y @somacheck/vibecheck@0.6.14 setup codex
106
+ npx -y @somacheck/vibecheck@0.6.14 setup claude
107
+ npx -y @somacheck/vibecheck@0.6.14 doctor
108
108
  ```
109
109
 
110
110
  Manual Codex registration remains available. Its stdio runtime command is
111
- `npx -y @somacheck/vibecheck@0.6.13 serve --client codex`:
111
+ `npx -y @somacheck/vibecheck@0.6.14 serve --client codex`:
112
112
 
113
113
  ```json
114
114
  {
115
115
  "mcpServers": {
116
116
  "vibecheck": {
117
117
  "command": "npx",
118
- "args": ["-y", "@somacheck/vibecheck@0.6.13", "serve", "--client", "codex"]
118
+ "args": ["-y", "@somacheck/vibecheck@0.6.14", "serve", "--client", "codex"]
119
119
  }
120
120
  }
121
121
  }
@@ -287,9 +287,9 @@ blocked until the capability and revocation probe in the safety review passes.
287
287
  | Tool | What it does |
288
288
  |---|---|
289
289
  | `get_vibecheck_context` | Read recent completed gestures for this exact agent link without retaining every `request_id`. |
290
- | `get_vibecheck_status` | Read the live three-proposition cache and how many distinct insights it needs. |
290
+ | `get_vibecheck_status` | Read the three-proposition database cache and its available capacity; this does not verify phone display. |
291
291
  | `share_somacheck_context` | Share 1–20 bounded, derived, user-authorized observations; raw conversations and secrets are rejected. |
292
- | `post_vibecheck_statement` | Add one to three personalized statements without blocking; one may become the current Home vibe check and the rest wait under Vibe Checks without extra pushes. Returns a stable `request_id` for each. |
292
+ | `post_vibecheck_statement` | When the person asks to stock reflections for later or has explicitly authorized scheduled stocking, add one to the reported available maximum without blocking. One may become database-current and the rest queue under Vibe Checks without extra pushes. Returns a stable `request_id` for each created row; it does not verify phone display. |
293
293
  | `get_vibecheck_result` | Read that exact proposition once by `request_id`; returns queued, pending, or its terminal result. |
294
294
  | `request_vibecheck` | With per-ask consent, send one immediate phone vibecheck, wait boundedly for its exact answer, and retain an opaque `live:<uuid>` fallback handle. |
295
295
 
@@ -346,20 +346,26 @@ statement with the same `idempotency_key`.
346
346
 
347
347
  An immediate vibecheck is not proposition caching. It sends one person-approved statement
348
348
  for the current choice, expires, and remains bound to its originating client.
349
+ Handle multiple immediate requests one at a time; do not turn the reflection feed
350
+ into a surrogate queue of immediate asks.
349
351
  The reflection feed remains asynchronous and keeps its three-item cache
350
352
  behavior. When no immediate Live Ask or delivery test has priority, one current
351
353
  feed item may appear on Home. The other items remain visible as **Up next**
352
354
  under **Settings → Vibe Checks** and do not generate extra notifications.
353
355
 
354
- The agent maintains three distinct insights. SomaCheck presents one at a time;
355
- the other two remain cached. After a completed gesture, the next cached insight
356
+ The database feed has capacity for three distinct insights, but capacity is not
357
+ a quota. Stock only the genuinely useful items the person asked to save for later,
358
+ from one up to the available maximum; never invent filler. SomaCheck can present
359
+ one at a time while other created items remain cached. After a completed gesture, the next cached insight
356
360
  is promoted and the open slot is marked for replenishment automatically. Cached insights
357
361
  expire sooner than a presented check-in so stale context does not masquerade as
358
362
  a timely observation.
359
363
 
360
- For a prompt-free loop, run the agent on a background schedule: call
361
- `get_vibecheck_context`, then `get_vibecheck_status`, and post exactly
362
- `propositions_needed` distinct statements. MCP supplies the tools and durable
364
+ For a scheduled loop, call `get_vibecheck_context` and `get_vibecheck_status`.
365
+ Only when the person has asked to stock later reflections, post between one and
366
+ the reported `propositions_needed` maximum; it is available capacity, not a
367
+ required count. An explicit, still-active opt-in to scheduled stocking covers
368
+ later scheduled runs without asking again each time. MCP supplies the tools and durable
363
369
  context, but it does not itself wake an idle model. Immediate event-driven runs
364
370
  require a host webhook/agent trigger; scheduled runs provide the portable path
365
371
  across local MCP clients.
package/dist/constants.js CHANGED
@@ -2,7 +2,7 @@
2
2
  export const SUPABASE_URL = "https://pbldcmniommltbdwuykk.supabase.co";
3
3
  export const SUPABASE_PUBLISHABLE_KEY = "sb_publishable_af-lUNI2FqEcb-oGy-4uxQ_cnm6kY85";
4
4
  export const PACKAGE_NAME = "@somacheck/vibecheck";
5
- export const PACKAGE_VERSION = "0.6.13";
5
+ export const PACKAGE_VERSION = "0.6.14";
6
6
  export const PACKAGE_SPEC = `${PACKAGE_NAME}@${PACKAGE_VERSION}`;
7
7
  export const SOMACHECK_SETUP_URL = "https://testflight.apple.com/join/C4mAH3zz";
8
8
  export const MCP_SERVER_NAME = "vibecheck";
package/dist/recipes.js CHANGED
@@ -52,8 +52,8 @@ export const RECIPE_CATALOG = [
52
52
  "The product or integration owner has provisioned an organization-authorized Maze connection or partner sandbox at https://connect.maze.co/mcp; running this recipe does not ask the researcher to sign up, upgrade, administer access, or populate Maze data.",
53
53
  "The provisioned workspace supplies one named existing study with safe metadata or an aggregate summary; if it does not, the Maze half remains untested and the researcher still receives a copy-ready plan.",
54
54
  ],
55
- starterPrompt: "Use Maze and SomaCheck to help me reflect on my own interpretation plan for one named Maze study. I am the researcher and I am holding the phone. The study is [STUDY NAME OR ID PROVIDED BY THE WORKSPACE OWNER]. Use only the preconfigured official hosted read-only Maze MCP at https://connect.maze.co/mcp. Read only that study's safe metadata or one aggregate summary. Do not retrieve transcripts, recordings, heatmaps, click maps, mission answers, participant identifiers, contact fields, demographic exports, free text, or row-level data. Label what Maze literally reports separately from your interpretation, then offer two defensible framings. Offer one short first-person proposition about my own interpretation plan and wait for my acceptance before any proactive SomaCheck ask. Treat Aligned or Unaligned plus confidence as context, not truth, diagnosis, authorization, or evidence about a participant. Ask what I choose in words. Keep the proposition, reading, confidence, and confirmation out of Maze. Do not create, edit, publish, delete, archive, export, share, tag, comment, or otherwise write to Maze. If the preconfigured connection or a safe runtime read is absent, label the Maze half untested, return a copy-ready interpretation plan, and tell the integration owner what capability is missing. Do not ask me to sign up, upgrade, administer access, or populate Maze data.",
56
- successCondition: "The researcher receives at most one optional signal about their own proposition and states a typed choice after a real metadata or aggregate read from a preconfigured workspace; no participant data or SomaCheck output enters Maze, and the Maze workspace remains unchanged.",
55
+ starterPrompt: "Use Maze and SomaCheck to help me reflect on my own interpretation plan for one named Maze study. I am the researcher and I am holding the phone. The study is [STUDY NAME OR ID PROVIDED BY THE WORKSPACE OWNER]. Use only the preconfigured official hosted read-only Maze MCP at https://connect.maze.co/mcp. Read only that study's safe metadata or one aggregate summary. Do not retrieve transcripts, recordings, heatmaps, click maps, mission answers, participant identifiers, contact fields, demographic exports, free text, or row-level data. Label what Maze literally reports separately from your interpretation, then offer two defensible framings. Offer one short first-person proposition about my own interpretation plan and wait for my acceptance before any proactive SomaCheck ask. Treat Aligned or Unaligned plus confidence as context, not truth, diagnosis, authorization, or evidence about a participant. Ask what I choose and accept any explicit response available in this interface. Keep the proposition, reading, confidence, and confirmation out of Maze. Do not create, edit, publish, delete, archive, export, share, tag, comment, or otherwise write to Maze. If the preconfigured connection or a safe runtime read is absent, label the Maze half untested, return a copy-ready interpretation plan, and tell the integration owner what capability is missing. Do not ask me to sign up, upgrade, administer access, or populate Maze data.",
56
+ successCondition: "The researcher receives at most one optional signal about their own proposition and explicitly indicates their choice after a real metadata or aggregate read from a preconfigured workspace; no participant data or SomaCheck output enters Maze, and the Maze workspace remains unchanged.",
57
57
  },
58
58
  {
59
59
  id: "chattermill-research-reflection-v1",
@@ -66,8 +66,8 @@ export const RECIPE_CATALOG = [
66
66
  "The product or integration owner has provisioned an organization-authorized Chattermill connection or partner sandbox at https://app.chattermill.com/mcp with mcp:read; running this recipe does not ask the researcher to sign up, purchase access, administer access, or populate Chattermill data.",
67
67
  "The provisioned workspace supplies one named existing project for which get_metrics or generate_highlights is sufficient; get_feedback, search_observations, identifier-bearing attributes, and free text remain prohibited.",
68
68
  ],
69
- starterPrompt: "Use Chattermill and SomaCheck to help me reflect on my own interpretation of one named project's customer-feedback insights. I am the researcher and I am holding the phone. The project is [PROJECT NAME OR ID PROVIDED BY THE WORKSPACE OWNER]. Use only the preconfigured official hosted read-only Chattermill MCP at https://app.chattermill.com/mcp. Read only aggregate metrics with get_metrics or generated highlights with generate_highlights, plus the minimum discovery metadata needed to build that query. Never call get_feedback or search_observations, enumerate identifier-bearing attributes, or surface individual feedback, source quotes, respondent identifiers, contact fields, or free text. Label what the aggregate output literally reports separately from your interpretation, then offer two defensible interpretations. Offer one short first-person proposition about my own interpretation or next step and wait for my acceptance before any proactive SomaCheck ask. Treat Aligned or Unaligned plus confidence as context, not truth, diagnosis, authorization, or evidence about an individual customer. Ask what I choose in words. Keep the proposition, reading, confidence, and confirmation out of Chattermill. Do not create, edit, publish, delete, share, export, tag, comment, or otherwise write to Chattermill. If the preconfigured connection, mcp:read, or a safe aggregate runtime tool is absent, label the Chattermill half untested, return a copy-ready interpretation, and tell the integration owner what capability is missing. Do not ask me to sign up, purchase access, administer access, or populate Chattermill data.",
70
- successCondition: "The researcher receives at most one optional signal about their own proposition and states a typed choice after a real aggregate or generated-summary read from a preconfigured workspace; no individual feedback or SomaCheck output enters the cross-MCP flow, and Chattermill remains unchanged.",
69
+ starterPrompt: "Use Chattermill and SomaCheck to help me reflect on my own interpretation of one named project's customer-feedback insights. I am the researcher and I am holding the phone. The project is [PROJECT NAME OR ID PROVIDED BY THE WORKSPACE OWNER]. Use only the preconfigured official hosted read-only Chattermill MCP at https://app.chattermill.com/mcp. Read only aggregate metrics with get_metrics or generated highlights with generate_highlights, plus the minimum discovery metadata needed to build that query. Never call get_feedback or search_observations, enumerate identifier-bearing attributes, or surface individual feedback, source quotes, respondent identifiers, contact fields, or free text. Label what the aggregate output literally reports separately from your interpretation, then offer two defensible interpretations. Offer one short first-person proposition about my own interpretation or next step and wait for my acceptance before any proactive SomaCheck ask. Treat Aligned or Unaligned plus confidence as context, not truth, diagnosis, authorization, or evidence about an individual customer. Ask what I choose and accept any explicit response available in this interface. Keep the proposition, reading, confidence, and confirmation out of Chattermill. Do not create, edit, publish, delete, share, export, tag, comment, or otherwise write to Chattermill. If the preconfigured connection, mcp:read, or a safe aggregate runtime tool is absent, label the Chattermill half untested, return a copy-ready interpretation, and tell the integration owner what capability is missing. Do not ask me to sign up, purchase access, administer access, or populate Chattermill data.",
70
+ successCondition: "The researcher receives at most one optional signal about their own proposition and explicitly indicates their choice after a real aggregate or generated-summary read from a preconfigured workspace; no individual feedback or SomaCheck output enters the cross-MCP flow, and Chattermill remains unchanged.",
71
71
  },
72
72
  {
73
73
  id: "user-interviews-research-reflection-v1",
@@ -80,8 +80,8 @@ export const RECIPE_CATALOG = [
80
80
  "The planning workflow requires no User Interviews account or connector because it calls no platform data or action tool.",
81
81
  "For partner integration validation only, the product or integration owner may supply a preconfigured partner sandbox whose runtime capability list can be inspected without invoking a project, recruitment, participant-data, contact, publication, or spend tool; the researcher is never asked to request access or populate platform data.",
82
82
  ],
83
- starterPrompt: "Use User Interviews and SomaCheck to help me prepare one clearly named, participant-free test-project plan without changing User Interviews. I am the researcher and I am holding the phone. The study idea is [STUDY IDEA]. Work only from what I provide here. If a product or integration owner has supplied a preconfigured official User Interviews partner sandbox, you may inspect its capability names and schemas, but do not call any platform data or action tool. The planning workflow does not require me to sign up, request access, purchase a plan, or populate User Interviews data. Do not retrieve candidates, participants, screeners, responses, profiles, identifiers, messages, recordings, transcripts, session data, or other workspace data. Propose two neutral study framings and show the exact signal-free project copy. Then offer one short first-person proposition about my own preferred direction and wait for my acceptance before any proactive SomaCheck ask. Treat Aligned or Unaligned plus confidence as context, not truth, diagnosis, authorization, or evidence about another person. Ask what I choose in words. Keep the proposition, reading, confidence, and confirmation out of User Interviews. Return a copy-ready project payload only. Do not create, edit, recruit, invite, message, schedule, screen, launch, publish, attach incentives, spend, read participant data, or call a broader or undocumented tool.",
84
- successCondition: "The researcher receives at most one optional signal about their own proposition and states a typed choice; the agent returns a copy-ready signal-free test-project plan, invokes no User Interviews data or action tool, and performs no recruitment, participant read, contact, mutation, launch, publication, incentive, payment, or spend.",
83
+ starterPrompt: "Use User Interviews and SomaCheck to help me prepare one clearly named, participant-free test-project plan without changing User Interviews. I am the researcher and I am holding the phone. The study idea is [STUDY IDEA]. Work only from what I provide here. If a product or integration owner has supplied a preconfigured official User Interviews partner sandbox, you may inspect its capability names and schemas, but do not call any platform data or action tool. The planning workflow does not require me to sign up, request access, purchase a plan, or populate User Interviews data. Do not retrieve candidates, participants, screeners, responses, profiles, identifiers, messages, recordings, transcripts, session data, or other workspace data. Propose two neutral study framings and show the exact signal-free project copy. Then offer one short first-person proposition about my own preferred direction and wait for my acceptance before any proactive SomaCheck ask. Treat Aligned or Unaligned plus confidence as context, not truth, diagnosis, authorization, or evidence about another person. Ask what I choose and accept any explicit response available in this interface. Keep the proposition, reading, confidence, and confirmation out of User Interviews. Return a copy-ready project payload only. Do not create, edit, recruit, invite, message, schedule, screen, launch, publish, attach incentives, spend, read participant data, or call a broader or undocumented tool.",
84
+ successCondition: "The researcher receives at most one optional signal about their own proposition and explicitly indicates their choice; the agent returns a copy-ready signal-free test-project plan, invokes no User Interviews data or action tool, and performs no recruitment, participant read, contact, mutation, launch, publication, incentive, payment, or spend.",
85
85
  },
86
86
  {
87
87
  id: "sprig-research-reflection-v1",
@@ -108,7 +108,7 @@ export const RECIPE_CATALOG = [
108
108
  "The product or integration owner has provisioned an organization-authorized Great Question connection or partner sandbox at https://greatquestion.co/api/mcp/v1 with PII hiding enabled; running this recipe does not ask the researcher to sign up, upgrade, purchase, administer access, or populate Great Question data.",
109
109
  "The owner supplies one participant-free test study, and the client restricts the platform half to get_survey_study for that exact artifact; no discovery or mutation tool is approved.",
110
110
  ],
111
- starterPrompt: "Use Great Question and SomaCheck to help me reflect on a five-question test survey plan without changing Great Question. I am the researcher and I am holding the phone. The product or integration owner has provisioned a partner sandbox and named this participant-free test study: [TEST STUDY NAME OR ID]. Read only that study's safe title, purpose, and question structure with get_survey_study. Do not search or list the workspace, and do not read candidates, participants, screeners, responses, sessions, transcripts, recordings, highlights, insights, reels, or other workspace data. Propose two neutral study framings and show their exact questions. Then offer one short first-person proposition about my own preferred framing and wait for my acceptance before any proactive SomaCheck ask. Give the agent the Aligned or Unaligned result plus confidence as context and let it use that context with its judgment. Ask what I choose in words. Keep the proposition, reading, confidence, and my confirmation out of Great Question. Return a signal-free, copy-ready research plan only. Do not create, update, delete, recruit, invite, message, schedule, incentivize, launch, publish, or otherwise write to Great Question. Do not ask me to sign up, upgrade, purchase, administer access, or populate Great Question data.",
111
+ starterPrompt: "Use Great Question and SomaCheck to help me reflect on a five-question test survey plan without changing Great Question. I am the researcher and I am holding the phone. The product or integration owner has provisioned a partner sandbox and named this participant-free test study: [TEST STUDY NAME OR ID]. Read only that study's safe title, purpose, and question structure with get_survey_study. Do not search or list the workspace, and do not read candidates, participants, screeners, responses, sessions, transcripts, recordings, highlights, insights, reels, or other workspace data. Propose two neutral study framings and show their exact questions. Then offer one short first-person proposition about my own preferred framing and wait for my acceptance before any proactive SomaCheck ask. Give the agent the Aligned or Unaligned result plus confidence as context and let it use that context with its judgment. Ask what I choose and accept any explicit response available in this interface. Keep the proposition, reading, confidence, and my confirmation out of Great Question. Return a signal-free, copy-ready research plan only. Do not create, update, delete, recruit, invite, message, schedule, incentivize, launch, publish, or otherwise write to Great Question. Do not ask me to sign up, upgrade, purchase, administer access, or populate Great Question data.",
112
112
  successCondition: "The researcher receives at most one optional signal, states a choice, and receives a copy-ready five-question plan; only get_survey_study reads the exact owner-supplied test artifact, Great Question remains unchanged, and no recruitment or participant data is accessed.",
113
113
  },
114
114
  {
package/dist/server.js CHANGED
@@ -132,7 +132,7 @@ const SERVER_INSTRUCTIONS = [
132
132
  "SomaCheck lets you ask your person for a vibecheck.",
133
133
  "Offer one when useful or when asked.",
134
134
  "When asked, choose and send a useful first-person statement from available context.",
135
- "Only request_vibecheck creates an immediate phone ask; post_vibecheck_statement stocks Settings Vibe Checks, with one current on Home and the rest Up next.",
135
+ "Only request_vibecheck creates an immediate phone ask, one at a time; use post_vibecheck_statement only when the person asks to stock reflections for later.",
136
136
  "Gesture and optional feedback are context, not authorization.",
137
137
  "Never infer the SomaCheck identity from the agent login.",
138
138
  "Use your judgment.",
@@ -197,7 +197,7 @@ export function createVibecheckServer(dependencies) {
197
197
  });
198
198
  server.registerTool("get_vibecheck_status", {
199
199
  title: "Vibecheck Status",
200
- description: "Read the live SomaCheck cache before posting. Reports how many personalized propositions are needed, when routine replenishment is due, and whether this is the agent's first contact.",
200
+ description: "Read the SomaCheck database feed before posting. Reports available proposition capacity, when routine replenishment is due, and whether this is the agent's first contact. Database state does not verify phone display.",
201
201
  inputSchema: {},
202
202
  outputSchema: statusSchema,
203
203
  annotations: {
@@ -255,7 +255,7 @@ export function createVibecheckServer(dependencies) {
255
255
  });
256
256
  server.registerTool("post_vibecheck_statement", {
257
257
  title: "Post Vibecheck Statement",
258
- description: "Stock Settings Vibe Checks with one to three optional personalized reflections and return immediately. One can become the current Home proposition; the rest stay Up next without extra pushes. Never call this to add follow-up asks after request_vibecheck. Call get_vibecheck_status first and submit exactly propositions_needed statements.",
258
+ description: "When the person asks to stock reflections for later, or has explicitly authorized scheduled stocking, add one to three optional personalized reflections under Settings → Vibe Checks and return immediately. One can become database-current for Home; the rest stay Up next without extra pushes. This does not verify phone display or delivery. Never call this to add follow-up asks after request_vibecheck. Call get_vibecheck_status first; propositions_needed is the available maximum, not a quota. Submit only genuinely useful statements and never invent extras to fill capacity. A still-active scheduled authorization does not require repeated consent each run.",
259
259
  inputSchema: {
260
260
  statements: z.array(z.string().min(1)).min(1).max(3)
261
261
  .describe("Distinct personalized statements for this person to test, ordered most useful first."),
@@ -276,14 +276,14 @@ export function createVibecheckServer(dependencies) {
276
276
  return {
277
277
  content: [{
278
278
  type: "text",
279
- text: `Added ${created.length} under Settings → Vibe Checks: ${presented} current, ${queued} Up next. This is asynchronous feed inventory, not an immediate request.`,
279
+ text: `Added ${created.length} under Settings → Vibe Checks: ${presented} database-current, ${queued} queued. This is asynchronous feed inventory, not verified phone display or an immediate request.`,
280
280
  }],
281
281
  structuredContent: { propositions: created },
282
282
  };
283
283
  }
284
284
  catch (error) {
285
285
  return failure(error instanceof StatementPendingError
286
- ? "Three propositions are already available. Wait for a check-in, refresh, or expiry."
286
+ ? "The database feed cannot accept those propositions within its available capacity. Check status again after a check-in, refresh, or expiry."
287
287
  : operationalFailureText("add SomaCheck propositions", error));
288
288
  }
289
289
  });
@@ -615,16 +615,19 @@ async function waitForLiveVibecheck(created, token, identity, dependencies, sign
615
615
  }
616
616
  function summarise(status) {
617
617
  const cadence = status.cadence;
618
+ if (status.propositions_needed <= 0) {
619
+ return `This connection's database feed has no available slots; ${status.queued_proposition_count} propositions are queued. Do not post another feed item. This status does not verify phone display. Routine replenishment uses a ${formatDuration(cadence.followup_within_seconds)} floor.`;
620
+ }
618
621
  if (status.first_run_intro.should_offer_now) {
619
- return `This is your first contact. Introduce the SomaCheck ritual, then create exactly ${status.propositions_needed} distinct personalized propositions.`;
622
+ return `This is your first contact. Introduce the SomaCheck ritual. The feed has up to ${status.propositions_needed} available slot${status.propositions_needed === 1 ? "" : "s"}; only if the person asks to stock reflections for later or has explicitly authorized scheduled stocking, add 1 to ${status.propositions_needed} genuinely useful proposition${status.propositions_needed === 1 ? "" : "s"}. Never invent extras to fill capacity.`;
620
623
  }
621
624
  if (status.propositions_needed > 0) {
622
625
  const requested = status.replenishment_requested_at === null
623
626
  ? ""
624
627
  : ` The person requested replenishment at ${status.replenishment_requested_at}.`;
625
- return `The cache has ${status.pending_proposition_count} of 3 propositions. Create exactly ${status.propositions_needed} distinct personalized proposition${status.propositions_needed === 1 ? "" : "s"} now.${requested}`;
628
+ return `The database feed has ${status.pending_proposition_count} of 3 propositions and up to ${status.propositions_needed} available slot${status.propositions_needed === 1 ? "" : "s"}. Only if the person asks to stock reflections for later or has explicitly authorized scheduled stocking, add 1 to ${status.propositions_needed} genuinely useful proposition${status.propositions_needed === 1 ? "" : "s"}; never invent extras to fill capacity. A still-active scheduled authorization does not require repeated consent each run. This status does not verify phone display.${requested}`;
626
629
  }
627
- return `The cache is full: one proposition is presented and ${status.queued_proposition_count} are queued. Routine replenishment uses a ${formatDuration(cadence.followup_within_seconds)} floor.`;
630
+ return "Feed capacity is unavailable. Do not post another feed item until status can be confirmed.";
628
631
  }
629
632
  function formatDuration(seconds) {
630
633
  const hours = seconds / 3600;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somacheck/vibecheck",
3
- "version": "0.6.13",
3
+ "version": "0.6.14",
4
4
  "mcpName": "io.github.Sensie-agents/vibecheck",
5
5
  "description": "Body language for AI agents, on your terms. A consented SomaCheck signal for how a thought or choice lands.",
6
6
  "repository": {
@@ -77,8 +77,8 @@ or `search_observations` (observation identifiers and representative verbatim
77
77
  snippets), and never surfaces individual feedback, source quotes, respondent
78
78
  identifiers, or free text. The agent offers two defensible interpretations of
79
79
  what the aggregate signal suggests, then one short first-person proposition
80
- about the researcher's own interpretation or next step. After the researcher's
81
- typed choice, the agent stops. There is no Chattermill write.
80
+ about the researcher's own interpretation or next step. After the researcher
81
+ explicitly indicates a choice, the agent stops. There is no Chattermill write.
82
82
 
83
83
  ## Starter prompt
84
84
 
@@ -98,7 +98,8 @@ aggregate signal suggests, with the tradeoff for each. Then offer one short
98
98
  first-person proposition about my own interpretation or next step and wait
99
99
  for my acceptance before any proactive SomaCheck ask. Treat Aligned or
100
100
  Unaligned plus confidence as context, not truth, diagnosis, authorization, or
101
- evidence about any individual customer. Ask what I choose in words. Keep the
101
+ evidence about any individual customer. Ask what I choose and accept any
102
+ explicit response available in this interface. Keep the
102
103
  proposition, reading, confidence, and my confirmation out of Chattermill. Do
103
104
  not write to Chattermill; the hosted MCP is read-only. If the preconfigured
104
105
  connection, mcp:read, or a safe aggregate tool is absent, return the copy-ready
@@ -198,9 +199,9 @@ recipe work. If the runtime does not expose `get_metrics` or
198
199
  researcher decides). `unaligned` may indicate possible inner conflict
199
200
  relative to the proposition; it does not name a cause, choose an
200
201
  interpretation, or justify a research claim.
201
- 11. **Ask for words.** Ask the researcher which interpretation they choose,
202
- whether they want a third option, or whether they want to stop. Follow
203
- their typed choice.
202
+ 11. **Return authority.** Ask the researcher which interpretation they choose,
203
+ whether they want a third option, or whether they want to stop. Accept any
204
+ explicit response available in the interface and follow their choice.
204
205
  12. **Keep the signal out of Chattermill.** Do not call any write, mutation,
205
206
  export, tag, theme, highlight, insight, or analytics tool. Do not store
206
207
  the proposition, reading, confidence, confirmation, or gesture metadata
@@ -246,8 +247,8 @@ The test passes when:
246
247
  - the researcher receives at most one optional SomaCheck check-in on their
247
248
  phone on an exact first-person proposition about their own interpretation or
248
249
  next step;
249
- - the agent presents the result as context, asks the researcher to state their
250
- choice in words, and follows the typed choice;
250
+ - the agent presents the result as context, asks the researcher to indicate
251
+ their choice explicitly, and follows that choice;
251
252
  - the agent makes no Chattermill write, mutation, export, share, tag,
252
253
  comment, or analytics call; and
253
254
  - no individual customer, respondent, or employee data enters the cross-MCP
@@ -271,7 +272,7 @@ The test passes when:
271
272
  then proceed without a reading if still unresolved.
272
273
  - **Unreadable capture:** Offer a retry only if the researcher wants it;
273
274
  unreadable is not a third interpretation.
274
- - **Researcher disagrees with the reading:** Follow the researcher's typed
275
+ - **Researcher disagrees with the reading:** Follow the researcher's explicit
275
276
  choice without reconciliation or repetition.
276
277
 
277
278
  ## Privacy boundary
@@ -306,7 +307,7 @@ The test passes when:
306
307
  - [ ] The proposition is first-person and contains no Chattermill content.
307
308
  - [ ] At most one SomaCheck request is created for the choice.
308
309
  - [ ] Observation, interpretation, confirmation, and choice remain separate.
309
- - [ ] The researcher states a choice in words and the agent follows the typed choice.
310
+ - [ ] The researcher explicitly indicates a choice and the agent follows it.
310
311
  - [ ] The agent makes no Chattermill write, mutation, export, share, tag,
311
312
  comment, or analytics call.
312
313
  - [ ] No individual customer, respondent, or employee data enters the
@@ -115,7 +115,7 @@ makes the reading an automatic write condition.
115
115
  `pending`, is `expired` or `cancelled`, or errors, continue without a result;
116
116
  do not infer one or start another request.
117
117
  8. **Return authority.** Offer the options to revise, investigate, proceed,
118
- pause, or leave the artifact unchanged. A typed researcher choice overrides
118
+ pause, or leave the artifact unchanged. An explicit researcher choice overrides
119
119
  the signal.
120
120
  9. **Keep the signal private.** Do not write the verdict, confidence, gesture,
121
121
  or confirmation to Dovetail. If the researcher asks to record a next step,
@@ -153,7 +153,7 @@ Do not trigger when:
153
153
  - the task is ordinary Dovetail retrieval, summarization, tagging, or export;
154
154
  - the proposed subject is anyone other than the researcher;
155
155
  - the source contains raw or identifiable participant material;
156
- - the researcher has already made a clear typed choice;
156
+ - the researcher has already made a clear choice;
157
157
  - the result would determine inclusion, quality, compensation, performance, or
158
158
  another consequential outcome; or
159
159
  - a vibecheck was already used for the same decision.
@@ -48,7 +48,8 @@ neutral study framings and show their exact questions. Then offer one short
48
48
  first-person proposition about my own preferred framing and wait for my
49
49
  acceptance before any proactive SomaCheck ask. Give the agent the Aligned or
50
50
  Unaligned result plus confidence as context and let it use that context with
51
- its judgment. Ask what I choose in words. Keep the proposition, reading,
51
+ its judgment. Ask what I choose and accept any explicit response available in
52
+ this interface. Keep the proposition, reading,
52
53
  confidence, and my confirmation out of Great Question. Return a signal-free,
53
54
  copy-ready research plan only. Do not create, update, delete, recruit, invite,
54
55
  message, schedule, incentivize, launch, publish, or otherwise write to Great
@@ -119,8 +120,8 @@ owner-supplied artifact.
119
120
  or Unaligned reading, and confidence. Let it combine that context with the
120
121
  conversation and its judgment. Keep observation, interpretation,
121
122
  confirmation, and choice distinct.
122
- 9. **Ask the researcher to choose in words.** Their typed answer controls what
123
- follows and may differ from the signal.
123
+ 9. **Return authority.** Ask the researcher to indicate their choice explicitly.
124
+ Their choice controls what follows and may differ from the signal.
124
125
  10. **Return a copy-ready plan.** Include only a test title, goal/purpose,
125
126
  language, and the five questions. Do not attach an incentive, consent form,
126
127
  screener, candidates, recruitment settings, or send settings.
@@ -169,7 +170,7 @@ The end-to-end test passes only when:
169
170
  - **SomaCheck unresolved:** Use the same handle once later, then proceed without
170
171
  a reading if unresolved.
171
172
  - **Unreadable capture:** Offer a retry only if the researcher wants it.
172
- - **The researcher's words differ from the reading:** Follow their typed choice
173
+ - **The researcher's choice differs from the reading:** Follow their explicit choice
173
174
  without reconciliation or repetition.
174
175
 
175
176
  ## Privacy boundary
@@ -73,7 +73,7 @@ summary (mission completion rates, time on task, success-rate aggregate,
73
73
  summary counts). It does not open transcripts, response rows, participant
74
74
  identifiers, recordings, or free-text fields. The agent offers two defensible
75
75
  interpretation framings and one short first-person proposition about the
76
- researcher's own interpretation plan. After the researcher's typed choice,
76
+ researcher's own interpretation plan. After the researcher explicitly indicates a choice,
77
77
  the agent stops. There is no Maze write.
78
78
 
79
79
  ## Starter prompt
@@ -94,7 +94,8 @@ defensible interpretation framings. Then offer one short first-person
94
94
  proposition about my own interpretation plan and wait for my acceptance
95
95
  before any proactive SomaCheck ask. Treat Aligned or Unaligned plus
96
96
  confidence as context, not truth, diagnosis, authorization, or evidence
97
- about a Maze participant. Ask what I choose in words. Keep the
97
+ about a Maze participant. Ask what I choose and accept any explicit response
98
+ available in this interface. Keep the
98
99
  proposition, reading, confidence, and my confirmation out of Maze. Do
99
100
  not create, edit, publish, delete, archive, export, share, tag, comment,
100
101
  or write to Maze, a hidden field, a webhook, or any analytics record.
@@ -192,8 +193,8 @@ read, label the Maze half untested and stop.
192
193
  decides). `unaligned` may indicate possible inner conflict relative
193
194
  to the proposition; it does not name a cause, choose an interpretation,
194
195
  or justify a research claim.
195
- 11. **Ask for words.** Ask the researcher which framing they choose, whether they
196
- want a third option, or whether they want to stop. Follow their typed
196
+ 11. **Return authority.** Ask the researcher which framing they choose, whether they
197
+ want a third option, or whether they want to stop. Follow their explicit
197
198
  choice.
198
199
  12. **Keep the signal out of Maze.** Do not call any Maze write, mutation,
199
200
  export, webhook, comment, tag, highlight, insight, analytics, or
@@ -241,8 +242,8 @@ The test passes when:
241
242
  theme, highlight, insight, automation, or write tool;
242
243
  - the researcher receives at most one optional SomaCheck check-in on their phone
243
244
  on an exact first-person proposition about their own interpretation plan;
244
- - the agent presents the result as context, asks the researcher to state their
245
- choice in words, and follows the typed choice;
245
+ - the agent presents the result as context, asks the researcher to indicate
246
+ their choice explicitly, and follows that choice;
246
247
  - the agent makes no Maze write, mutation, export, share, tag,
247
248
  comment, or analytics call; and
248
249
  - no Maze participant, respondent, or employee data enters the
@@ -271,7 +272,7 @@ The test passes when:
271
272
  later, then proceed without a reading if still unresolved.
272
273
  - **Unreadable capture:** Offer a retry only if the researcher wants it;
273
274
  unreadable is not a third interpretation.
274
- - **Researcher disagrees with the reading:** Follow the researcher's typed choice
275
+ - **Researcher disagrees with the reading:** Follow the researcher's explicit choice
275
276
  without reconciliation or repetition.
276
277
 
277
278
  ## Privacy boundary
@@ -308,8 +309,7 @@ The test passes when:
308
309
  - [ ] At most one SomaCheck request is created for the choice.
309
310
  - [ ] Observation, interpretation, confirmation, and choice remain
310
311
  separate.
311
- - [ ] The researcher states a choice in words and the agent follows the typed
312
- choice.
312
+ - [ ] The researcher explicitly indicates a choice and the agent follows it.
313
313
  - [ ] The agent makes no Maze mutation, write, export, share, tag,
314
314
  comment, or analytics call.
315
315
  - [ ] No Maze participant, respondent, or employee data enters the
@@ -124,7 +124,7 @@ automatic decision gate.
124
124
  proceed to separate review, pause, or leave unchanged. Do not call
125
125
  `create_filter_set`, `create_study`, or `publish_study`. If the researcher
126
126
  chooses a change, produce a reviewable draft outside Prolific; platform
127
- mutation is a new action requiring explicit instruction. A typed researcher
127
+ mutation is a new action requiring explicit instruction. An explicit researcher
128
128
  choice overrides the signal.
129
129
  10. **Keep the signal private.** Do not write the verdict, confidence, gesture,
130
130
  confirmation, or inferred meaning to Prolific or another research platform.
@@ -161,7 +161,7 @@ Do not trigger when:
161
161
  - the proposed subject is a participant, employee, cohort, or respondent;
162
162
  - the result would affect eligibility, filtering, payment, bonus, rejection,
163
163
  submission quality, authenticity, or performance;
164
- - the researcher has already made a clear typed choice;
164
+ - the researcher has already made a clear choice;
165
165
  - the agent is being asked to publish, gate, or automate a launch; or
166
166
  - a vibecheck was already used for the same decision.
167
167
 
@@ -26,7 +26,8 @@ about a respondent, or a research decision. The researcher remains the authority
26
26
 
27
27
  The researcher supplies a participant-free survey goal. The agent drafts two
28
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
29
+ own preferred direction. The researcher then explicitly indicates a choice.
30
+ The output is a
30
31
  signal-free survey definition for a QuestionPro owner to review. This recipe
31
32
  does not create, publish, distribute, or populate a survey.
32
33
 
@@ -43,7 +44,8 @@ upgrade, buy a plan, administer access, or populate QuestionPro data. Propose tw
43
44
  questionnaire framings and show the exact questions. Then offer one short
44
45
  first-person proposition about my own preferred direction and wait for my
45
46
  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
+ the agent as context and let it use its judgment. Ask what I choose and accept
48
+ any explicit response available in this interface.
47
49
  Keep the proposition, reading, confidence, and confirmation out of QuestionPro.
48
50
  Return a copy-ready, signal-free survey definition only. Do not create, edit,
49
51
  send, distribute, publish, recruit, launch, access responses, or spend anything.
@@ -77,7 +79,8 @@ send, distribute, publish, recruit, launch, access responses, or spend anything.
77
79
  6. Give the proposition, Aligned or Unaligned result, and confidence to the
78
80
  agent. Let the agent use its judgment in context without treating the result
79
81
  as authorization or a claim about respondents.
80
- 7. Ask what the researcher chooses in words. Their choice controls the plan.
82
+ 7. Ask the researcher to indicate their choice explicitly. Their choice controls
83
+ the plan.
81
84
  8. Return a copy-ready payload with title, purpose, questions, answer choices,
82
85
  and optional logic. Exclude all SomaCheck data and platform identifiers.
83
86
  9. Stop before any QuestionPro data or action call. A partner owner may review
@@ -115,8 +115,8 @@ Typeform write or launch condition.
115
115
  `pending`, is `expired` or `cancelled`, or errors, continue without a result;
116
116
  do not infer one or start another request.
117
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.
118
+ wording, add an answer option, pilot, proceed, pause, or leave unchanged. An
119
+ explicit researcher choice overrides the signal.
120
120
  9. **Keep the signal private.** Do not write the verdict, confidence, gesture,
121
121
  or confirmation to Typeform. If the researcher asks for a Typeform edit,
122
122
  show the exact signal-free edit first and call the Typeform write tool only
@@ -159,7 +159,7 @@ Do not trigger when:
159
159
  free-text answers;
160
160
  - the result would affect eligibility, payment, employment, grading, access,
161
161
  support priority, response quality, or survey validity;
162
- - the researcher has already made a clear typed choice;
162
+ - the researcher has already made a clear choice;
163
163
  - the researcher has declined a recent offer or opted out; or
164
164
  - a vibecheck was already used for the same decision.
165
165
 
@@ -57,7 +57,8 @@ gates.
57
57
 
58
58
  The researcher gives the agent a participant-free study idea. The agent drafts
59
59
  two neutral framings, offers one first-person SomaCheck check-in about the
60
- researcher's own direction, and asks what they choose in words. The agent
60
+ researcher's own direction, and accepts any explicit response available in the
61
+ interface. The agent
61
62
  returns a complete copy-ready payload and stops. User Interviews remains
62
63
  unchanged. Any later draft creation is a separate future recipe and review, not
63
64
  an optional branch of this one.
@@ -79,7 +80,8 @@ Propose two neutral study framings and show the exact
79
80
  signal-free project copy. Then offer one short first-person proposition about
80
81
  my own preferred direction and ask for one SomaCheck check-in on that exact
81
82
  wording. Keep the proposition, reading, confidence, and my confirmation out of
82
- User Interviews. Afterward ask what I choose in words. Return the complete
83
+ User Interviews. Afterward ask what I choose and accept any explicit response
84
+ available in this interface. Return the complete
83
85
  signal-free, copy-ready project payload only. Do not create, edit, recruit,
84
86
  invite, message, schedule, screen, launch, publish, attach incentives, spend,
85
87
  read participant data, or call a broader or undocumented tool.
@@ -152,14 +154,14 @@ tools, stop without calling it.
152
154
  8. **Return authority.** Separate observation, interpretation (`aligned` or
153
155
  `unaligned` plus confidence), confirmation, and choice. `unaligned` may
154
156
  indicate possible inner conflict relative to the proposition; it does not
155
- identify a cause or select a study design. The researcher's typed choice
157
+ identify a cause or select a study design. The researcher's explicit choice
156
158
  controls.
157
159
  9. **Prepare the exact payload.** Show title, purpose, study type, questions or
158
160
  tasks, and any required non-contact fields. Exclude the proposition, result,
159
161
  confidence, confirmation, SomaCheck wording, participant metadata, and
160
162
  hidden fields.
161
163
  10. **Stop before every platform call.** The SomaCheck reading and the
162
- researcher's typed choice are not approval to use User Interviews. Do not
164
+ researcher's explicit choice are not approval to use User Interviews. Do not
163
165
  call create, update,
164
166
  read-back, recruitment, messaging, scheduling, participant, incentive,
165
167
  launch, publish, or data tools.
@@ -188,8 +190,8 @@ Not allowed:
188
190
  The test passes when:
189
191
 
190
192
  - the researcher receives at most one live SomaCheck request on their phone;
191
- - the agent presents the result as context and asks the researcher for their
192
- typed choice;
193
+ - the agent presents the result as context and asks the researcher to indicate
194
+ their choice explicitly;
193
195
  - the agent returns the exact signal-free, copy-ready project payload;
194
196
  - no User Interviews data or action tool is invoked and the workspace remains
195
197
  unchanged; and
@@ -212,7 +214,7 @@ The test passes when:
212
214
  proceed without a reading if unresolved.
213
215
  - **Unreadable capture:** Offer a retry only if the researcher wants it;
214
216
  unreadable is not a third interpretation.
215
- - **Researcher disagrees with the reading:** Follow the researcher's typed
217
+ - **Researcher disagrees with the reading:** Follow the researcher's explicit
216
218
  choice without reconciliation or repetition.
217
219
 
218
220
  ## Privacy boundary