Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions docs/tutorial-dynamic-forms.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading