Drafting and verification: your agent writes, the gate checks it
VarynForge does not draft content on its servers. Your agent drafts, on your tokens, with the brief as its prompt. VarynForge supplies the writer prompt and the gate: a check that grades the draft against the brief it was written from. This page covers the loop from a brief_ready suggestion to a ready_to_publish one.
Get the writer prompt for the channel
An article, an X thread and a short video script are written differently, so each channel has its own prompt. Your agent calls get_writer_system_prompt with channel set to article, x, linkedin, reels or youtube; article is the default. The prompt covers the submission format, the gate checks with their limits, the craft rules and the usual ways a draft fails. It binds to the brief, its rubric and the opportunity behind it, so your agent fetches those before it writes. The brief itself comes from download_brief_markdown, or get_article_brief with the channel. Five channels explains what each one submits.
Read the rubric before writing
get_lint_rubric takes the suggestion id and the same channel your agent will pass to the gate. It returns the submission format, which checks are required and which are advisory, and checkParams: the exact numbers the gate grades against, such as per-post character caps, the hook fold, script word budgets and hashtag maxima. Reading it first lets the draft pass on the first submission.
Set drafting while you work
Before it starts writing, your agent can set the suggestion to drafting with update_article_status. The gate does not require it, since lint_draft accepts a draft straight from brief_ready, but it keeps your board truthful while the piece is being written. Every status change records who made it, and calls over MCP register as the agent.
Submit to the gate: lint_draft
{ "suggestionId": "…", "channel": "article", "format": "website", "draft": "# …" }
lint_draft grades the draft against the channel's brief and returns a pass or flag verdict, the result of each check, the suggestion's status after the check, and a nextAction hint. Always pass channel. Without it, the channel is inferred from format, and an unknown label grades against the long-form article brief, which a short script cannot pass.
format names the destination the draft is for, ideally one of the project's destination type ids. The gate keeps one stored draft and one receipt per destination, so a TikTok script never overwrites the website article. Submitting the same format again replaces that destination's draft.
A suggestion has one pipeline status. The gate moves it forward only: a pass moves it to ready_to_publish, a flag moves it to draft_ready, and a later flag on one destination never demotes a suggestion another destination already moved forward.
| Status | Set by |
|---|---|
brief_ready | VarynForge, when the brief finishes forging |
drafting | Your agent or you, with update_article_status |
draft_ready | The gate, when lint_draft flags the draft |
ready_to_publish | The gate, when lint_draft passes the draft |
published | Your agent, with mark_article_published once the URL is live |
Publishing is covered in publishing and attestation.
Re-read a verdict for free
get_draft_status returns the suggestion's status and, per destination, the stored draft and the latest receipt. It is free and has no cap. When your agent loses a verdict, it reads it back here instead of spending another check.
The lint cap
lint_draft is capped on every plan: 10 checks a day on Free Forge and 50 on a paid plan, counted in a 24-hour window that starts at the first check and shared by everyone in the project's organization. get_account_status reports the cap and what is left, so your agent checks the count before a revision loop and self-checks against the rubric between submissions. When the cap is reached, the gate returns a structured answer with the reset time instead of a verdict.
When you deviate from the brief on purpose
Sometimes you drop a section or cut the scope on purpose. With your explicit say-so, your agent passes those check ids in waiveChecks. Waived checks still run and are recorded as waived in the receipt, but they stop failing the verdict. Your agent never waives a check on its own initiative.
When the brief itself is stale because you changed the angle, your agent regenerates the brief with generate_article_brief, force: true and guidance describing the correction, then drafts again.
Markdown version of this page, for your agent.