Product design skills

references/cookiy/cookiy-study-guide.md

A supporting file of the user-research-cookiy skill.

Cookiy — Study Guide Operations

Commands for retrieving, uploading media to, and updating discussion/interview guides.


CLI Commands

study guide get

Get the full discussion/interview guide. Returns JSON — convert it to a human-readable format before showing to the user.

scripts/cookiy.sh study guide get --study-id <uuid>

study guide wait

Wait until the discussion/interview guide has been generated for the study.

scripts/cookiy.sh study guide wait --study-id <uuid>

study guide update

Partially update (patch) the discussion/interview guide. The patch is merged into the JSON returned by study guide get.

scripts/cookiy.sh study guide update --study-id <uuid> --base-revision <s> --idempotency-key <s> [--change-message <s>] --json '<patch>'
FlagRequiredPurpose
--base-revisionyesThe revision field from the study guide get response
--idempotency-keyyesClient-generated unique key (generate one yourself)
--change-messagenoHuman-readable description of the change
--jsonyesIncremental patch JSON to merge into the original. See patch guide below.

JSON Patch Guide

Core Idea

A patch is a partial JSON object merged into the original:

  • Provided keys are updated / overwritten
  • Missing keys are unchanged

Updating Nested Fields

Standard:

{
  "research_overview": {
    "interview_topic": "Updated Topic"
  }
}

Dot notation (auto-expanded):

{
  "research_overview.interview_topic": "Updated Topic"
}

Arrays — Important

  • Arrays are fully replaced, not merged. There is no automatic append.
  • To modify an array: read the existing array, modify it in memory, then submit the full updated array in the patch.

Example

Original:

{
  "interview_flow": {
    "sections": [
      {
        "description": "Warm-up",
        "question_list": [
          { "question": "Q1", "type": "free_response", "followups": [], "media": [] }
        ]
      }
    ]
  }
}

Correct — append Q2 (send full array):

{
  "interview_flow": {
    "sections": [
      {
        "description": "Warm-up",
        "question_list": [
          { "question": "Q1", "type": "free_response", "followups": [], "media": [] },
          { "question": "Q2 New", "type": "free_response", "followups": [], "media": [] }
        ]
      }
    ]
  }
}

Wrong — overwrites the array with only Q2:

{
  "question_list": [
    { "question": "Q2 New", "type": "free_response", "followups": [], "media": [] }
  ]
}

Rules Summary

Merge objects, replace arrays.

  • Use partial objects for updates
  • Dot notation is supported
  • Arrays are replace-only — always send the full array when modifying

On this page