1. What Is Dyph?
Dyph is a web-based workspace for building, testing, and iterating on prompts for large language models (LLMs). Instead of maintaining prompts in text files or copy-pasting between tools, Dyph lets you organise your instructions as modular building blocks, test variations, run generations against an LLM, and keep a searchable history of every result.
The core workflow is:
- Build a system prompt from named blocks, each with up to 9 text variations.
- Add a user prompt (the specific question or task for the current run).
- Choose your model and set parameters, then click Run.
- Review the response in the Output column alongside previous generations.
- Save winning configurations as Snapshots to recall them later.
Dyph is completely free and always will be. No subscription, no usage credits, no ads. Instead of asking for money, Dyph asks users to consider helping Ukrainian humanitarian organisations via the Help Ukraine page.
2. Getting Started
2.1 Sign Up & Log In
Open Dyph in your browser. Create an account with your email and a password. Once logged in you will see the main Projects screen.
2.2 Add an API Key
Dyph calls LLMs on your behalf using your own API key. You must add a key before you can run any generation.
Click Settings in the left sidebar.
Click Credentials.
Find the provider row (currently OpenAI) and click View.
Paste your API key into the field and click Save Api Key.
Your key is stored securely and used only for outbound API calls from your account. Never share it publicly.
To replace a key, open the same dialog and paste the new key β it will overwrite the previous one. To remove it entirely, click Delete.
2.3 Create Your First Project
A project is your main working container. All prompt blocks, run history, and snapshots belong to a project.
Click New Project in the left sidebar.
Enter a Name and an optional Description.
Click Create. You are taken directly to the project workspace.
To return to the list of all projects later, click Projects in the left sidebar or use the home icon inside the workspace.
3. Project Workspace Overview
The workspace is divided into three columns separated by vertical dividers. Understanding what each column does is the foundation for using Dyph effectively.
| Column | Purpose | Key elements |
|---|---|---|
| Left | System Prompt Builder | Prompt blocks, block variations (1β9), User Prompt field, Preview |
| Centre | Output history | List of past generations, response text, Details button |
| Right | Parameters & Snapshots | Model selector, generation settings, saved configurations |
3.1 Header Bar
Running across the top of the workspace:
| Element | What it does |
|---|---|
| Project name | Shows which project is open. Click the home icon to go back to the projects list. |
| Save Snapshot | Opens a dialog to save the current prompt blocks + model parameters as a named snapshot. |
| Run | Assembles the final prompt from enabled blocks and the user prompt, sends it to the model, and adds the result to the Output column. |
| Settings icon | Opens project-level settings. |
| Home icon | Returns to the projects list. |
4. Building Your System Prompt
The left column is where you design the instructions that govern how the model behaves across all runs in this project. The system prompt is assembled automatically from the blocks you have enabled, in the order they appear.
4.1 How Blocks Work
A block is a named card containing one piece of your system prompt β for example "Tone", "Output Format", or "Domain Rules". You can have as many blocks as you need.
When you click Run, Dyph collects all enabled blocks top to bottom, takes the text from the currently selected variation of each block, and joins them with a blank line to form the system prompt sent to the API. Disabled blocks are skipped entirely.
Think of blocks as paragraphs or sections of a document. The order of blocks is the order of the paragraphs the model receives.
4.2 Adding and Removing Blocks
To add a block, click the + button at the bottom of the block list. A new empty block named "New Block" is added to the end.
To delete a block, click the trash icon in the lower-right corner of that block's card. Deletion is immediate and cannot be undone from the UI.
4.3 Anatomy of a Block
| Element | How to use it |
|---|---|
| Play icon (toggle) | Click to enable or disable the block. A disabled block is visually faded and is excluded from the assembled system prompt. You can re-enable it at any time. |
| Block name | Click and type to rename. Names are for your reference only β they do not appear in the prompt sent to the model. |
| Up / Down arrows | Move the block one position up or down in the list. This directly changes the order of the assembled system prompt. |
| Text area | Write the prompt text for the currently selected variation. Changes auto-save after roughly 2 seconds of inactivity β no save button required. |
| Variation tabs 1β9 | Each number stores a separate text for this block. Click a number to switch to that variant. Only the currently selected variant is included in the assembled prompt. |
| Trash icon | Deletes the entire block including all 9 variation texts. |
4.4 Using Variations (1β9)
Each block has nine independent text slots. This is one of Dyph's most useful features for iterative prompt work:
- Variation 1 might be your baseline instruction.
- Variation 2 could be a more concise rewrite.
- Variation 3 could try a different framing.
To test variation 2 instead of variation 1, click the "2" tab in the block β the text area switches content immediately. Click Run. Compare the output in the centre column against the previous run with variation 1.
Texts in all nine slots are saved independently. Switching tabs never overwrites another slot.
Variations let you run A/B tests on specific parts of your prompt without duplicating entire block cards or manually copying text back and forth.
4.5 Enabling and Disabling Blocks
Click the play icon on a block to toggle it off. Use this when you want to temporarily remove an instruction from the prompt without deleting the text. The card stays in the list (so you can re-enable it later) but its content is not included in the next Run.
Disabled blocks are visually distinguished by a faded appearance β text, icons, and the block name all appear in a muted tone.
4.6 Reordering Blocks
The order of blocks from top to bottom is the order the text appears in the assembled system prompt. Use the up and down arrows on each block to reposition it. The first block in the list forms the first paragraph of the system prompt.
4.7 The User Prompt
Below the block list and the + button is the User Prompt section. This is where you write the specific question, task, or input for this particular Run.
- System prompt blocks contain stable rules and roles that apply to every Run.
- The User Prompt contains the per-run instruction or data.
Both are sent to the model when you click Run, but they are kept separate in the UI to reflect how the API treats them. The user prompt also appears in Preview so you can review everything together before running.
4.8 Preview
The Preview button is in the top-right of the left column. Clicking it opens a panel that shows:
- The assembled system prompt β exactly the text that will be sent as the system instruction, built from the currently enabled blocks in order, using the selected variation of each.
- The current User Prompt text below it, separated by a blank line.
Preview is read-only. Use it to sanity-check what the model will actually receive before clicking Run, especially after reordering blocks or switching variations. Close it with the X icon; an additional copy icon copies the full text to your clipboard.
Always use Preview before an important Run. It eliminates surprises from accidentally disabled blocks or forgotten variation switches.
5. Running a Generation
5.1 What Happens When You Click Run
Clicking the Run button in the header triggers the following steps:
- Dyph assembles the system prompt from all enabled blocks (top to bottom, selected variation of each, joined by blank lines).
- The user prompt is added as the user-role message.
- The assembled request is sent to the selected model using the API key stored in your credentials.
- When the model responds, the response text and all metadata (full prompt, parameters, tokens) are saved to this project.
- The new result appears at the top of the Output column.
If you have not added an API key in Settings β Credentials, the Run will fail. Make sure a valid key is stored first.
5.2 Empty and Disabled Blocks
If an enabled block has an empty text in its selected variation slot, that block contributes nothing to the system prompt (it is skipped silently). If all blocks are disabled or empty, the system prompt will be empty.
This is not an error β Dyph will still send the run with whatever is present. Use Preview if you are unsure what will be sent.
6. The Output Column
6.1 Output Feed
The centre column shows a reverse-chronological list of all generations for the current project (newest first, up to 25 entries). Each entry shows:
- The timestamp of when the generation was run.
- The full response text from the model.
- A Details button.
You can read responses directly in the feed without opening any dialogs. Scroll down the column to see older runs.
6.2 Generation Details
Clicking Details on any entry opens a modal with two panels:
| Panel | Contents |
|---|---|
| Left β Full Prompt | The complete text that was sent to the model for this run: system prompt and user prompt combined exactly as submitted. Scrollable if long. |
| Right β Parameters | Provider, model name, Max Output Tokens, and the model-specific settings used (Reasoning Effort, Verbosity, Temperature, Top P, penalties, Seed, JSON Mode). |
This is useful for reproducing or debugging a specific result: you can see exactly what was sent and under what settings.
7. Model Parameters
The right column controls how the API call is made. All settings here are applied to the next Run.
7.1 Choosing a Model
At the top of the Parameters column is a button showing the currently selected model. Click it to open the LLM selector panel, which slides in from the right. Click a model name to select it β Dyph immediately applies default parameter values appropriate for that model. The panel closes when you click Save.
Currently available provider: OpenAI. Available models:
| Family | Models | Notes |
|---|---|---|
| GPT-5 series | gpt-5.2, gpt-5.2-pro, gpt-5.1, gpt-5-mini, gpt-5-nano, gpt-5-pro | Support Reasoning Effort and Verbosity settings. |
| GPT-4o series | gpt-4o, gpt-4o-mini | Support Temperature, Top P, Frequency Penalty, Presence Penalty. |
| Reasoning models | o3-pro, o4-mini | Support Reasoning Effort. o4-mini defaults to 50,000 output tokens. |
7.2 Parameter Reference
| Parameter | Applies to | Description |
|---|---|---|
| Max Output Tokens | All models | Maximum number of tokens the model can produce in its response. Dyph enforces a per-model ceiling (e.g., 16,384 for gpt-4o; 128,000 for most GPT-5 models; 272,000 for gpt-5-pro). The value is capped automatically if you enter a number above the limit. |
| Reasoning Effort | GPT-5 family, o3-pro, o4-mini | Controls how much internal reasoning the model does before answering. Levels: none, minimal, low, medium, high, xhigh. Higher effort produces more thorough but slower and potentially more expensive responses. Adjusted with the β / + buttons. |
| Verbosity | GPT-5.2, 5.2-pro, 5.1, 5-mini, 5-nano, 5-pro | Controls how expansive the model's response is. Levels: low, medium, high. Adjusted with the β / + buttons. |
| Temperature | gpt-4o, gpt-4o-mini | Randomness of the output. Range 0.0β2.0, step 0.1. Lower values produce more deterministic responses; higher values produce more varied ones. |
| Top P | gpt-4o, gpt-4o-mini | Nucleus sampling. Range 0.0β1.0, step 0.1. Typically left at 1 unless you have a specific reason to change it. |
| Frequency Penalty | gpt-4o, gpt-4o-mini | Reduces likelihood of the model repeating the same tokens. Range 0.0β2.0. |
| Presence Penalty | gpt-4o, gpt-4o-mini | Increases likelihood of the model introducing new topics. Range 0.0β2.0. |
| Seed | All models | Integer that seeds the random number generator for more reproducible outputs. Adjust with β / +. A seed of 0 means no fixed seed. |
| JSON Mode | All models | Toggle on to instruct the model to return a valid JSON object. Your user prompt must also ask for JSON output, otherwise the model may error. Toggle off for free-form text responses. |
Parameters only apply to the current project and are not shared across projects. Each project keeps its own parameter state.
8. Snapshots
A snapshot is a saved copy of the entire project configuration at a point in time: all prompt blocks (names, texts, enabled states, selected variations) plus all model parameters. Snapshots let you switch between named configurations instantly.
8.1 Saving a Snapshot
Configure your blocks and parameters as desired.
Click Save Snapshot in the header bar.
Enter a Name (required) and an optional Description.
Click Save. The snapshot appears in the Snapshots list at the bottom of the right column.
8.2 Restoring a Snapshot
Click the name of any snapshot in the Snapshots list. Dyph will:
- Clear the current block list.
- Load the saved blocks with their texts, enabled states, and selected variations.
- Apply the saved model parameters (provider, model, tokens, temperature, etc.).
Restoring a snapshot immediately replaces your current blocks and parameters. If your current setup is unsaved, save it as a new snapshot first.
8.3 Editing Snapshot Metadata
To rename a snapshot or update its description, click the bookmark icon to the left of the snapshot name. A dialog opens with the current name and description fields. Edit and save. This does not change the saved prompt or parameter data.
8.4 When to Use Snapshots
- Preserving a configuration that works well before experimenting further.
- Maintaining multiple named setups for different use cases within the same project (e.g., "Formal English", "Debug JSON", "Brainstorm Mode").
- Rolling back to a previous state if a round of edits made things worse.
9. App Settings
Click Settings in the left sidebar to access three sub-sections.
9.1 Account
- Name β Change the display name associated with your account. Click Save to apply.
- Change Password β Opens the password change flow.
- Log Out β Signs you out immediately.
9.2 Theme
Choose between Light, Dark, or System (follows your operating system's preference). The change applies immediately across the entire app.
9.3 Credentials
Manage API keys for LLM providers. For each provider listed:
- If no key is stored, a button to add one is shown.
- If a key is already stored, click View to open the key dialog. The key field shows the stored value (hidden by default β click the eye icon to reveal). You can overwrite it by pasting a new key and clicking Save Api Key, or remove it entirely with Delete.
Each project uses the API key stored here for its provider. If you delete a key, existing projects using that provider will fail to run until a new key is added.
10. Managing Projects
10.1 Projects List
Click Projects in the left sidebar to see all your projects. Each entry shows the project name and description. Click any row to open that project.
10.2 Deleting a Project
Click the trash icon on the right side of a project row. Deletion is permanent and removes all run history and snapshots associated with that project.
There is no recycle bin or undo for project deletion. Make sure you want to remove it before confirming.
10.3 Project Names and Descriptions
Names and descriptions are set at creation time via the New Project dialog. If you need to change them later, use the project settings (gear icon inside the workspace).
11. Help Ukraine
Click Help Ukraine in the left sidebar to see information about two verified humanitarian organisations supporting civilians affected by the war in Ukraine:
| Organisation | Focus |
|---|---|
| Nova Ukraine | Medical aid, support for internally displaced families, education programmes. 501(c)(3), Charity Navigator 100/100 rating, Platinum Candid rating. Over 90% of every dollar goes to programmes. |
| Voices of Children | Psychological and psychosocial support for children affected by war, through art therapy, mobile support groups, and rehabilitation centres. Independently audited. |
Dyph does not process any transactions. Donations go directly through each organisation's own secured website. Both organisations have passed independent auditing and maintain public financial reports.
12. Tips & Best Practices
Break your system prompt into meaningful blocks
Rather than writing a single large system prompt in one block, split it into sections: one block for the model's role, one for output format rules, one for domain constraints, one for tone. This makes it easy to enable or disable specific parts and swap variations independently.
Use variations for phrasing experiments
If you are unsatisfied with a particular instruction but want to keep the original, put the rewrite in variation 2 instead of overwriting variation 1. You can always switch back by clicking tab 1.
Save a snapshot before major changes
Before reworking a project that is already producing good results, save a snapshot. Name it clearly (e.g., "Working baseline 2025-06"). Then experiment freely, knowing you can restore the baseline at any time.
Use Preview before every important Run
Preview shows the assembled prompt exactly as it will be sent. Before a Run that matters, open Preview and skim it top to bottom to catch disabled blocks, empty slots, or accidental reorderings.
Use the Output column for comparison
After switching a variation or changing a parameter, run again and compare the new response to the previous one in the Output feed. The feed keeps up to 25 entries, which is enough for most iterative sessions.
JSON Mode
If you need structured output, enable JSON Mode in Parameters and explicitly ask for a JSON object in your User Prompt (e.g., "Return a JSON object with keys: summary, keywords, sentiment"). Without the instruction in the prompt, the model may return malformed output.
Seed for reproducibility
If you need a run to be reproducible (same input, same parameters, same output), set a non-zero Seed value. Note that full reproducibility is not guaranteed by all model providers, but it significantly increases consistency.
13. Quick Reference
| I want to⦠| Do this |
|---|---|
| Create a new project | Sidebar β New Project β fill in name & description β Create |
| Add a prompt block | Click the + button at the bottom of the block list |
| Rename a block | Click the block name field and type |
| Disable a block without deleting it | Click the play (triangle) icon on the block |
| Test a different wording | Click variation tab 2 (or 3β9), write the alternative text, click Run |
| Check what will be sent | Click Preview in the left column header |
| Run a generation | Click Run in the header bar |
| See the full prompt of a past run | Click Details on any entry in the Output column |
| Change the model | Click the model name button in the right column β select from the LLM panel |
| Save current configuration | Click Save Snapshot in the header β name it β Save |
| Restore a saved configuration | Click the snapshot name in the Snapshots section of the right column |
| Add or replace an API key | Settings β Credentials β View (provider row) β paste key β Save Api Key |
| Change app theme | Settings β Theme β select Light / Dark / System |
| Delete a project | Projects list β trash icon on the project row (permanent) |