TaskSultan can write an automation for you. You describe the process and the generator asks a model for TypeScript. The platform then checks, tests and packages what comes back. The model is used at authoring time only. Once the automation exists it is ordinary TypeScript. The Robot that runs it contains no model and makes no decision at execution time.
#The generator pipeline
The model produces a GeneratedArtifact: the metadata and the files. Everything after that is TaskSultan's. The pipeline runs a fixed list of gates and stops at the first refusal:
GENERATE -> PARSE -> SCHEMA -> BIND (optional) -> LINT -> TYPECHECK -> TEST -> PACKAGE (SHA-256 verified)
PARSE rejects an artifact the model refused to produce or could not produce. SCHEMA enforces the sanctioned file kinds and the rule that definition.id equals the file stem. BIND is off unless you ask for it, described below. LINT runs the conformance validator in a child process, so it sees the targets this run just registered. TYPECHECK runs tsc --noEmit. TEST runs the canonical Playwright spec for a known kind. PACKAGE builds a versioned .tspkg and verifies its content hash.
The model never writes to disk. The pipeline owns the writer and touches only sanctioned paths: automations/<id>.automation.ts and targets/<domain>.targets.ts. Writes are transactional. A failed run rolls back. A process that dies mid-run is rolled back on the next start.
#Choosing a model
tasksultan robot generate <brief.json> takes the brief and a set of flags:
npx tsx robot/cli.ts generate tools/briefs/orders-excel.json
npx tsx robot/cli.ts generate tools/briefs/orders-excel.json --remote
npx tsx robot/cli.ts generate tools/briefs/orders-excel.json --artifact my-artifact.json
--remotecalls the live OpenAI-compatible adapter. It readsTS_MODEL_API_BASE,TS_MODEL_API_KEYand optionallyTS_MODEL_NAME. It runs an automatic repair loop of up to two attempts, feeding structured gate diagnostics back into the prompt. Today the adapter is pointed at DeepSeek.--artifact <artifact.json>injects an already-authoredGenerationOutput. This is the path for an agent working in the loop, where Hermes or Luna writes the artifact and the platform runs every gate on it.--skip-testsskips the end-to-end Playwright gate. It is for speed during iteration, not for an artifact you intend to keep.
Without a flag the generator uses the scripted model, which regenerates and adapts the repository's own golden files. It cannot solve an arbitrary brief.
--bind and --url <app> turn on target binding. The Studio's generate surface takes the same choices as model: 'remote' | 'scripted'.
#Target binding
By default a model may author locators blind, or declare target intents that the platform proves. When --bind is set, every declared intent is resolved against the running page through the same prover the bind verb uses. Only the proven module is installed. A single intent that cannot be proven refuses the whole run by name, before anything is written. Binding is off by default. With it off the pipeline opens no browser and runs exactly the gates above.
#What leaves the machine
Authoring is local unless you point it at a remote model. With --remote, the brief and the curated generation context (the rules and the selected golden examples) are sent to the endpoint named by TS_MODEL_API_BASE. With the scripted model, an injected artifact, or your own TypeScript, nothing leaves the machine. Execution never calls a model, so a run sends nothing anywhere.