Migrate from TypeScript
- Preserve a copy of the old workflow and run the archived test suite if its behavior matters:
NODE_OPTIONS=--no-deprecation npm test. - Run
cargo run -p agentctl-cli -- migrate old.yaml --write workflow.yaml. - Run
agentctl check workflow.yamland address every diagnostic; the new schema is strict. - Replace
module:namewithaction:name, and define typed provider entries referenced by agents. - Move credentials to
{ env: NAME }; remove API-key arguments and inline tokens. Add environment, provider, host, process, readable workspace, and writable-root policy grants explicitly. - Replace the old effectful meaning of replay with
fork. Usereplayonly when no current external observation is desired. - Review model settings: OpenAI is Responses-native,
reasoning.effortuses current values, tools require strict input/output schemas, and token/tool/turn/time bounds are mandatory/defaulted. - Convert MCP to
mcpServersversion2025-11-25and A2A toa2aPeersversion1.0; secrets belong in header references. - Verify with the fake provider and local mocks. Run any
*-live.yamlexample only as an explicit external test.
The automatic translator covers simple top-level metadata, modules/actions, tasks, heuristic agents, common approval mode, and initial working memory. It discards unsupported legacy provider endpoint/cache/profile fields with a migration warning rather than preserving unsafe or obsolete semantics. Pack-backed actions, remote transports, MongoDB/vector memory, arbitrary profiles, and custom TypeScript executors must be rewritten against the Rust contracts.
Use fixtures/compat/v0/assign.playbook.yaml as the minimum preserved contract and compare changes against Compatibility. The old source is non-production reference material; do not add new behavior to it.
Canonical source:
docs/MIGRATING_FROM_TYPESCRIPT.md. Verified against agentctl commit2aeaa88fba71162206b5f08f5bda4f0150247e4f.