> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ishlabs.io/llms.txt
> Use this file to discover all available pages before exploring further.

# study create

> Command reference: ish study create.

## `ish study create`

Create a new study (the persistent shape: modality, tasks, questionnaire). Optionally creates iteration A inline when --content-text, --url, --image-urls, --content-url, or --endpoint is passed.

Usage: `ish study create [options]`

### Options

<ParamField path="--workspace <id>" type="string">Workspace ID</ParamField>
<ParamField path="--name <name>" type="string">Study name Required.</ParamField>
<ParamField path="--description <description>" type="string">Study description</ParamField>
<ParamField path="--modality <modality>" type="string">Study modality (interactive, video, audio, text, image, document, chat)</ParamField>
<ParamField path="--content-type <type>" type="string">Content type (per-modality enum - see 'Content types by modality' below). Changes how --title is presented to participants (e.g. content-type email renders --title as the Subject: line). Not used for interactive / chat.</ParamField>
<ParamField path="--assignment <name:instructions>" type="string">Assignment as 'Name:Instructions' (repeatable) Default: \[].</ParamField>
<ParamField path="--assignments-file <path>" type="string">JSON file with assignments array</ParamField>
<ParamField path="--assignments <json>" type="string">Inline JSON array of assignments (escape hatch)</ParamField>
<ParamField path="--question <text>" type="string">Add a text question to the questionnaire (repeatable; type=text, timing=after) Default: \[].</ParamField>
<ParamField path="--questionnaire <json|@file|path>" type="string">Questionnaire as inline JSON array, @file, or a JSON file path - supports text, slider, likert, single-choice, multiple-choice, number; timing=before|after</ParamField>
<ParamField path="--content-text <text>" type="string">Text content to evaluate, or @filepath to read from file. Creates iteration A inline (text modality only)</ParamField>
<ParamField path="--url <url>" type="string">URL to test. Creates iteration A inline (interactive modality only)</ParamField>
<ParamField path="--screen-format <format>" type="string">Screen format for interactive iterations: desktop (default) or mobile\_portrait (hyphen/underscore variants accepted)</ParamField>
<ParamField path="--content-url <url>" type="string">Public URL of the media file. Creates iteration A inline (video, audio, document modalities). For local files, use the 2-step `iteration create` flow.</ParamField>
<ParamField path="--image-urls <urls>" type="string">Comma-separated public image URLs. Creates iteration A inline (image modality). For local files, use the 2-step `iteration create` flow.</ParamField>
<ParamField path="--title <title>" type="string">Participant-facing content title - the headline participants read before the body (text + media modalities - image, video, audio, document; optional). With --content-type email it becomes the email Subject: line. Not an internal label. Not used for interactive / chat.</ParamField>
<ParamField path="--segmentation-json <json>" type="string">Segmentation JSON for the inline iteration A - time\_based \{intervals\_seconds, labels?}, section\_based \{sections\[\{name,label,...}]}, or page\_based \{} (text + media). section\_based sections are SEMANTIC: group related paragraphs into a few coherent sections (a long article is usually 3-6 sections, not one per paragraph). Lets one `study create` build a complete segmented iteration - no separate `iteration create` needed.</ParamField>
<ParamField path="--content-config-json <json>" type="string">Content-config JSON for the inline iteration A (early\_termination, selected\_segment\_indices) - text + media.</ParamField>
<ParamField path="--content-html <html>" type="string">HTML version of the text, or @filepath - text modality (email rendering)</ParamField>
<ParamField path="--sender-name <name>" type="string">Email 'From' display name - text modality (email rendering)</ParamField>
<ParamField path="--sender-email <email>" type="string">Email sender address - text modality (email rendering)</ParamField>
<ParamField path="--featured-image-url <url>" type="string">Hero image URL - text modality (email rendering)</ParamField>
<ParamField path="--endpoint <id>" type="string">Saved chatbot endpoint id or alias. Creates iteration A inline (chat modality, external\_chatbot mode)</ParamField>
<ParamField path="--endpoint-config <file>" type="string">ChatbotEndpointConfig JSON file (or `-` for stdin); embedded directly. Mutually exclusive with --endpoint (chat modality, external\_chatbot mode)</ParamField>
<ParamField path="--max-turns <n>" type="string">Maximum conversation turns per participant (chat modality only; default 12)</ParamField>
<ParamField path="--chat-mode <mode>" type="string">Chat mode: external\_chatbot (default) or participant\_pair (two AI groups talk to each other) - chat modality only</ParamField>
<ParamField path="--group-a <ids>" type="string">Person IDs/aliases for group A (comma-separated or repeatable). Pass a single profile and N on --group-b to broadcast (1×N rehearsal: fix side A, vary side B) - chat participant\_pair mode Default: \[].</ParamField>
<ParamField path="--group-b <ids>" type="string">Person IDs/aliases for group B. When both sides are explicit they must be equal length, BUT if either side is a singleton it's auto-broadcast to match the other (1×N rehearsal) - chat participant\_pair mode Default: \[].</ParamField>
<ParamField path="--scenario-a <text-or-@file>" type="string">Side-A scenario + goal - chat participant\_pair mode</ParamField>
<ParamField path="--scenario-b <text-or-@file>" type="string">Side-B scenario + goal - chat participant\_pair mode</ParamField>
<ParamField path="--initiator-side <a|b>" type="string">Which side speaks first (default: a) - chat participant\_pair mode</ParamField>
<ParamField path="--role-criteria-a <json-or-@file>" type="string">RoleCriteria filter for side A (JSON object or @filepath). Keys: occupation\[], min\_age, max\_age, gender\[], country\[], education\_level\_in\[], household\_in\[], locale\_type\_in\[], income\_level\_in\[], employment\_status\_in\[], requires\_captions, uses\_screen\_reader, prefers\_reduced\_motion, prefers\_high\_contrast, has\_any\_accessibility\_need. The five \*\_in arrays accept snake\_case spec values; the five accessibility filters are booleans. Use INSTEAD of --group-a or alongside it. chat participant\_pair mode.</ParamField>
<ParamField path="--role-criteria-b <json-or-@file>" type="string">RoleCriteria filter for side B - same shape as --role-criteria-a. chat participant\_pair mode.</ParamField>

## Global flags

Every command accepts the global flags.

<ParamField path="-V, --version" type="boolean">output the version number</ParamField>
<ParamField path="-t, --token <token>" type="string">Auth token (or set ISH\_TOKEN env var)</ParamField>
<ParamField path="--token-file <path>" type="string">Read auth token from a file (preferred over --token / ISH\_TOKEN)</ParamField>
<ParamField path="--workspace <id>" type="string">Default workspace ID; per-subcommand --workspace overrides</ParamField>
<ParamField path="--json" type="boolean">Output as JSON (auto-enabled when piped)</ParamField>
<ParamField path="--get <field>" type="string">Extract a single field from the JSON response and print only its value (implies --json internally; supports dotted paths e.g. person.name)</ParamField>
<ParamField path="--human" type="boolean">Force human-readable output even when stdout is piped (overrides JSON-when-piped auto-detection)</ParamField>
<ParamField path="--fields <fields>" type="string">Comma-separated fields to include in JSON output (e.g. alias,name,status)</ParamField>
<ParamField path="--verbose" type="boolean">Include full UUIDs and timestamps in JSON output</ParamField>
<ParamField path="--no-color" type="boolean">Disable colored output (also honored: NO\_COLOR env var)</ParamField>
<ParamField path="-q, --quiet" type="boolean">Suppress progress messages on stderr (no-op for read commands that emit none)</ParamField>
