Skip to content
Studio previewSelf-host Studio locally.Run it

Version and test prompts

Updated 1 day ago • October 10, 2026

Open Prompt Management → Prompts to create prompts. Each prompt has a stable key, a display name, immutable versions, a shared draft, and a promoted live version, and optional version tags. Renaming or moving a prompt never changes the key used by your application.

Each library row has an actions menu at the right edge, including rename, move, code helper, promotion policy and archive/restore. Rename, move and code helper open in modals. Archive and restore require confirmation, including bulk actions; restoring preserves versions without making them live or assigning tags.

The editor shows system and user messages directly. Add message adds another message with an explicit role for conversation examples. Messages are sent in the order shown; additional messages require a chat application contract. Declare template inputs in the input JSON Schema and reference them with {{message}} or dotted paths such as {{customer.name}}. The application supplies these values at runtime.

Configuration stores values returned as prompt.config, such as a model alias or temperature. These values are validated against the configuration schema and the application's registered contract. Configuration is never substituted into messages. Keep credentials in the application's secret store.

Configuration and both schemas use a JSON code editor with syntax highlighting, line numbers, folding, bracket matching, automatic indentation and error markers. Format applies two-space indentation without changing values. Undo and redo work inside each editor; Tab moves to the next field. Invalid JSON stays visible for correction and blocks saving. Saved versions keep syntax coloring in read-only mode.

Include another prompt

Type # or choose Include prompt inside a message. Search by name or key; append @v9 to select an exact version or @Latest to select the newest saved version. The violet reference chip shows the selected name and exact version. Latest is resolved when selected, so the saved parent retains the version reviewed and tested even after the included prompt changes.

An inclusion brings the matching message text: a system field includes system messages, and a user field includes user messages. Multiple matching messages join with a blank line. References can be nested. The editor imports input declarations; your application contract and runtime values must include those inputs. Configuration stays with the parent prompt.

The immutable dependency manifest records every selected key, version, and hash. Serving and evals expand from the same frozen snapshot, and included prompts have actual-use receipts and linked model runs. Missing versions, conflicting pins, cycles, incompatible message roles, and oversized expansions are rejected. Export/import and CLI migration include the dependency closure and rewrite reference keys when renaming prompts at the destination.

Template inputs such as {{message}} are blue; prompt inclusions are violet. The editor preserves plain prompt text and line breaks when pasting or saving.

Review and save

Saved versions are read-only. + New version creates a draft from the newest saved version, including messages, configuration, schemas and prompt references. If a draft already exists, Open draft resumes it.

The Draft entry stays at the top of version history until saved or deleted. You can browse saved versions and other tabs, then return to the draft. Valid changes autosave and are flushed when leaving the prompt. Invalid JSON remains in the mounted editor while browsing versions and tabs.

Save version opens the same diff dialog used by Compare: removed content is red, added content is green, and desktop views align both versions. The diff compares the draft against its recorded base version. Change notes are optional by default. Enable Require a change note when saving a new version in that prompt’s promotion policy to require them in Studio, the API and CLI. This applies to future saves and does not change existing versions. Accepting creates a new immutable version and removes the draft entry. A changed base or draft revision causes a conflict instead of silently replacing content.

Use Delete draft in the actions menu to remove the draft after confirmation. Saved versions, live and optional tags stay unchanged. A newer draft saved by another editor cannot be deleted using an outdated revision.

Messages, configuration, format, contracts, and exact dependencies contribute to the executable hash. A note-only change cannot create another executable version. Concurrent changes to the head, draft, or assignment are rejected; your local draft remains available for recovery. Retrying an accepted save with the same idempotency key does not create another version.

Version reviews

Open a prompt, select a version, and choose Reviews to see its saved notes, reviewers, timestamps, and independent-review status. Review this version opens a modal from the tab or the version menu. After submitting, Studio opens that version’s Reviews tab. Submitting another review as the same reviewer updates the existing note for that version. Reviews of other versions stay separate.

Independent human reviews can satisfy promotion requirements. Notes from the version’s author or an API key remain visible but do not count as independent.

Categories and test groups

Categories organize the library. On smaller screens, use the categories control on the left to open the category tree. Selecting a category closes the panel. New category accepts paths such as Canvas/Testing, creating Testing under Canvas. Parents collapse independently. Category actions rename, move, or delete the category. Deleting a category requires choosing Root or a surviving category for every prompt in its subtree.

Test groups are secondary collections of exact prompt versions. Open Groups, name a group, and add versions from the prompt history or group drawer. A group contains one version per prompt; replacing that selection requires an explicit choice. Removing a prompt from a group and deleting a group require confirmation. Both preserve prompts, versions, and saved eval evidence.

A group does not own or save a suite. Run suite opens the normal eval drawer, where you choose an application, suite, individual test checkboxes, judge, and attempts. The optional prompt selection chooses live versions, one candidate version, or a test group for this launch. You can test a single candidate without creating a group.

Evidence and promotion

The consumer application's createPrompts registration advertises its contracts through createEvals. Studio freezes all registered prompt versions, replacing the selected candidates, and validates configuration before starting the run. Companion prompts and exact dependencies remain part of that snapshot.

Evals on a prompt shows the saved run, selected version, full-suite status, and actual-use verification. A selection alone is not proof: useReason({ prompt }) records the version and hash actually passed to the model. Unused or mismatched versions cannot satisfy a promotion policy. Runs shows executions that reported this version, with model-call provenance linked by key, version, hash, environment, and source. Captured message content follows the application's existing telemetry capture policy; configuration and runtime inputs are not added to identity metadata.

Both tabs use the standard Runs and Evals tables, filling the available tab area. Search, status filters, sorting, column controls, and pagination work within the selected version. All tabs share the same version history: a collapsible sidebar on wide surfaces and a dropdown beside the tabs in narrow drawers or mobile layouts. Drawer and expanded views share one compact header. Expand changes to Back in expanded view; secondary actions move into the prompt menu when space is limited. Multiple calls in one execution produce one run row; suites launched together produce one evaluation row, retaining their prompt-usage evidence.

Make this live is the first action in each version menu. It opens a modal labelled Promote version for a newer version or Roll back version for an older version, relative to the current live version. Review the exact version, readiness checks, and release impact, then confirm with Promote or Roll back in that same modal. There is no second confirmation dialog or environment selector: live belongs to this prompt in this project.

Saving a candidate never moves live. Rolling back moves live to an older immutable version; Newest version still shows the most recently saved version. New executions resolve live by default, while executions holding a snapshot retain it.

Manage tags adds or removes optional version tags such as staging or development. Each tag points to one version of a prompt. Moving or removing an existing tag requires confirmation because applications may request it. Tags do not promote a version, and promotion never moves optional tags. The reserved live tag can only move through promotion or rollback. Tag names use lowercase letters, numbers, hyphens and underscores, up to 64 characters. Tags are scoped to the project and do not create application environments or copy prompts between projects or deployments.

Promotion policies can require a passing full suite, specific application/suite selections, and independent human reviews. Evidence must use the exact version and its companion versions must still match current live versions. Each policy applies to all versions of one prompt; changing it does not affect other prompts. API-key reviews are audited but do not count as independent human reviews. The modal explains unmet requirements before submission. When allowed by policy, an explicit exception requires a non-blank reason and is recorded in Activity. Test a candidate before the first promotion, or use that reviewed exception path to bootstrap live. Open Promotion policy from a prompt’s row actions or detail actions. It opens one modal; the table action keeps you on the list. Save policy confirms the changes and records them in that prompt’s Activity. Cancel closes the modal without saving.

Connect an application

Follow Studio prompt SDK integration. The prompt's Code helper includes its real contracts and version pin. Use a server-side key with prompt:serve; editing and promotion use separate Studio permissions. Prompt management is enabled by default in local Studio bootstrap; no extra flag is needed. Set KORTYX_STUDIO_ENABLE_PROMPTS=0 to opt out of granting prompt permissions to the local keys. Existing installations should rerun bootstrap with their existing keys to apply these permissions. Eval execution additionally needs KORTYX_STUDIO_ENABLE_EVALS=1 and a registered consumer target.

See Migrate prompts between deployments for CLI authoring and staging-to-production migration.

Bulk management and import

Select up to 100 library rows to move prompts, select their exact latest versions for a test group, export a bundle, or archive unassigned prompts. Category and archive batches are atomic: a stale revision rejects the entire batch. Assigned prompts remain protected from archive.

Import accepts portable JSON bundles exported by Studio or the CLI. Review conflict handling, destination keys, category paths, and optional test groups, then review the source-to-destination version mapping and hashes. Apply saves candidate versions and reads each hash back. Save the plan to retry through the CLI after a lost response. Import never changes live or optional tags. Bundles support up to 200 immutable versions and a 20 MiB transfer request; individual prompt mutations are limited to 1 MiB.

Promotion checks the current application suite revision as well as exact prompt usage, companion versions, required suites, and reviews. A previous pass from an older suite definition is historical evidence and does not satisfy the current promotion gate.