From bfcb6aaa57c13bef59a8379f819c0026a442c573 Mon Sep 17 00:00:00 2001 From: GeneAI Date: Sun, 16 Aug 2026 06:45:14 -0400 Subject: [PATCH] docs: Article A opens terminal-first (chair-ruled via pushback card) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruled through a live pushback card 2026-08-16 (receipt resp-20260816-064430): no third quick-start article; Article A's opening inverts to plugin-first — two terminal commands, skill + four MCP tools, no Python — with pip as the library path the tutorial then follows. Matches the standing install-block convention (plugin first, then pip). The preset/template layer stays uncovered for a later piece. Co-Authored-By: Claude Opus 5 --- docs/tutorial-dynamic-forms.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/tutorial-dynamic-forms.md b/docs/tutorial-dynamic-forms.md index f18f018..12917ea 100644 --- a/docs/tutorial-dynamic-forms.md +++ b/docs/tutorial-dynamic-forms.md @@ -13,17 +13,19 @@ *A hands-on walk from an empty dict to a validated round trip — the six constructs the library documents, the surface each one degrades to, and the return path that never guesses.* -Two earlier pieces argued that an AI agent's question should be a typed, validated artifact — a form — and named the constructs that carry conversational meaning on top of one. This one types it in. By the end you will have built a form that uses every construct in attune-forms — the six those pieces named and the two that 0.6.0 added (§7) — rendered it four ways from the same dict, collected a typed reply from a text-only host, watched the validator refuse a bad answer, and re-asked exactly the field that failed. Everything below runs as written against the published package: +Two earlier pieces argued that an AI agent's question should be a typed, validated artifact — a form — and named the constructs that carry conversational meaning on top of one. This one types it in. + +The fastest way in is two commands in Claude Code's terminal. The plugin gives you the engine as a skill plus four MCP tools — no Python setup — and the next thing you ask for can arrive as a form: ``` -pip install attune-forms==0.6.0 +claude plugin marketplace add Smart-AI-Memory/attune-forms +claude plugin install attune-forms@attune-forms ``` -Or, if you live in Claude Code, the plugin gives you the same engine as a skill plus four MCP tools, no Python setup: +This tutorial takes the library path instead, because the point is to show the machinery. By the end you will have built a form that uses every construct in attune-forms — the six those pieces named and the two that 0.6.0 added (§7) — rendered it four ways from the same dict, collected a typed reply from a text-only host, watched the validator refuse a bad answer, and re-asked exactly the field that failed. Everything below runs as written against the published package: ``` -claude plugin marketplace add Smart-AI-Memory/attune-forms -claude plugin install attune-forms@attune-forms +pip install attune-forms==0.6.0 ``` The library is stdlib plus one runtime dependency; the snippets need nothing else. Where I state a number — bytes, payload counts, line counts — it is the number the code printed when I ran it for this piece.