i2y/ritsu/dandori
Claude Code and agent skill by i2y/ritsu
- community
Checking that the SKILL.md file is still in the repository.
Write, check and build dandori workflows (`.flow` files), typed workflows that call APIs, rules, agents, decision models (TypeSafe's Jev, a server of its System One API such as Ollama, OpenAI's Decisions API), koyomi's dates, chobo's books and code of your own, checked before they run and built for Temporal (TypeScript, Python or Go), AWS Step Functions, AWS Lambda durable functions, Argo Workflows and pydantic-graph. Use when a workflow (take a payment now and capture it later, reserve and ship an order, route an inquiry, wait for a person's approval) has to be written or changed as a `.flow`; when a dandori diagnostic (E001-E050, W030, W032, W101-W104) has to be fixed; when a workflow has to be shown to the person who reviews it, drawn; or when a `.flow` has to be built for a platform and its generated code wired up.
Install
npx vskill@latest install i2y/ritsu/dandoriSKILL.md
When this applies
The job is a workflow: steps that call other systems, wait, retry, and move something in another system from state to state. A payment authorized when a stay is booked and captured at check-out; the lines of an order reserved side by side, packed and shipped; an inquiry read, routed and answered; an application scored and, when the score says so, approved by a person. dandori writes it once as a .flow, checks it before it runs, and builds it for the platform the team runs.
It does not apply to the decisions themselves when they are tables: a fee schedule, an eligibility test, a routing policy. Those are rulec rules, which a .flow calls (rulec has a skill of its own). Nor does it apply to computing things: a .flow has no comparison and no arithmetic, so whatever compares or computes is a rule or a task.
The files bundled with this skill are listed in §7. Read them when you need them, not all up front.
Working with dandori
Your part is to write the .flow, get it past ritsu dandori check, and build it. Two things stay with people:
- what the other systems guarantee: whether a call can be repeated safely, which errors it
returns, which events happen on their side by themselves. That comes from their documentation or their owners, and §3 says when to ask.
- the platform and the code around the workflow: which platform runs it, the credentials, and
the code of the tasks that are yours to write.
Run every command here as ritsu dandori <command> (through a link to ritsu named dandori, dandori <command> is the same). It reads the rules, dates files and books a workflow uses in the same process; dandori built alone from its crate reads none of them and says so (E018). Everything is reachable from the command line: ritsu dandori --help lists the commands, and ritsu dandori check --format json gives the diagnostics as data (§5). There is no step where you have to read dandori's source. In a project with rules, dates or books, ritsu check checks the .flow files with them and across them: whether a call keeps a rule's preconditions, a date's days, a transfer's amounts, refusals and holds (the ritsu skill has the codes).
1. The loop
- Find the workflow. List what it calls, what it waits for, what it returns, and the things
in other systems whose state it moves (a PaymentIntent, an order). Settle the platform (§6); Temporal is the main one.
- Write the `.flow` (§2): the types, the tasks and the cases first, then the flow.
- Check it:
ritsu dandori check <file.flow>. Every diagnostic comes with the run that gets there;
fix it (§4; ritsu dandori explain <CODE> explains one code) and check again, until it prints <file.flow>: ok. A warning does not stop a build, but it says something true about the workflow.
- Watch it run:
ritsu dandori scenarios <file.flow> --out <dir>writes scenarios (001.json,
002.json, …) that together take every arm, every handler of an error, and every way a case can move; for each place of the inputs held to a range, one more has an input just outside it there, which every platform turns away at once (Dandori.BadInput). ritsu dandori run <file.flow> --scenario <dir>/001.json plays one in the reference interpreter and prints each call with its answer, and how the run ended.
- Show it to a person:
ritsu dandori doc <file.flow> > <file>.mddraws the flow as Mermaid
charts, with a table of every call (what it calls, its retries, where each of its errors goes) and of every way the workflow can end, with the state each case is left in, and the rules it calls as ritsu rulec doc renders them, each a page for people. Put it in the pull request, where GitHub draws the charts, for the person who reviews the workflow. --format html writes one page on which each scenario lights up the way its run goes, and each rule's page opens with a case to try on it. diagrams.md says what is on the picture.
- Build it:
ritsu dandori gen <file.flow> --target temporal-typescriptwrites the code into
generated/temporal-typescript/ (--out for another directory); give --target once for each platform wanted, and each goes into its own <dir>/<target>/. gen stops, and writes nothing, when a platform cannot do what the workflow asks (E050), a run can outgrow it (E040), or its code cannot keep a name (E051). The same line with --check in CI writes nothing and exits 1 if a file is missing or differs.
- Wire it up: write the tasks that are yours (the
OwnTasksthe generated code asks for), give
the Transport (io.ts, io.py) its credentials, and start the generated worker, or deploy what the target wrote. When the workflow calls rules, ritsu rulec gen <rule> --target <the wrappers' language> --out rulec writes the code the generated wrappers import (typescript, python or go; ritsu gen writes a whole project as one package instead). A precondition of a rule that ritsu check could not decide (its W201) is checked by the built workflow when it runs, and a run that breaks it fails with Dandori.BrokenPrecondition. platforms.md says what each target writes.
2. The language on one page
A whole workflow: the review example. Jev scores an application and says how sure it is, a rulec rule weighs the verdict and how sure it is, and a person approves what the rule sends on, until 17:00 on the third business day, a time koyomi's dates file gives.
Indentation makes the blocks. # starts a comment.
Declarations
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/dandori/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/i2y/ritsu/dandori)