{
  "slug": "dsl/quickstart",
  "title": "DSL quickstart",
  "description": "Start authoring Cuitty product workflows with .cuitty files.",
  "url": "https://cuitty.com/docs/dsl/quickstart",
  "markdown_url": "https://cuitty.com/docs/dsl/quickstart.md",
  "json_url": "https://cuitty.com/docs/dsl/quickstart.json",
  "frontmatter": {
    "title": "DSL quickstart",
    "description": "Start authoring Cuitty product workflows with .cuitty files.",
    "order": 1,
    "section": "DSL",
    "updatedAt": "2026-06-05"
  },
  "headings": [
    {
      "depth": 1,
      "slug": "dsl-quickstart",
      "text": "DSL quickstart"
    }
  ],
  "body_markdown": "# DSL quickstart\n\nCuitty DSL is an HCL-style language for product workflows across Cuitty. A\nsingle `.cuitty` file can declare project metadata, test suites, Pilot\nplaybooks, Video compositions, Code Apps, modules, and adapter targets.\n\n```hcl\ncuitty {\n  schema_version = 1\n  project = \"demo\"\n  extensions = [\"tests\", \"pilot\", \"video\"]\n  targets = [\"ctest\", \"pilot-yaml\", \"video-yaml\"]\n}\n\ntest_suite \"smoke\" {\n  test \"health\" {\n    type = \"http\"\n    request {\n      method = \"GET\"\n      url = \"${env.BASE_URL}/api/health\"\n    }\n    assert { status = 200 }\n  }\n}\n```\n\nOpen the hosted playground at [/playground/dsl](/playground/dsl), or run the\nlocal sandbox:\n\n```bash\ncd ~/Code/cuitty/dsl\n./run sandbox\n```\n\nThe playground validates source, shows diagnostics, lists symbols, and exposes\nthe normalized AST that adapters use.",
  "body_html": "<h1 id=\"dsl-quickstart\">DSL quickstart</h1>\n<p>Cuitty DSL is an HCL-style language for product workflows across Cuitty. A\nsingle <code>.cuitty</code> file can declare project metadata, test suites, Pilot\nplaybooks, Video compositions, Code Apps, modules, and adapter targets.</p>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"hcl\"><code><span class=\"line\"><span style=\"color:#B392F0\">cuitty</span><span style=\"color:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  schema_version</span><span style=\"color:#F97583\"> =</span><span style=\"color:#79B8FF\"> 1</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  project</span><span style=\"color:#F97583\"> =</span><span style=\"color:#9ECBFF\"> \"demo\"</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  extensions</span><span style=\"color:#F97583\"> =</span><span style=\"color:#E1E4E8\"> [</span><span style=\"color:#9ECBFF\">\"tests\"</span><span style=\"color:#E1E4E8\">, </span><span style=\"color:#9ECBFF\">\"pilot\"</span><span style=\"color:#E1E4E8\">, </span><span style=\"color:#9ECBFF\">\"video\"</span><span style=\"color:#E1E4E8\">]</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  targets</span><span style=\"color:#F97583\"> =</span><span style=\"color:#E1E4E8\"> [</span><span style=\"color:#9ECBFF\">\"ctest\"</span><span style=\"color:#E1E4E8\">, </span><span style=\"color:#9ECBFF\">\"pilot-yaml\"</span><span style=\"color:#E1E4E8\">, </span><span style=\"color:#9ECBFF\">\"video-yaml\"</span><span style=\"color:#E1E4E8\">]</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#B392F0\">test_suite</span><span style=\"color:#79B8FF\"> \"smoke\"</span><span style=\"color:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#B392F0\">  test</span><span style=\"color:#79B8FF\"> \"health\"</span><span style=\"color:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    type</span><span style=\"color:#F97583\"> =</span><span style=\"color:#9ECBFF\"> \"http\"</span></span>\n<span class=\"line\"><span style=\"color:#B392F0\">    request</span><span style=\"color:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      method</span><span style=\"color:#F97583\"> =</span><span style=\"color:#9ECBFF\"> \"GET\"</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">      url</span><span style=\"color:#F97583\"> =</span><span style=\"color:#9ECBFF\"> \"</span><span style=\"color:#F97583\">${</span><span style=\"color:#E1E4E8\">env</span><span style=\"color:#F97583\">.</span><span style=\"color:#E1E4E8\">BASE_URL</span><span style=\"color:#F97583\">}</span><span style=\"color:#9ECBFF\">/api/health\"</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">    }</span></span>\n<span class=\"line\"><span style=\"color:#B392F0\">    assert</span><span style=\"color:#E1E4E8\"> { status</span><span style=\"color:#F97583\"> =</span><span style=\"color:#79B8FF\"> 200</span><span style=\"color:#E1E4E8\"> }</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">  }</span></span>\n<span class=\"line\"><span style=\"color:#E1E4E8\">}</span></span></code></pre>\n<p>Open the hosted playground at <a href=\"/playground/dsl\">/playground/dsl</a>, or run the\nlocal sandbox:</p>\n<pre class=\"astro-code github-dark\" style=\"background-color:#24292e;color:#e1e4e8; overflow-x: auto;\" tabindex=\"0\" data-language=\"bash\"><code><span class=\"line\"><span style=\"color:#79B8FF\">cd</span><span style=\"color:#9ECBFF\"> ~/Code/cuitty/dsl</span></span>\n<span class=\"line\"><span style=\"color:#B392F0\">./run</span><span style=\"color:#9ECBFF\"> sandbox</span></span></code></pre>\n<p>The playground validates source, shows diagnostics, lists symbols, and exposes\nthe normalized AST that adapters use.</p>",
  "links_out": [
    "/playground/dsl"
  ]
}