Back to portfolio

Concept · Credal Agent Configuration

The prompt has no parts.

You sell cost-to-accuracy evals per workflow. An eval over a single string can report that a score moved. It cannot report what moved it, because the thing under test has no parts to name.

Credal's Instructions field is one textarea. The documentation teaches people to fake structure inside it by typing ---------- ROLE ---------- by hand. This is a working concept for giving that structure to the product instead, and for what happens when the pieces drift apart.

Written by Sven Manzanarez while applying for Founding Design Engineer. Built from the screenshots in your public docs repo. Everything below is interactive — type in it, break it. Roughly ten minutes end to end.

Where this comes from

Two screenshots in Credal-ai/fern-docs: the Agent Configuration → Prompt step, and the prompt-engineering page. Three things are visible in them.

One

The dividers are typed by hand. ROLE, GOAL and INSTRUCTIONS are ASCII, inside a plain string. Users invented this, and the docs now teach it.

Two

Snippets dissolve on arrival. Four sit under the field. Press the arrow and the text lands in the blob. Nothing records that it came from the library.

Three

Evaluate runs test cases against whatever that string currently says, with an Analysis panel beside it.

A user inventing structure is the clearest signal available that an object is missing. They have told you what the object is. It just has nowhere to live.

Quoted from your docs or repo
Proposed my design
Mock-up invented content

Today Quoted

Your example prompt, as published. Edit it. Then press an arrow to apply a snippet, the way the product does now.

Instructions string

Snippet bodies are shortened in the screenshots, so the text after the first clause is Mock-up.

Three objects Proposed

Section

A labelled block with a body and an order. The thing the ASCII dividers are imitating. Seeded with your three labels; add your own.

Applied snippet

Keeps its identity after insertion: which snippet, the text at the moment it was applied, the text now, and a state.

Compiled prompt

What the model receives. Derived from the two above, read-only, every line carrying its source.

The composer Proposed

Same prompt, same snippets, given parts. Section bodies and labels are editable. So is snippet text, once applied — that is how the drift starts.

Instructions 3 sections 0 snippets
Snippet library
Compiled prompt read-only

Six states

This is the part a textarea cannot hold. Each button acts on the composer above — scroll up after pressing one.

  1. 1

    Applied

    Inserted, and still matching the library.

  2. 2

    Edited since applied

    Someone reworded it in place. The snippet is still here, but it is no longer the library's text. Restore stays available.

  3. 3

    Removed

    Applied, then deleted. Recorded rather than erased, so the system can still say this agent no longer carries it.

  4. 4

    Library updated after apply

    Someone publishes a new version of the snippet. This agent keeps the old text and has no way to know. In a textarea this is structurally invisible — there is nothing left to compare against.

  5. 5

    Empty section

    Exists, has a label, has no body. It compiles to nothing and says so rather than emitting a bare heading.

  6. 6

    Ejected

    Structure abandoned for a plain string. One-way, and the compiled view names what stops working.

Why the compiled prompt is read-only

This is the one arguable decision on the page, so here is the argument rather than the assertion.

If the compiled text is editable, it becomes a fourth place where the prompt lives, and it is the one the model actually reads. Any hand edit there silently outranks the sections and the snippets, and the next person to open the section view sees something that is no longer true. You would be back to a blob, with extra steps.

Making it read-only costs the user the ability to nudge one word without finding its section. That is a real cost, and the escape hatch pays it: Eject to plain text converts the agent back to a single string, one way, with what is lost stated before it happens. Ejecting is allowed. Ejecting by accident is not.

Back to Evaluate

The claim at the top, now that the parts exist. Sections and tracked snippets give an eval nouns:

Accuracy fell four points after the INSTRUCTIONS section changed. This agent has carried an edited copy of “Do not hallucinate” since the twelfth.

That sentence needs no new eval machinery, no model change and no extra test cases. It needs the prompt to be something other than text.

What I am not claiming

  • This is read from documentation screenshots, which may lag the live product.
  • Credal is demo-gated. There may already be a structured composer behind it, in which case this is a description of something you have built.
  • “Ask builder buddy to help you write this” may do more than the screenshot shows.
  • I have no first-party knowledge of what your eval pipeline measures.
  • Snippet bodies are truncated in your screenshots; the completions here are invented and labelled.

If any of that makes the argument wrong, I would rather hear it than have it be polite.

If this is useful to you

I am applying for the Founding Design Engineer role. I also opened a small pull request on actions-sdk — parameter descriptions that state the text format the provider code already enforces, so an agent stops guessing between Markdown, mrkdwn and storage format.

Five years of design ownership, production front-end in Next.js and TypeScript. This page is the work rather than a picture of the work.