Concept · Credal Agent Configuration
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.
Two screenshots in Credal-ai/fern-docs: the Agent Configuration → Prompt step, and the prompt-engineering page. Three things are visible in them.
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.
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.
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.
Your example prompt, as published. Edit it. Then press an arrow to apply a snippet, the way the product does now.
Snippet bodies are shortened in the screenshots, so the text after the first clause is Mock-up.
A labelled block with a body and an order. The thing the ASCII dividers are imitating. Seeded with your three labels; add your own.
Keeps its identity after insertion: which snippet, the text at the moment it was applied, the text now, and a state.
What the model receives. Derived from the two above, read-only, every line carrying its source.
Same prompt, same snippets, given parts. Section bodies and labels are editable. So is snippet text, once applied — that is how the drift starts.
This is the part a textarea cannot hold. Each button acts on the composer above — scroll up after pressing one.
Inserted, and still matching the library.
Someone reworded it in place. The snippet is still here, but it is no longer the library's text. Restore stays available.
Applied, then deleted. Recorded rather than erased, so the system can still say this agent no longer carries it.
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.
Exists, has a label, has no body. It compiles to nothing and says so rather than emitting a bare heading.
Structure abandoned for a plain string. One-way, and the compiled view names what stops working.
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.
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.
If any of that makes the argument wrong, I would rather hear it than have it be polite.
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.