{"base_url":"https://singing-bird.benac.dev","groups":[{"id":"sessions","label":"Sessions","description":"Session lifecycle — create, inspect, close, snapshot, restore.","tile_count":26},{"id":"control","label":"Control","description":"Advance the simulation — step, pause, resume, submit turns.","tile_count":4},{"id":"observation","label":"Observation","description":"Query state — overview, objects, events, changes, reports, SSE.","tile_count":11},{"id":"intervention","label":"Intervention","description":"Mutate live state — patches, external stimuli.","tile_count":2},{"id":"tooling","label":"Tooling","description":"Meta endpoints — manifest, schema.","tile_count":3}],"tiles":[{"name":"list_scenarios","title":"Available scenario packs","tools":["list_scenarios"],"method":"GET","path":"/v1/scenarios","scope":"read","group":"sessions","summary":"List scenario packs discoverable on disk. Dynamic: drop a new *.yaml into the scenarios directory and it appears.","option_label":"scenario_path","option_hint":"Pass a scenario path as the body of POST /v1/sessions to create a session.","options":[{"path":"scenarios/dockside_outpost.yaml","scenario_id":"dockside_outpost","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":777,"locations":3,"entities":8,"processes":2,"synths":3,"source":"shipped"},{"path":"scenarios/lighthouse.yaml","scenario_id":"lighthouse","ruleset_ref":"physical_social_v1","chronon_interval_seconds":300,"random_seed":42,"locations":4,"entities":12,"processes":2,"synths":3,"source":"shipped"},{"path":"data/scenarios/lighthouse_fork.yaml","scenario_id":"lighthouse_fork","ruleset_ref":"physical_social_v1","chronon_interval_seconds":300,"random_seed":42,"locations":4,"entities":12,"processes":2,"synths":3,"source":"user"},{"path":"data/scenarios/lighthouse_test_base.yaml","scenario_id":"lighthouse_test_base","ruleset_ref":"physical_social_v1","chronon_interval_seconds":300,"random_seed":42,"locations":4,"entities":12,"processes":2,"synths":3,"source":"user"},{"path":"scenarios/night_clinic.yaml","scenario_id":"night_clinic","ruleset_ref":"physical_social_v1","chronon_interval_seconds":180,"random_seed":2718,"locations":3,"entities":7,"processes":1,"synths":3,"source":"shipped"},{"path":"scenarios/park_bench.yaml","scenario_id":"park_bench","ruleset_ref":"physical_social_v1","chronon_interval_seconds":180,"random_seed":99,"locations":3,"entities":5,"processes":1,"synths":2,"source":"shipped"},{"path":"scenarios/storm_cellar.yaml","scenario_id":"storm_cellar","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":314,"locations":3,"entities":8,"processes":2,"synths":3,"source":"shipped"},{"path":"scenarios/workshop_blackout.yaml","scenario_id":"workshop_blackout","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":123,"locations":3,"entities":8,"processes":2,"synths":3,"source":"shipped"}],"execution":{"method":"GET","path":"/v1/scenarios","label":"List scenarios","url":"https://singing-bird.benac.dev/v1/scenarios","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fscenarios&label=List+scenarios"},"url":"https://singing-bird.benac.dev/v1/scenarios"},{"name":"get_api_call_log","title":"API audit log","tools":["get_api_call_log"],"method":"GET","path":"/v1/admin/logs","scope":"admin","group":"tooling","summary":"Live tail of the API request/response audit log. Every HTTP exchange and every MCP JSON-RPC message is captured. The X-Request-Id response header links each response back to a record here.","option_label":"request_id","option_hint":"Most recent first. Click Run to fetch more records as JSON.","options":[{"request_id":"b92b497dbe4f432cb4ed7726184da8f4","ts":"2026-04-17T15:38:02.493080Z","duration_ms":0.158,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"b92b497dbe4f432cb4ed7726184da8f4"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"8e0c45db72f740b1ad264d229026c521","ts":"2026-04-17T15:38:02.492457Z","duration_ms":0.258,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"8e0c45db72f740b1ad264d229026c521"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"ebe9349af31941f6a0e97688cf1332b4","ts":"2026-04-17T15:37:52.492900Z","duration_ms":0.243,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"ebe9349af31941f6a0e97688cf1332b4"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"a7bca64996f147aaa8e9f4f43c32f9ee","ts":"2026-04-17T15:37:42.492288Z","duration_ms":0.262,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"a7bca64996f147aaa8e9f4f43c32f9ee"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"6eb8652fc5584e2997120df756e12cd1","ts":"2026-04-17T15:37:32.493624Z","duration_ms":0.174,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"6eb8652fc5584e2997120df756e12cd1"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"6aea4a5d4584496a8277f8ca2efc7bf5","ts":"2026-04-17T15:37:32.492946Z","duration_ms":0.265,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"6aea4a5d4584496a8277f8ca2efc7bf5"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"bd80e4d64b61487e94c6fb7ccd342826","ts":"2026-04-17T15:37:22.492898Z","duration_ms":0.244,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"bd80e4d64b61487e94c6fb7ccd342826"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"5ae4b27c4c4e461cb1fca8909421d666","ts":"2026-04-17T15:37:12.492810Z","duration_ms":0.242,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"5ae4b27c4c4e461cb1fca8909421d666"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"92601084923d45489d7168b92bc73fed","ts":"2026-04-17T15:37:02.493744Z","duration_ms":0.122,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"92601084923d45489d7168b92bc73fed"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"b1901305b01b4f6581d911043bde1084","ts":"2026-04-17T15:37:02.493118Z","duration_ms":0.27,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"b1901305b01b4f6581d911043bde1084"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"077e03218a424441a3a2f1afc814415b","ts":"2026-04-17T15:36:52.493107Z","duration_ms":0.246,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"077e03218a424441a3a2f1afc814415b"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"01a80e4ace17494bb3560a48aa569d32","ts":"2026-04-17T15:36:42.492671Z","duration_ms":0.274,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"01a80e4ace17494bb3560a48aa569d32"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"e32addc9bf2c475f9b299889ae9f6376","ts":"2026-04-17T15:36:32.493772Z","duration_ms":0.205,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"e32addc9bf2c475f9b299889ae9f6376"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"21473ff4637a433fb4aa2caaec8b00b5","ts":"2026-04-17T15:36:32.493037Z","duration_ms":0.303,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"21473ff4637a433fb4aa2caaec8b00b5"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"e98fec5475264f459157519beb6e0b5e","ts":"2026-04-17T15:36:22.492802Z","duration_ms":0.313,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"e98fec5475264f459157519beb6e0b5e"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"c33e3e7801254345a1e61f08a8c92e55","ts":"2026-04-17T15:36:12.493262Z","duration_ms":0.224,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"c33e3e7801254345a1e61f08a8c92e55"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"d253ea3d6c6d4d07b3b69a847f5d93e3","ts":"2026-04-17T15:36:02.497031Z","duration_ms":0.223,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"d253ea3d6c6d4d07b3b69a847f5d93e3"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"58ac0152bd51465e963581867f0d7174","ts":"2026-04-17T15:36:02.496145Z","duration_ms":0.376,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"58ac0152bd51465e963581867f0d7174"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"bda9a42ae8524af0982f450b21d1829b","ts":"2026-04-17T15:35:58.512702Z","duration_ms":2.783,"method":"GET","path":"/v1/admin/logs","query":"limit=4","operation_id":"get_api_call_log_v1_admin_logs_get","client_ip":"192.168.29.10","user_agent":"curl/8.5.0","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"singing-bird.benac.dev","user-agent":"curl/8.5.0","accept":"*/*","via":"2.0 Caddy","x-forwarded-for":"192.168.29.10","x-forwarded-host":"singing-bird.benac.dev","x-forwarded-proto":"https","x-real-ip":"192.168.29.10","accept-encoding":"gzip"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"12170","content-type":"application/json","x-request-id":"bda9a42ae8524af0982f450b21d1829b"},"response_body_size":12170,"response_body_truncated":false,"response_body_kind":"json","response_body":{"count":4,"records":[{"request_id":"df143dc04ef143f595baa0ffbc6a41be","ts":"2026-04-17T15:35:58.282356Z","duration_ms":104.015,"method":"GET","path":"/v1/scenarios","query":"","operation_id":"list_scenarios_v1_scenarios_get","client_ip":"192.168.29.10","user_agent":"curl/8.5.0","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"singing-bird.benac.dev","user-agent":"curl/8.5.0","accept":"*/*","via":"2.0 Caddy","x-forwarded-for":"192.168.29.10","x-forwarded-host":"singing-bird.benac.dev","x-forwarded-proto":"https","x-real-ip":"192.168.29.10","accept-encoding":"gzip"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"1249","content-type":"application/json","x-request-id":"df143dc04ef143f595baa0ffbc6a41be"},"response_body_size":1249,"response_body_truncated":false,"response_body_kind":"json","response_body":{"scenarios":[{"path":"scenarios/dockside_outpost.yaml","scenario_id":"dockside_outpost","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":777,"locations":3,"entities":8,"processes":2,"synths":3},{"path":"scenarios/lighthouse.yaml","scenario_id":"lighthouse","ruleset_ref":"physical_social_v1","chronon_interval_seconds":300,"random_seed":42,"locations":4,"entities":12,"processes":2,"synths":3},{"path":"scenarios/night_clinic.yaml","scenario_id":"night_clinic","ruleset_ref":"physical_social_v1","chronon_interval_seconds":180,"random_seed":2718,"locations":3,"entities":7,"processes":1,"synths":3},{"path":"scenarios/park_bench.yaml","scenario_id":"park_bench","ruleset_ref":"physical_social_v1","chronon_interval_seconds":180,"random_seed":99,"locations":3,"entities":5,"processes":1,"synths":2},{"path":"scenarios/storm_cellar.yaml","scenario_id":"storm_cellar","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":314,"locations":3,"entities":8,"processes":2,"synths":3},{"path":"scenarios/workshop_blackout.yaml","scenario_id":"workshop_blackout","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":123,"locations":3,"entities":8,"processes":2,"synths":3}]},"response_stream":false},"error":null},{"request_id":"86d7ccef5c2a4db5bc1b3fe9e7ca8383","ts":"2026-04-17T15:35:58.400328Z","duration_ms":33.589,"method":"GET","path":"/v1/sessions/not-real","query":"","operation_id":"get_session_v1_sessions__session_id__get","client_ip":"192.168.29.10","user_agent":"curl/8.5.0","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"singing-bird.benac.dev","user-agent":"curl/8.5.0","accept":"*/*","via":"2.0 Caddy","x-forwarded-for":"192.168.29.10","x-forwarded-host":"singing-bird.benac.dev","x-forwarded-proto":"https","x-real-ip":"192.168.29.10","accept-encoding":"gzip"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":404,"response":{"headers":{"content-length":"30","content-type":"application/json","x-request-id":"86d7ccef5c2a4db5bc1b3fe9e7ca8383"},"response_body_size":30,"response_body_truncated":false,"response_body_kind":"json","response_body":{"detail":"Session not found"},"response_stream":false},"error":null},{"type":"mcp_call","request_id":null,"ts":"2026-04-17T15:35:58.499348Z","duration_ms":50.906,"mcp_method":"tools/list","mcp_id":1,"tool_name":null,"arguments":null,"is_error":false,"result_text_size":0,"error":null},{"request_id":"bfd39f45ccbd4ce29c8db48a2cc81e98","ts":"2026-04-17T15:35:58.448239Z","duration_ms":51.495,"method":"POST","path":"/mcp","query":"","operation_id":"mcp_post_mcp_post","client_ip":"192.168.29.10","user_agent":"curl/8.5.0","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"singing-bird.benac.dev","user-agent":"curl/8.5.0","content-length":"58","accept":"*/*","content-type":"application/json","via":"2.0 Caddy","x-forwarded-for":"192.168.29.10","x-forwarded-host":"singing-bird.benac.dev","x-forwarded-proto":"https","x-real-ip":"192.168.29.10","accept-encoding":"gzip"},"request_body_size":58,"request_body_truncated":false,"request_body_kind":"json","request_body":{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}},"status":200,"response":{"headers":{"content-length":"7559","content-type":"application/json","x-request-id":"bfd39f45ccbd4ce29c8db48a2cc81e98"},"response_body_size":7559,"response_body_truncated":false,"response_body_kind":"json","response_body":{"jsonrpc":"2.0","id":1,"result":{"tools":[{"name":"apply_patch","description":"Apply Patch","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"operations":{"items":{"properties":{"op":{"type":"string","title":"Op"},"entity_ref":{"type":"string","title":"Entity Ref"},"destination_ref":{"type":"string","title":"Destination Ref"},"location_ref":{"type":"string","title":"Location Ref"},"synth_ref":{"type":"string","title":"Synth Ref"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"mobility":{"type":"string","title":"Mobility"},"components":{"items":{"type":"object"},"type":"array","title":"Components"},"component_type":{"type":"string","title":"Component Type"},"property":{"type":"string","title":"Property"},"value":{"title":"Value"},"field_path":{"type":"string","title":"Field Path"},"subject":{"type":"string","title":"Subject"},"predicate":{"type":"string","title":"Predicate"},"content":{"type":"string","title":"Content"},"confidence":{"type":"number","title":"Confidence"},"source_modality":{"type":"string","title":"Source Modality"},"source_agent":{"type":"string","title":"Source Agent"},"memory_type":{"type":"string","title":"Memory Type"},"salience":{"type":"number","title":"Salience"},"mood":{"type":"string","title":"Mood"},"valence":{"type":"number","title":"Valence"},"arousal":{"type":"number","title":"Arousal"},"stress":{"type":"number","title":"Stress"}},"type":"object","required":["op"],"title":"PatchOperation"},"type":"array","title":"Operations"},"mode":{"type":"string","title":"Mode","default":"commit"},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id","operations"]}},{"name":"close_session","description":"Close Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"create_session","description":"Create Session","inputSchema":{"type":"object","properties":{"scenario_path":{"type":"string","title":"Scenario Path"}},"required":["scenario_path"]}},{"name":"get_api_call_log_v1_admin_logs_get","description":"Tail the API request/response audit log.\n\nEvery HTTP request (REST, MCP, dashboard) produces one JSONL record at\ndata/audit/api_calls.jsonl. Each record carries a request_id that is\nalso returned in the X-Request-Id response header for correlation.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","title":"Limit","default":100},"since_ts":{"type":"string","title":"Since Ts"}},"required":[]}},{"name":"get_changes","description":"Get Changes","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"since":{"type":"integer","title":"Since","default":0},"snapshot_ref":{"type":"string","title":"Snapshot Ref"}},"required":["session_id"]}},{"name":"get_events","description":"Get Events","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"since":{"type":"integer","title":"Since","default":0},"limit":{"type":"integer","title":"Limit","default":50}},"required":["session_id"]}},{"name":"get_last_cycle_report","description":"Get Last Cycle Report","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"get_object","description":"Get Object","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"kind":{"type":"string","title":"Kind"},"ref":{"type":"string","title":"Ref"},"view":{"type":"string","title":"View","default":"both"}},"required":["session_id","kind","ref"]}},{"name":"get_overview","description":"Get Overview","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"get_report_since","description":"Report of everything that happened since a sequence cursor.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"since":{"type":"integer","title":"Since","default":0}},"required":["session_id"]}},{"name":"get_session","description":"Get Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"get_tool_manifest","description":"Tool manifest generated from the OpenAPI schema. Schema is source of truth.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_scenarios","description":"List scenario packs available on disk (metadata only, no world load).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_sessions","description":"List Sessions","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_snapshots","description":"List Snapshots","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"pause_session","description":"Pause Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"queue_stimulus","description":"Queue an external stimulus for delivery through the perception path.\n\nStimuli are mediated: they enter through compose_sensory_bundle on the\nnext step or turn, not by scribbling into synth state directly.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"target_synth_refs":{"items":{"type":"string"},"type":"array","title":"Target Synth Refs","default":[]},"channel":{"type":"string","title":"Channel","default":"auditory"},"content":{"type":"string","title":"Content"},"source":{"type":"string","title":"Source","default":"external"},"source_agent":{"type":"string","title":"Source Agent","default":"director"},"salience":{"type":"number","title":"Salience","default":0.8},"delivery":{"type":"string","title":"Delivery","default":"next_cycle"},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id","content"]}},{"name":"resolve_ref","description":"Resolve Ref","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"q":{"type":"string","title":"Q"},"kind":{"type":"string","title":"Kind"}},"required":["session_id","q"]}},{"name":"restore_snapshot","description":"Restore Snapshot","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"snapshot_ref":{"type":"string","title":"Snapshot Ref"},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id","snapshot_ref"]}},{"name":"resume_session","description":"Resume Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"step_session","description":"Step Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"n":{"type":"integer","title":"N","default":1},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id"]}},{"name":"submit_turn","description":"Submit Turn","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"origin_type":{"type":"string","title":"Origin Type","default":"human"},"origin_ref":{"type":"string","title":"Origin Ref"},"payload":{"type":"object","title":"Payload","default":{}},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id"]}}]}},"response_stream":false},"error":null}]},"response_stream":false},"error":null},{"request_id":"bfd39f45ccbd4ce29c8db48a2cc81e98","ts":"2026-04-17T15:35:58.448239Z","duration_ms":51.495,"method":"POST","path":"/mcp","query":"","operation_id":"mcp_post_mcp_post","client_ip":"192.168.29.10","user_agent":"curl/8.5.0","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"singing-bird.benac.dev","user-agent":"curl/8.5.0","content-length":"58","accept":"*/*","content-type":"application/json","via":"2.0 Caddy","x-forwarded-for":"192.168.29.10","x-forwarded-host":"singing-bird.benac.dev","x-forwarded-proto":"https","x-real-ip":"192.168.29.10","accept-encoding":"gzip"},"request_body_size":58,"request_body_truncated":false,"request_body_kind":"json","request_body":{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}},"status":200,"response":{"headers":{"content-length":"7559","content-type":"application/json","x-request-id":"bfd39f45ccbd4ce29c8db48a2cc81e98"},"response_body_size":7559,"response_body_truncated":false,"response_body_kind":"json","response_body":{"jsonrpc":"2.0","id":1,"result":{"tools":[{"name":"apply_patch","description":"Apply Patch","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"operations":{"items":{"properties":{"op":{"type":"string","title":"Op"},"entity_ref":{"type":"string","title":"Entity Ref"},"destination_ref":{"type":"string","title":"Destination Ref"},"location_ref":{"type":"string","title":"Location Ref"},"synth_ref":{"type":"string","title":"Synth Ref"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"mobility":{"type":"string","title":"Mobility"},"components":{"items":{"type":"object"},"type":"array","title":"Components"},"component_type":{"type":"string","title":"Component Type"},"property":{"type":"string","title":"Property"},"value":{"title":"Value"},"field_path":{"type":"string","title":"Field Path"},"subject":{"type":"string","title":"Subject"},"predicate":{"type":"string","title":"Predicate"},"content":{"type":"string","title":"Content"},"confidence":{"type":"number","title":"Confidence"},"source_modality":{"type":"string","title":"Source Modality"},"source_agent":{"type":"string","title":"Source Agent"},"memory_type":{"type":"string","title":"Memory Type"},"salience":{"type":"number","title":"Salience"},"mood":{"type":"string","title":"Mood"},"valence":{"type":"number","title":"Valence"},"arousal":{"type":"number","title":"Arousal"},"stress":{"type":"number","title":"Stress"}},"type":"object","required":["op"],"title":"PatchOperation"},"type":"array","title":"Operations"},"mode":{"type":"string","title":"Mode","default":"commit"},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id","operations"]}},{"name":"close_session","description":"Close Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"create_session","description":"Create Session","inputSchema":{"type":"object","properties":{"scenario_path":{"type":"string","title":"Scenario Path"}},"required":["scenario_path"]}},{"name":"get_api_call_log_v1_admin_logs_get","description":"Tail the API request/response audit log.\n\nEvery HTTP request (REST, MCP, dashboard) produces one JSONL record at\ndata/audit/api_calls.jsonl. Each record carries a request_id that is\nalso returned in the X-Request-Id response header for correlation.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","title":"Limit","default":100},"since_ts":{"type":"string","title":"Since Ts"}},"required":[]}},{"name":"get_changes","description":"Get Changes","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"since":{"type":"integer","title":"Since","default":0},"snapshot_ref":{"type":"string","title":"Snapshot Ref"}},"required":["session_id"]}},{"name":"get_events","description":"Get Events","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"since":{"type":"integer","title":"Since","default":0},"limit":{"type":"integer","title":"Limit","default":50}},"required":["session_id"]}},{"name":"get_last_cycle_report","description":"Get Last Cycle Report","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"get_object","description":"Get Object","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"kind":{"type":"string","title":"Kind"},"ref":{"type":"string","title":"Ref"},"view":{"type":"string","title":"View","default":"both"}},"required":["session_id","kind","ref"]}},{"name":"get_overview","description":"Get Overview","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"get_report_since","description":"Report of everything that happened since a sequence cursor.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"since":{"type":"integer","title":"Since","default":0}},"required":["session_id"]}},{"name":"get_session","description":"Get Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"get_tool_manifest","description":"Tool manifest generated from the OpenAPI schema. Schema is source of truth.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_scenarios","description":"List scenario packs available on disk (metadata only, no world load).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_sessions","description":"List Sessions","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"list_snapshots","description":"List Snapshots","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"pause_session","description":"Pause Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"queue_stimulus","description":"Queue an external stimulus for delivery through the perception path.\n\nStimuli are mediated: they enter through compose_sensory_bundle on the\nnext step or turn, not by scribbling into synth state directly.","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"target_synth_refs":{"items":{"type":"string"},"type":"array","title":"Target Synth Refs","default":[]},"channel":{"type":"string","title":"Channel","default":"auditory"},"content":{"type":"string","title":"Content"},"source":{"type":"string","title":"Source","default":"external"},"source_agent":{"type":"string","title":"Source Agent","default":"director"},"salience":{"type":"number","title":"Salience","default":0.8},"delivery":{"type":"string","title":"Delivery","default":"next_cycle"},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id","content"]}},{"name":"resolve_ref","description":"Resolve Ref","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"q":{"type":"string","title":"Q"},"kind":{"type":"string","title":"Kind"}},"required":["session_id","q"]}},{"name":"restore_snapshot","description":"Restore Snapshot","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"snapshot_ref":{"type":"string","title":"Snapshot Ref"},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id","snapshot_ref"]}},{"name":"resume_session","description":"Resume Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"}},"required":["session_id"]}},{"name":"step_session","description":"Step Session","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"n":{"type":"integer","title":"N","default":1},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id"]}},{"name":"submit_turn","description":"Submit Turn","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","title":"Session Id"},"origin_type":{"type":"string","title":"Origin Type","default":"human"},"origin_ref":{"type":"string","title":"Origin Ref"},"payload":{"type":"object","title":"Payload","default":{}},"idempotency_key":{"type":"string","title":"Idempotency Key"}},"required":["session_id"]}}]}},"response_stream":false},"error":null},{"type":"mcp_call","request_id":null,"ts":"2026-04-17T15:35:58.499348Z","duration_ms":50.906,"mcp_method":"tools/list","mcp_id":1,"tool_name":null,"arguments":null,"is_error":false,"result_text_size":0,"error":null},{"request_id":"86d7ccef5c2a4db5bc1b3fe9e7ca8383","ts":"2026-04-17T15:35:58.400328Z","duration_ms":33.589,"method":"GET","path":"/v1/sessions/not-real","query":"","operation_id":"get_session_v1_sessions__session_id__get","client_ip":"192.168.29.10","user_agent":"curl/8.5.0","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"singing-bird.benac.dev","user-agent":"curl/8.5.0","accept":"*/*","via":"2.0 Caddy","x-forwarded-for":"192.168.29.10","x-forwarded-host":"singing-bird.benac.dev","x-forwarded-proto":"https","x-real-ip":"192.168.29.10","accept-encoding":"gzip"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":404,"response":{"headers":{"content-length":"30","content-type":"application/json","x-request-id":"86d7ccef5c2a4db5bc1b3fe9e7ca8383"},"response_body_size":30,"response_body_truncated":false,"response_body_kind":"json","response_body":{"detail":"Session not found"},"response_stream":false},"error":null},{"request_id":"df143dc04ef143f595baa0ffbc6a41be","ts":"2026-04-17T15:35:58.282356Z","duration_ms":104.015,"method":"GET","path":"/v1/scenarios","query":"","operation_id":"list_scenarios_v1_scenarios_get","client_ip":"192.168.29.10","user_agent":"curl/8.5.0","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"singing-bird.benac.dev","user-agent":"curl/8.5.0","accept":"*/*","via":"2.0 Caddy","x-forwarded-for":"192.168.29.10","x-forwarded-host":"singing-bird.benac.dev","x-forwarded-proto":"https","x-real-ip":"192.168.29.10","accept-encoding":"gzip"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"1249","content-type":"application/json","x-request-id":"df143dc04ef143f595baa0ffbc6a41be"},"response_body_size":1249,"response_body_truncated":false,"response_body_kind":"json","response_body":{"scenarios":[{"path":"scenarios/dockside_outpost.yaml","scenario_id":"dockside_outpost","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":777,"locations":3,"entities":8,"processes":2,"synths":3},{"path":"scenarios/lighthouse.yaml","scenario_id":"lighthouse","ruleset_ref":"physical_social_v1","chronon_interval_seconds":300,"random_seed":42,"locations":4,"entities":12,"processes":2,"synths":3},{"path":"scenarios/night_clinic.yaml","scenario_id":"night_clinic","ruleset_ref":"physical_social_v1","chronon_interval_seconds":180,"random_seed":2718,"locations":3,"entities":7,"processes":1,"synths":3},{"path":"scenarios/park_bench.yaml","scenario_id":"park_bench","ruleset_ref":"physical_social_v1","chronon_interval_seconds":180,"random_seed":99,"locations":3,"entities":5,"processes":1,"synths":2},{"path":"scenarios/storm_cellar.yaml","scenario_id":"storm_cellar","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":314,"locations":3,"entities":8,"processes":2,"synths":3},{"path":"scenarios/workshop_blackout.yaml","scenario_id":"workshop_blackout","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":123,"locations":3,"entities":8,"processes":2,"synths":3}]},"response_stream":false},"error":null},{"request_id":"b42a5a73ebbb440b834777303d3fbabd","ts":"2026-04-17T15:35:52.493035Z","duration_ms":0.31,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"b42a5a73ebbb440b834777303d3fbabd"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null},{"request_id":"e23bf2521a254a14903150f3b328c588","ts":"2026-04-17T15:35:42.492811Z","duration_ms":0.389,"method":"GET","path":"/docs","query":"","operation_id":"","client_ip":"192.168.29.10","user_agent":"kube-probe/1.31","auth":{"scheme":null,"scope":"admin","auth_enabled":false,"recognized":true},"request":{"headers":{"host":"10.244.112.162:8420","user-agent":"kube-probe/1.31","accept":"*/*","connection":"close"},"request_body_size":0,"request_body_truncated":false,"request_body_kind":"empty","request_body":null},"status":200,"response":{"headers":{"content-length":"936","content-type":"text/html; charset=utf-8","x-request-id":"e23bf2521a254a14903150f3b328c588"},"response_body_size":936,"response_body_truncated":false,"response_body_kind":"text","response_body":"\n    <!DOCTYPE html>\n    <html>\n    <head>\n    <link type=\"text/css\" rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css\">\n    <link rel=\"shortcut icon\" href=\"https://fastapi.tiangolo.com/img/favicon.png\">\n    <title>Singing Bird - Swagger UI</title>\n    </head>\n    <body>\n    <div id=\"swagger-ui\">\n    </div>\n    <script src=\"https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\n    <!-- `SwaggerUIBundle` is now available on the page -->\n    <script>\n    const ui = SwaggerUIBundle({\n        url: '/openapi.json',\n    \"dom_id\": \"#swagger-ui\",\n\"layout\": \"BaseLayout\",\n\"deepLinking\": true,\n\"showExtensions\": true,\n\"showCommonExtensions\": true,\noauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',\n    presets: [\n        SwaggerUIBundle.presets.apis,\n        SwaggerUIBundle.SwaggerUIStandalonePreset\n        ],\n    })\n    </script>\n    </body>\n    </html>\n    ","response_stream":false},"error":null}],"execution":{"method":"GET","path":"/v1/admin/logs?limit=100","label":"Get last 100 audit records","url":"https://singing-bird.benac.dev/v1/admin/logs?limit=100","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fadmin%2Flogs%3Flimit%3D100&label=Get+last+100+audit+records"},"url":"https://singing-bird.benac.dev/v1/admin/logs"},{"name":"check_llm_health","title":"LLM backend health","tools":["check_llm_health"],"method":"GET","path":"/v1/health/llm","scope":"read","group":"tooling","summary":"Live reachability probe of the configured LLM backend. Status ok, tls_trust_failed, auth_failed, timeout, unreachable, or http_error. See ADR-0001 for why this exists.","option_label":"field","option_hint":"Current backend status:","options":[{"status":"ok","base_url":"https://llm.benac.dev/v1","elapsed_ms":50.37,"http_status":200,"models_count":5}],"execution":{"method":"GET","path":"/v1/health/llm","label":"Probe LLM backend","url":"https://singing-bird.benac.dev/v1/health/llm","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fhealth%2Fllm&label=Probe+LLM+backend"},"url":"https://singing-bird.benac.dev/v1/health/llm"},{"name":"get_tool_manifest","title":"API tool manifest","tools":["get_tool_manifest"],"method":"GET","path":"/v1/tooling/manifest","scope":"read","group":"tooling","summary":"Self-documenting tool list, derived from the OpenAPI schema. This is what external API consumers query to discover what's available.","option_label":"related_endpoint","option_hint":"Other self-doc endpoints exposed by this service:","options":[{"name":"OpenAPI schema (JSON)","path":"/openapi.json","description":"Full OpenAPI 3.1 spec — authoritative source of truth."},{"name":"Swagger UI","path":"/docs","description":"Interactive API explorer with try-it-out forms."},{"name":"ReDoc","path":"/redoc","description":"Alternative, reference-style rendering of the OpenAPI spec."},{"name":"Tool manifest (this tile)","path":"/v1/tooling/manifest","description":"Compact JSON tool list, LLM-friendly."},{"name":"Dashboard JSON","path":"/dashboard/data","description":"JSON mirror of this dashboard."}],"execution":{"method":"GET","path":"/v1/tooling/manifest","label":"Get tool manifest","url":"https://singing-bird.benac.dev/v1/tooling/manifest","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Ftooling%2Fmanifest&label=Get+tool+manifest"},"url":"https://singing-bird.benac.dev/v1/tooling/manifest"},{"name":"create_scenario","title":"Create a new scenario","tools":["create_scenario"],"method":"POST","path":"/v1/scenarios","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":[],"execution":{"method":"POST","path":"/v1/scenarios","label":"Create a new scenario","body":{"scenario_id":"my_draft"},"url":"https://singing-bird.benac.dev/v1/scenarios","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fscenarios&label=Create+a+new+scenario&body=%7B%22scenario_id%22%3A%22my_draft%22%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios"},{"name":"update_scenario","title":"Replace scenario contents","tools":["update_scenario"],"method":"PUT","path":"/v1/scenarios/{scenario_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"PUT","path":"/v1/scenarios/my_scenario","label":"Replace scenario contents","body":{"content":{"scenario_id":"my_draft","schema_version":1,"world":{}}},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario","execute_href":"/dashboard/execute?method=PUT&path=%2Fv1%2Fscenarios%2Fmy_scenario&label=Replace+scenario+contents&body=%7B%22content%22%3A%7B%22scenario_id%22%3A%22my_draft%22%2C%22schema_version%22%3A1%2C%22world%22%3A%7B%7D%7D%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}"},{"name":"delete_scenario","title":"Delete a user scenario","tools":["delete_scenario"],"method":"DELETE","path":"/v1/scenarios/{scenario_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"DELETE","path":"/v1/scenarios/my_scenario","label":"Delete a user scenario","url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario","execute_href":"/dashboard/execute?method=DELETE&path=%2Fv1%2Fscenarios%2Fmy_scenario&label=Delete+a+user+scenario"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}"},{"name":"fork_scenario","title":"Fork a scenario under a new id","tools":["fork_scenario"],"method":"POST","path":"/v1/scenarios/{scenario_id}/fork","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"POST","path":"/v1/scenarios/my_scenario/fork","label":"Fork a scenario under a new id","body":{"new_scenario_id":"lighthouse_v2"},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/fork","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Ffork&label=Fork+a+scenario+under+a+new+id&body=%7B%22new_scenario_id%22%3A%22lighthouse_v2%22%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/fork"},{"name":"add_location","title":"Add a location","tools":["add_location"],"method":"POST","path":"/v1/scenarios/{scenario_id}/locations","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"POST","path":"/v1/scenarios/my_scenario/locations","label":"Add a location","body":{"id":"garden","name":"Walled Garden","kind":"exterior","description":"A quiet garden."},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/locations","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Flocations&label=Add+a+location&body=%7B%22id%22%3A%22garden%22%2C%22name%22%3A%22Walled+Garden%22%2C%22kind%22%3A%22exterior%22%2C%22description%22%3A%22A+quiet+garden.%22%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/locations"},{"name":"replace_location","title":"Replace a location (destructive)","tools":["replace_location"],"method":"PUT","path":"/v1/scenarios/{scenario_id}/locations/{loc_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"PUT","path":"/v1/scenarios/my_scenario/locations/my_location","label":"Replace a location (destructive)","body":{"id":"garden","name":"Overgrown Garden","kind":"exterior"},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/locations/my_location","execute_href":"/dashboard/execute?method=PUT&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Flocations%2Fmy_location&label=Replace+a+location+%28destructive%29&body=%7B%22id%22%3A%22garden%22%2C%22name%22%3A%22Overgrown+Garden%22%2C%22kind%22%3A%22exterior%22%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/locations/{loc_id}"},{"name":"patch_location","title":"Patch a location (merge)","tools":["patch_location"],"method":"PATCH","path":"/v1/scenarios/{scenario_id}/locations/{loc_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"PATCH","path":"/v1/scenarios/my_scenario/locations/my_location","label":"Patch a location (merge)","body":{"description":"Now with a fountain."},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/locations/my_location","execute_href":"/dashboard/execute?method=PATCH&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Flocations%2Fmy_location&label=Patch+a+location+%28merge%29&body=%7B%22description%22%3A%22Now+with+a+fountain.%22%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/locations/{loc_id}"},{"name":"remove_location","title":"Remove a location","tools":["remove_location"],"method":"DELETE","path":"/v1/scenarios/{scenario_id}/locations/{loc_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"DELETE","path":"/v1/scenarios/my_scenario/locations/my_location","label":"Remove a location","url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/locations/my_location","execute_href":"/dashboard/execute?method=DELETE&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Flocations%2Fmy_location&label=Remove+a+location"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/locations/{loc_id}"},{"name":"add_entity","title":"Add a ruleset-validated entity","tools":["add_entity"],"method":"POST","path":"/v1/scenarios/{scenario_id}/entities","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"POST","path":"/v1/scenarios/my_scenario/entities","label":"Add a ruleset-validated entity","body":{"id":"bench","name":"Bench","location":"garden","components":[{"type":"seating","capacity":2}]},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/entities","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fentities&label=Add+a+ruleset-validated+entity&body=%7B%22id%22%3A%22bench%22%2C%22name%22%3A%22Bench%22%2C%22location%22%3A%22garden%22%2C%22components%22%3A%5B%7B%22type%22%3A%22seating%22%2C%22capacity%22%3A2%7D%5D%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/entities"},{"name":"replace_entity","title":"Replace an entity (destructive)","tools":["replace_entity"],"method":"PUT","path":"/v1/scenarios/{scenario_id}/entities/{entity_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"PUT","path":"/v1/scenarios/my_scenario/entities/my_entity","label":"Replace an entity (destructive)","body":{"id":"bench","name":"Stone Bench","location":"garden","components":[{"type":"seating","capacity":4}]},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/entities/my_entity","execute_href":"/dashboard/execute?method=PUT&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fentities%2Fmy_entity&label=Replace+an+entity+%28destructive%29&body=%7B%22id%22%3A%22bench%22%2C%22name%22%3A%22Stone+Bench%22%2C%22location%22%3A%22garden%22%2C%22components%22%3A%5B%7B%22type%22%3A%22seating%22%2C%22capacity%22%3A4%7D%5D%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/entities/{entity_id}"},{"name":"patch_entity","title":"Patch an entity (merge)","tools":["patch_entity"],"method":"PATCH","path":"/v1/scenarios/{scenario_id}/entities/{entity_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"PATCH","path":"/v1/scenarios/my_scenario/entities/my_entity","label":"Patch an entity (merge)","body":{"name":"Stone Bench"},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/entities/my_entity","execute_href":"/dashboard/execute?method=PATCH&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fentities%2Fmy_entity&label=Patch+an+entity+%28merge%29&body=%7B%22name%22%3A%22Stone+Bench%22%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/entities/{entity_id}"},{"name":"remove_entity","title":"Remove an entity","tools":["remove_entity"],"method":"DELETE","path":"/v1/scenarios/{scenario_id}/entities/{entity_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"DELETE","path":"/v1/scenarios/my_scenario/entities/my_entity","label":"Remove an entity","url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/entities/my_entity","execute_href":"/dashboard/execute?method=DELETE&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fentities%2Fmy_entity&label=Remove+an+entity"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/entities/{entity_id}"},{"name":"add_synth","title":"Add a synth","tools":["add_synth"],"method":"POST","path":"/v1/scenarios/{scenario_id}/synths","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"POST","path":"/v1/scenarios/my_scenario/synths","label":"Add a synth","body":{"id":"alice","entity":"alice_body","identity":{"name":"Alice","kind":"human"},"embodiment_profile":"standard_human","cognition":{"model":"@chat","temperature":0.7}},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/synths","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fsynths&label=Add+a+synth&body=%7B%22id%22%3A%22alice%22%2C%22entity%22%3A%22alice_body%22%2C%22identity%22%3A%7B%22name%22%3A%22Alice%22%2C%22kind%22%3A%22human%22%7D%2C%22embodiment_profile%22%3A%22standard_human%22%2C%22cognition%22%3A%7B%22model%22%3A%22%40chat%22%2C%22temperature%22%3A0.7%7D%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/synths"},{"name":"replace_synth","title":"Replace a synth (destructive; drops unsent fields)","tools":["replace_synth"],"method":"PUT","path":"/v1/scenarios/{scenario_id}/synths/{synth_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"PUT","path":"/v1/scenarios/my_scenario/synths/my_synth","label":"Replace a synth (destructive; drops unsent fields)","body":{"id":"alice","entity":"alice_body","identity":{"name":"Alice","kind":"human"},"embodiment_profile":"standard_human","cognition":{"model":"@chat"}},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/synths/my_synth","execute_href":"/dashboard/execute?method=PUT&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fsynths%2Fmy_synth&label=Replace+a+synth+%28destructive%3B+drops+unsent+fields%29&body=%7B%22id%22%3A%22alice%22%2C%22entity%22%3A%22alice_body%22%2C%22identity%22%3A%7B%22name%22%3A%22Alice%22%2C%22kind%22%3A%22human%22%7D%2C%22embodiment_profile%22%3A%22standard_human%22%2C%22cognition%22%3A%7B%22model%22%3A%22%40chat%22%7D%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/synths/{synth_id}"},{"name":"patch_synth","title":"Patch a synth (merge; safest way to tweak)","tools":["patch_synth"],"method":"PATCH","path":"/v1/scenarios/{scenario_id}/synths/{synth_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"PATCH","path":"/v1/scenarios/my_scenario/synths/my_synth","label":"Patch a synth (merge; safest way to tweak)","body":{"initial_state":{"beliefs":[]}},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/synths/my_synth","execute_href":"/dashboard/execute?method=PATCH&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fsynths%2Fmy_synth&label=Patch+a+synth+%28merge%3B+safest+way+to+tweak%29&body=%7B%22initial_state%22%3A%7B%22beliefs%22%3A%5B%5D%7D%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/synths/{synth_id}"},{"name":"remove_synth","title":"Remove a synth","tools":["remove_synth"],"method":"DELETE","path":"/v1/scenarios/{scenario_id}/synths/{synth_id}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"DELETE","path":"/v1/scenarios/my_scenario/synths/my_synth","label":"Remove a synth","url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/synths/my_synth","execute_href":"/dashboard/execute?method=DELETE&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fsynths%2Fmy_synth&label=Remove+a+synth"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/synths/{synth_id}"},{"name":"add_adjacency","title":"Connect two locations","tools":["add_adjacency"],"method":"POST","path":"/v1/scenarios/{scenario_id}/adjacency","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"POST","path":"/v1/scenarios/my_scenario/adjacency","label":"Connect two locations","body":{"from":"start","to":"garden","kind":"path","bidirectional":true},"url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/adjacency","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fadjacency&label=Connect+two+locations&body=%7B%22from%22%3A%22start%22%2C%22to%22%3A%22garden%22%2C%22kind%22%3A%22path%22%2C%22bidirectional%22%3Atrue%7D"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/adjacency"},{"name":"remove_adjacency","title":"Disconnect two locations","tools":["remove_adjacency"],"method":"DELETE","path":"/v1/scenarios/{scenario_id}/adjacency?from_location={from}&to_location={to}","scope":"operate","group":"sessions","summary":"Scenario authoring — writes to data/scenarios/. Shipped baselines stay read-only; writes to a shipped id shadow the original.","preconditions":["scenario_id"],"execution":{"method":"DELETE","path":"/v1/scenarios/my_scenario/adjacency?from_location=a&to_location=b","label":"Disconnect two locations","url":"https://singing-bird.benac.dev/v1/scenarios/my_scenario/adjacency?from_location=a&to_location=b","execute_href":"/dashboard/execute?method=DELETE&path=%2Fv1%2Fscenarios%2Fmy_scenario%2Fadjacency%3Ffrom_location%3Da%26to_location%3Db&label=Disconnect+two+locations"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}/adjacency?from_location={from}&to_location={to}"},{"name":"get_scenario","title":"Inspect a scenario pack","tools":["get_scenario"],"method":"GET","path":"/v1/scenarios/{scenario_id}","scope":"read","group":"sessions","summary":"Full pre-hydration view of a scenario — locations, entities, synths, processes, latent facts, embodiment profiles, environment. Pass ?format=raw for the unparsed YAML text.","option_label":"scenario_id","option_hint":"Sample below is 'dockside_outpost'. Swap in any scenario_id from list_scenarios.","options":[{"path":"scenarios/dockside_outpost.yaml","scenario_id":"dockside_outpost","ruleset_ref":"physical_social_v1","chronon_interval_seconds":240,"random_seed":777,"locations":3,"entities":8,"processes":2,"synths":3,"content":{"locations":[{"id":"dock_shed","name":"Dock Shed","kind":"room","parent":null,"description":"A salt-stiff wooden shed holding ropes, spare lantern parts, a bench, and a thermos that has gone lukewarm.\n"},{"id":"pier","name":"Pier","kind":"exterior","parent":null,"description":"Wet planks stretching out into gray water. The railings sweat with fog and the morning is not yet fully awake.\n"},{"id":"road_turnout","name":"Road Turnout","kind":"exterior","parent":null,"description":"A gravel turnout above the dock where travelers wait for the first boat or decide not to trust the weather.\n"}],"adjacency":[{"from":"dock_shed","to":"pier","kind":"door","bidirectional":true},{"from":"pier","to":"road_turnout","kind":"path","bidirectional":true}],"entities":[{"id":"signal_lantern","name":"Signal Lantern","location":"pier","mobility":"fixed","component_types":["light_source","repairable","switchable","fixed"]},{"id":"fog_bell","name":"Fog Bell","location":"pier","mobility":"fixed","component_types":["fixed","sound_source"]},{"id":"supply_crate","name":"Supply Crate","location":"dock_shed","mobility":"movable","component_types":["container"]},{"id":"thermos","name":"Thermos","location":"dock_shed","mobility":"movable","component_types":["portable","consumable"]},{"id":"mooring_rope","name":"Mooring Rope","location":"pier","mobility":"fixed","component_types":["fixed","sound_source"]},{"id":"inez_body","name":"Inez","location":"dock_shed","mobility":"movable","component_types":[]},{"id":"pavel_body","name":"Pavel","location":"road_turnout","mobility":"movable","component_types":[]},{"id":"sora_body","name":"Sora","location":"pier","mobility":"movable","component_types":[]}],"processes":[{"id":"fog_thickens","name":"Fog Thickens","kind":"weather","initial_state":"harbor_fog","transition_count":1},{"id":"morning_lifts","name":"Morning Slow Lift","kind":"celestial","initial_state":"predawn","transition_count":1}],"latent_facts":[{"id":"mantle_truth","scope":"signal_lantern","description":"What is actually wrong with the signal lantern"}],"synths":[{"id":"inez","name":"Inez","kind":"human","entity":"inez_body","embodiment_profile":"standard_human","cognition_model":"@chat","traits":["steady","brisk","unsentimental"],"initial_mood":"focused","initial_beliefs_count":2,"initial_projects_count":1,"initial_memories_count":1},{"id":"pavel","name":"Pavel","kind":"human","entity":"pavel_body","embodiment_profile":"standard_human","cognition_model":"@chat","traits":["patient","skeptical","cold","polite"],"initial_mood":"uncertain","initial_beliefs_count":1,"initial_projects_count":1,"initial_memories_count":1},{"id":"sora","name":"Sora","kind":"human","entity":"sora_body","embodiment_profile":"standard_human","cognition_model":"@chat","traits":["capable","laconic","watchful"],"initial_mood":"watchful","initial_beliefs_count":2,"initial_projects_count":1,"initial_memories_count":1}],"embodiment_profiles":["standard_human"],"environment":{"celestial":{"sun_altitude":-4.0,"phase":"predawn","description":"Predawn gray presses down on the harbor and blurs the horizon."},"weather":{"condition":"foggy","wind_speed":8.0,"wind_direction":"east","description":"Fog banks drift through the pilings and leave everything beaded with water."},"ambient":{"light_level":0.18,"temperature":11.0}}},"parsed":{"scenario_id":"dockside_outpost","schema_version":1,"ruleset_ref":"physical_social_v1","random_seed":777,"runtime_defaults":{"chronon_interval_seconds":240,"max_recursion_depth":6,"max_events_per_cycle":60},"profiles":{"embodiment_profiles":{"standard_human":{"sensory":[{"channel":"visual","range":70.0,"acuity":1.0},{"channel":"auditory","range":45.0,"acuity":1.0},{"channel":"tactile","range":1.0,"acuity":1.0},{"channel":"proprioceptive","range":0.0,"acuity":1.0}],"actuators":[{"name":"hands","description":"can carry, inspect, and manipulate objects","range":1.5},{"name":"locomotion","description":"can move between shed and pier","range":1.0}],"communication":["speech"]}}},"world":{"simulation_time":"2026-08-29T05:40:00","chronon_interval_seconds":240,"topology":{"locations":[{"id":"dock_shed","name":"Dock Shed","kind":"room","description":"A salt-stiff wooden shed holding ropes, spare lantern parts, a bench, and a thermos that has gone lukewarm.\n"},{"id":"pier","name":"Pier","kind":"exterior","description":"Wet planks stretching out into gray water. The railings sweat with fog and the morning is not yet fully awake.\n"},{"id":"road_turnout","name":"Road Turnout","kind":"exterior","description":"A gravel turnout above the dock where travelers wait for the first boat or decide not to trust the weather.\n"}],"adjacency":[{"from":"dock_shed","to":"pier","kind":"door","bidirectional":true},{"from":"pier","to":"road_turnout","kind":"path","bidirectional":true}]},"entities":[{"id":"signal_lantern","name":"Signal Lantern","location":"pier","mobility":"fixed","description":"A harbor lantern mounted chest-high near the end of the pier.","components":[{"type":"light_source","functional":false,"intensity":3.5,"range":60.0,"description":"The lantern is dark and glass-fogged."},{"type":"repairable","condition":"dirty_mantle","difficulty":0.45,"description":"The mantle assembly is dirty and the latch sticks."},{"type":"switchable","state":"off"},{"type":"fixed"}]},{"id":"fog_bell","name":"Fog Bell","location":"pier","mobility":"fixed","description":"A hand bell mounted on a post by the rail.","components":[{"type":"fixed"},{"type":"sound_source","description":"Metal rings out dull and heavy through the fog.","volume":0.4}]},{"id":"supply_crate","name":"Supply Crate","location":"dock_shed","mobility":"movable","description":"A dock crate with simple emergency supplies.","components":[{"type":"container","contents":["rag","matches","spare_mantle"]}]},{"id":"thermos","name":"Thermos","location":"dock_shed","mobility":"movable","description":"A metal thermos with a little coffee left in it.","components":[{"type":"portable"},{"type":"consumable","uses_remaining":1,"effect_description":"The coffee is lukewarm and bitter, but it wakes you up."}]},{"id":"mooring_rope","name":"Mooring Rope","location":"pier","mobility":"fixed","description":"Rope knocking softly against a wet cleat.","components":[{"type":"fixed"},{"type":"sound_source","description":"Wet rope taps and scrapes against the cleat.","volume":0.2}]},{"id":"inez_body","name":"Inez","location":"dock_shed","mobility":"movable","components":[]},{"id":"pavel_body","name":"Pavel","location":"road_turnout","mobility":"movable","components":[]},{"id":"sora_body","name":"Sora","location":"pier","mobility":"movable","components":[]}],"environment":{"celestial":{"sun_altitude":-4.0,"phase":"predawn","description":"Predawn gray presses down on the harbor and blurs the horizon."},"weather":{"condition":"foggy","wind_speed":8.0,"wind_direction":"east","description":"Fog banks drift through the pilings and leave everything beaded with water."},"ambient":{"light_level":0.18,"temperature":11.0}},"processes":[{"id":"fog_thickens","name":"Fog Thickens","kind":"weather","initial_state":"harbor_fog","transitions":[{"from":"harbor_fog","to":"heavy_fog","trigger_time":"2026-08-29T05:48:00","effects":{"environment.weather.condition":"heavy_fog","environment.ambient.light_level":0.12,"visual_description":"The fog thickens until shapes feel cut from paper.","auditory_description":"Every sound seems closer and farther at once in the fog."},"description":"Fog closes in"}]},{"id":"morning_lifts","name":"Morning Slow Lift","kind":"celestial","initial_state":"predawn","transitions":[{"from":"predawn","to":"first_light","trigger_time":"2026-08-29T05:56:00","effects":{"environment.celestial.phase":"first_light","environment.celestial.sun_altitude":1.0,"environment.ambient.light_level":0.28,"visual_description":"A pale line of morning appears behind the fog."},"description":"First light shows through"}]}],"latent_facts":[{"id":"mantle_truth","scope":"signal_lantern","description":"What is actually wrong with the signal lantern","allowed_values":["dirty_mantle","loose_latch","damp_fuel_line"],"default_prior":"dirty_mantle"}]},"synths":[{"id":"inez","entity":"inez_body","embodiment_profile":"standard_human","identity":{"name":"Inez","kind":"human","biography":"Inez opens the outpost before dawn and thinks in checklists when the weather turns doubtful.\n","traits":["steady","brisk","unsentimental"],"values":["reliability","safety","competence"]},"initial_state":{"believed_location":"Dock Shed","affect":{"mood":"focused","valence":0.0,"arousal":0.4,"stress":0.3,"drives":["get the signal lantern working","read the weather","decide whether service is wise"]},"beliefs":[{"subject":"signal lantern","predicate":"is","value":"out and needs attention","confidence":0.9,"source_modality":"prior"},{"subject":"the fog","predicate":"is","value":"thick enough that people will start asking questions","confidence":0.8,"source_modality":"visual"}],"projects":[{"title":"Restore the dock signal","goal":"Get the lantern working before the first real movement on the pier","motivation":"Bad weather is survivable; bad weather and confusion are worse","status":"active","priority":1}],"memories":[{"type":"semantic","content":"In fog, people trust a lit signal more than any spoken reassurance.","salience":0.6,"source_modality":"prior"}]},"cognition":{"model":"@chat","temperature":0.9}},{"id":"pavel","entity":"pavel_body","embodiment_profile":"standard_human","identity":{"name":"Pavel","kind":"human","biography":"Pavel arrived early for the crossing and now suspects he may be early for bad news instead.\n","traits":["patient","skeptical","cold","polite"],"values":["clarity","caution","getting where I said I would go"]},"initial_state":{"believed_location":"Road Turnout","affect":{"mood":"uncertain","valence":-0.1,"arousal":0.4,"stress":0.2,"drives":["learn whether the crossing is happening","stay warm","not waste the morning"]},"beliefs":[{"subject":"the harbor","predicate":"is","value":"too fogged in to trust casually","confidence":0.8,"source_modality":"visual"}],"projects":[{"title":"Decide whether to wait or leave","goal":"Get a reliable sense of whether the dock is operating this morning","motivation":"I would rather lose time than gamble stupidly in bad conditions","status":"active","priority":0}],"memories":[{"type":"episodic","content":"I once sat six hours at a different dock because nobody would give a straight answer about the weather.","salience":0.5,"source_modality":"prior"}]},"cognition":{"model":"@chat","temperature":0.9}},{"id":"sora","entity":"sora_body","embodiment_profile":"standard_human","identity":{"name":"Sora","kind":"human","biography":"Sora works the small harbor boats and trusts sound on the water almost as much as sight.\n","traits":["capable","laconic","watchful"],"values":["good judgment","calm","not boasting"]},"initial_state":{"believed_location":"Pier","affect":{"mood":"watchful","valence":0.0,"arousal":0.5,"stress":0.3,"drives":["read the harbor honestly","help without making promises I cannot keep"]},"beliefs":[{"subject":"the pier","predicate":"is","value":"safer when the signal lantern is working","confidence":0.9,"source_modality":"prior"},{"subject":"pavel","predicate":"is","value":"likely to ask whether the crossing is happening","confidence":0.6,"source_modality":"prior"}],"projects":[{"title":"Judge the morning crossing","goal":"Decide whether conditions are safe enough for movement at first light","motivation":"Better a disappointed traveler than an avoidable rescue","status":"active","priority":1}],"memories":[{"type":"procedural","content":"In fog, bells and lamps matter more than confident voices.","salience":0.6,"source_modality":"prior"}]},"cognition":{"model":"@chat","temperature":0.9}}]},"raw":"scenario_id: dockside_outpost\nschema_version: 1\nruleset_ref: physical_social_v1\nrandom_seed: 777\n\nruntime_defaults:\n  chronon_interval_seconds: 240\n  max_recursion_depth: 6\n  max_events_per_cycle: 60\n\nprofiles:\n  embodiment_profiles:\n    standard_human:\n      sensory:\n        - channel: visual\n          range: 70.0\n          acuity: 1.0\n        - channel: auditory\n          range: 45.0\n          acuity: 1.0\n        - channel: tactile\n          range: 1.0\n          acuity: 1.0\n        - channel: proprioceptive\n          range: 0.0\n          acuity: 1.0\n      actuators:\n        - name: hands\n          description: can carry, inspect, and manipulate objects\n          range: 1.5\n        - name: locomotion\n          description: can move between shed and pier\n          range: 1.0\n      communication:\n        - speech\n\nworld:\n  simulation_time: \"2026-08-29T05:40:00\"\n  chronon_interval_seconds: 240\n\n  topology:\n    locations:\n      - id: dock_shed\n        name: Dock Shed\n        kind: room\n        description: >\n          A salt-stiff wooden shed holding ropes, spare lantern parts,\n          a bench, and a thermos that has gone lukewarm.\n\n      - id: pier\n        name: Pier\n        kind: exterior\n        description: >\n          Wet planks stretching out into gray water. The railings sweat with\n          fog and the morning is not yet fully awake.\n\n      - id: road_turnout\n        name: Road Turnout\n        kind: exterior\n        description: >\n          A gravel turnout above the dock where travelers wait for the first\n          boat or decide not to trust the weather.\n\n    adjacency:\n      - from: dock_shed\n        to: pier\n        kind: door\n        bidirectional: true\n      - from: pier\n        to: road_turnout\n        kind: path\n        bidirectional: true\n\n  entities:\n    - id: signal_lantern\n      name: Signal Lantern\n      location: pier\n      mobility: fixed\n      description: A harbor lantern mounted chest-high near the end of the pier.\n      components:\n        - type: light_source\n          functional: false\n          intensity: 3.5\n          range: 60.0\n          description: \"The lantern is dark and glass-fogged.\"\n        - type: repairable\n          condition: dirty_mantle\n          difficulty: 0.45\n          description: \"The mantle assembly is dirty and the latch sticks.\"\n        - type: switchable\n          state: \"off\"\n        - type: fixed\n\n    - id: fog_bell\n      name: Fog Bell\n      location: pier\n      mobility: fixed\n      description: A hand bell mounted on a post by the rail.\n      components:\n        - type: fixed\n        - type: sound_source\n          description: \"Metal rings out dull and heavy through the fog.\"\n          volume: 0.4\n\n    - id: supply_crate\n      name: Supply Crate\n      location: dock_shed\n      mobility: movable\n      description: A dock crate with simple emergency supplies.\n      components:\n        - type: container\n          contents: [rag, matches, spare_mantle]\n\n    - id: thermos\n      name: Thermos\n      location: dock_shed\n      mobility: movable\n      description: A metal thermos with a little coffee left in it.\n      components:\n        - type: portable\n        - type: consumable\n          uses_remaining: 1\n          effect_description: \"The coffee is lukewarm and bitter, but it wakes you up.\"\n\n    - id: mooring_rope\n      name: Mooring Rope\n      location: pier\n      mobility: fixed\n      description: Rope knocking softly against a wet cleat.\n      components:\n        - type: fixed\n        - type: sound_source\n          description: \"Wet rope taps and scrapes against the cleat.\"\n          volume: 0.2\n\n    - id: inez_body\n      name: Inez\n      location: dock_shed\n      mobility: movable\n      components: []\n\n    - id: pavel_body\n      name: Pavel\n      location: road_turnout\n      mobility: movable\n      components: []\n\n    - id: sora_body\n      name: Sora\n      location: pier\n      mobility: movable\n      components: []\n\n  environment:\n    celestial:\n      sun_altitude: -4.0\n      phase: predawn\n      description: \"Predawn gray presses down on the harbor and blurs the horizon.\"\n    weather:\n      condition: foggy\n      wind_speed: 8.0\n      wind_direction: east\n      description: \"Fog banks drift through the pilings and leave everything beaded with water.\"\n    ambient:\n      light_level: 0.18\n      temperature: 11.0\n\n  processes:\n    - id: fog_thickens\n      name: Fog Thickens\n      kind: weather\n      initial_state: harbor_fog\n      transitions:\n        - from: harbor_fog\n          to: heavy_fog\n          trigger_time: \"2026-08-29T05:48:00\"\n          effects:\n            \"environment.weather.condition\": \"heavy_fog\"\n            \"environment.ambient.light_level\": 0.12\n            visual_description: \"The fog thickens until shapes feel cut from paper.\"\n            auditory_description: \"Every sound seems closer and farther at once in the fog.\"\n          description: \"Fog closes in\"\n    - id: morning_lifts\n      name: Morning Slow Lift\n      kind: celestial\n      initial_state: predawn\n      transitions:\n        - from: predawn\n          to: first_light\n          trigger_time: \"2026-08-29T05:56:00\"\n          effects:\n            \"environment.celestial.phase\": \"first_light\"\n            \"environment.celestial.sun_altitude\": 1.0\n            \"environment.ambient.light_level\": 0.28\n            visual_description: \"A pale line of morning appears behind the fog.\"\n          description: \"First light shows through\"\n\n  latent_facts:\n    - id: mantle_truth\n      scope: signal_lantern\n      description: \"What is actually wrong with the signal lantern\"\n      allowed_values: [dirty_mantle, loose_latch, damp_fuel_line]\n      default_prior: dirty_mantle\n\nsynths:\n  - id: inez\n    entity: inez_body\n    embodiment_profile: standard_human\n    identity:\n      name: Inez\n      kind: human\n      biography: >\n        Inez opens the outpost before dawn and thinks in checklists when the\n        weather turns doubtful.\n      traits: [steady, brisk, unsentimental]\n      values: [reliability, safety, competence]\n    initial_state:\n      believed_location: Dock Shed\n      affect:\n        mood: focused\n        valence: 0.0\n        arousal: 0.4\n        stress: 0.3\n        drives: [get the signal lantern working, read the weather, decide whether service is wise]\n      beliefs:\n        - subject: signal lantern\n          predicate: is\n          value: out and needs attention\n          confidence: 0.9\n          source_modality: prior\n        - subject: the fog\n          predicate: is\n          value: thick enough that people will start asking questions\n          confidence: 0.8\n          source_modality: visual\n      projects:\n        - title: Restore the dock signal\n          goal: Get the lantern working before the first real movement on the pier\n          motivation: Bad weather is survivable; bad weather and confusion are worse\n          status: active\n          priority: 1\n      memories:\n        - type: semantic\n          content: \"In fog, people trust a lit signal more than any spoken reassurance.\"\n          salience: 0.6\n          source_modality: prior\n    cognition:\n      model: \"@chat\"\n      temperature: 0.9\n\n  - id: pavel\n    entity: pavel_body\n    embodiment_profile: standard_human\n    identity:\n      name: Pavel\n      kind: human\n      biography: >\n        Pavel arrived early for the crossing and now suspects he may be early\n        for bad news instead.\n      traits: [patient, skeptical, cold, polite]\n      values: [clarity, caution, getting where I said I would go]\n    initial_state:\n      believed_location: Road Turnout\n      affect:\n        mood: uncertain\n        valence: -0.1\n        arousal: 0.4\n        stress: 0.2\n        drives: [learn whether the crossing is happening, stay warm, not waste the morning]\n      beliefs:\n        - subject: the harbor\n          predicate: is\n          value: too fogged in to trust casually\n          confidence: 0.8\n          source_modality: visual\n      projects:\n        - title: Decide whether to wait or leave\n          goal: Get a reliable sense of whether the dock is operating this morning\n          motivation: I would rather lose time than gamble stupidly in bad conditions\n          status: active\n          priority: 0\n      memories:\n        - type: episodic\n          content: \"I once sat six hours at a different dock because nobody would give a straight answer about the weather.\"\n          salience: 0.5\n          source_modality: prior\n    cognition:\n      model: \"@chat\"\n      temperature: 0.9\n\n  - id: sora\n    entity: sora_body\n    embodiment_profile: standard_human\n    identity:\n      name: Sora\n      kind: human\n      biography: >\n        Sora works the small harbor boats and trusts sound on the water almost\n        as much as sight.\n      traits: [capable, laconic, watchful]\n      values: [good judgment, calm, not boasting]\n    initial_state:\n      believed_location: Pier\n      affect:\n        mood: watchful\n        valence: 0.0\n        arousal: 0.5\n        stress: 0.3\n        drives: [read the harbor honestly, help without making promises I cannot keep]\n      beliefs:\n        - subject: the pier\n          predicate: is\n          value: safer when the signal lantern is working\n          confidence: 0.9\n          source_modality: prior\n        - subject: pavel\n          predicate: is\n          value: likely to ask whether the crossing is happening\n          confidence: 0.6\n          source_modality: prior\n      projects:\n        - title: Judge the morning crossing\n          goal: Decide whether conditions are safe enough for movement at first light\n          motivation: Better a disappointed traveler than an avoidable rescue\n          status: active\n          priority: 1\n      memories:\n        - type: procedural\n          content: \"In fog, bells and lamps matter more than confident voices.\"\n          salience: 0.6\n          source_modality: prior\n    cognition:\n      model: \"@chat\"\n      temperature: 0.9\n"}],"execution":{"method":"GET","path":"/v1/scenarios/dockside_outpost","label":"Inspect dockside_outpost","url":"https://singing-bird.benac.dev/v1/scenarios/dockside_outpost","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fscenarios%2Fdockside_outpost&label=Inspect+dockside_outpost"},"url":"https://singing-bird.benac.dev/v1/scenarios/{scenario_id}"},{"name":"list_sessions","title":"Active simulation sessions","tools":["list_sessions"],"method":"GET","path":"/v1/sessions","scope":"read","group":"sessions","summary":"List active simulation sessions with live cycle and sim-time state.","option_label":"session_id","option_hint":"Pass a session_id to any /v1/sessions/{id}/... endpoint.","options":[{"session_id":"479d31dd","scenario_path":"data/scenarios/lighthouse_test_base.yaml","created_at":"2026-04-18T14:21:26.550267","paused":true,"cycle":2,"simulation_time":"1847-10-14T19:40:00","synth_count":3}],"execution":{"method":"GET","path":"/v1/sessions","label":"List sessions","url":"https://singing-bird.benac.dev/v1/sessions","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions&label=List+sessions"},"url":"https://singing-bird.benac.dev/v1/sessions"},{"name":"create_session","title":"Start a new simulation","tools":["create_session"],"method":"POST","path":"/v1/sessions","scope":"operate","group":"sessions","summary":"Start a new simulation from a scenario pack. State-changing: Run will prompt for confirmation before firing.","preconditions":["scenario_path from list_scenarios"],"execution":{"method":"POST","path":"/v1/sessions","body":{"scenario_path":"scenarios/park_bench.yaml"},"label":"Create session (park_bench)","url":"https://singing-bird.benac.dev/v1/sessions","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions&label=Create+session+%28park_bench%29&body=%7B%22scenario_path%22%3A%22scenarios%2Fpark_bench.yaml%22%7D"},"url":"https://singing-bird.benac.dev/v1/sessions"},{"name":"get_session","title":"Inspect one session","tools":["get_session"],"method":"GET","path":"/v1/sessions/{session_id}","scope":"read","group":"sessions","summary":"Fetch a single session's current state (same shape as get_overview).","preconditions":["live session_id (from list_sessions)"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd","label":"Get session 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd&label=Get+session+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}"},{"name":"close_session","title":"Close and destroy a session","tools":["close_session"],"method":"DELETE","path":"/v1/sessions/{session_id}","scope":"operate","group":"sessions","summary":"Destroy a session. State-changing; snapshot first if you may want it back.","preconditions":["live session_id"],"execution":{"method":"DELETE","path":"/v1/sessions/479d31dd","label":"Close session 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd","execute_href":"/dashboard/execute?method=DELETE&path=%2Fv1%2Fsessions%2F479d31dd&label=Close+session+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}"},{"name":"list_snapshots","title":"Snapshots for a session","tools":["list_snapshots"],"method":"GET","path":"/v1/sessions/{session_id}/snapshots","scope":"read","group":"sessions","summary":"List automatic cycle-boundary snapshots for a session. Pair with restore_snapshot to roll back.","preconditions":["live session_id"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/snapshots","label":"List snapshots for 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/snapshots","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fsnapshots&label=List+snapshots+for+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/snapshots"},{"name":"restore_snapshot","title":"Roll back to a snapshot","tools":["restore_snapshot"],"method":"POST","path":"/v1/sessions/{session_id}/restore","scope":"operate","group":"sessions","summary":"Roll back a session to a prior snapshot. State-changing.","preconditions":["live session_id","snapshot_ref from list_snapshots"],"execution":{"method":"POST","path":"/v1/sessions/479d31dd/restore","body":{"snapshot_ref":"{snapshot_ref}"},"label":"Restore snapshot on 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/restore","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions%2F479d31dd%2Frestore&label=Restore+snapshot+on+479d31dd&body=%7B%22snapshot_ref%22%3A%22%7Bsnapshot_ref%7D%22%7D"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/restore"},{"name":"step_session","title":"Advance N cognitive cycles","tools":["step_session"],"method":"POST","path":"/v1/sessions/{session_id}/step","scope":"operate","group":"control","summary":"Advance the session by N cognitive cycles. State-changing.","preconditions":["live session_id"],"execution":{"method":"POST","path":"/v1/sessions/479d31dd/step","body":{"n":1},"label":"Step 479d31dd once","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/step","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions%2F479d31dd%2Fstep&label=Step+479d31dd+once&body=%7B%22n%22%3A1%7D"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/step"},{"name":"pause_session","title":"Pause auto-advance","tools":["pause_session"],"method":"POST","path":"/v1/sessions/{session_id}/pause","scope":"operate","group":"control","summary":"Pause auto-advance. The session must be running (see resume_session).","preconditions":["live session_id"],"execution":{"method":"POST","path":"/v1/sessions/479d31dd/pause","body":{},"label":"Pause 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/pause","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions%2F479d31dd%2Fpause&label=Pause+479d31dd&body=%7B%7D"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/pause"},{"name":"resume_session","title":"Resume auto-advance","tools":["resume_session"],"method":"POST","path":"/v1/sessions/{session_id}/resume","scope":"operate","group":"control","summary":"Resume auto-advance. Sessions start paused after create_session.","preconditions":["live session_id"],"execution":{"method":"POST","path":"/v1/sessions/479d31dd/resume","body":{},"label":"Resume 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/resume","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions%2F479d31dd%2Fresume&label=Resume+479d31dd&body=%7B%7D"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/resume"},{"name":"submit_turn","title":"Inject an external turn","tools":["submit_turn"],"method":"POST","path":"/v1/sessions/{session_id}/turns","scope":"operate","group":"control","summary":"Inject a turn from an external origin (e.g. a human operator). State-changing.","preconditions":["live session_id"],"execution":{"method":"POST","path":"/v1/sessions/479d31dd/turns","body":{"origin_type":"human","payload":{"text":"hello there"}},"label":"Submit turn on 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/turns","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions%2F479d31dd%2Fturns&label=Submit+turn+on+479d31dd&body=%7B%22origin_type%22%3A%22human%22%2C%22payload%22%3A%7B%22text%22%3A%22hello+there%22%7D%7D"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/turns"},{"name":"get_overview","title":"Full session overview","tools":["get_overview"],"method":"GET","path":"/v1/sessions/{session_id}/overview","scope":"read","group":"observation","summary":"Full overview of a session: world state, synths, locations, cycle counter.","preconditions":["live session_id"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/overview","label":"Overview of 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/overview","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Foverview&label=Overview+of+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/overview"},{"name":"resolve_ref","title":"Resolve a name to a ref","tools":["resolve_ref"],"method":"GET","path":"/v1/sessions/{session_id}/resolve","scope":"read","group":"observation","summary":"Resolve a natural-language reference (e.g. 'Alice') to typed refs. Supports ?q= and optional ?kind=synth|location|entity.","preconditions":["live session_id"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/resolve?q=Alice&kind=synth","label":"Resolve 'Alice' as synth","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/resolve?q=Alice&kind=synth","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fresolve%3Fq%3DAlice%26kind%3Dsynth&label=Resolve+%27Alice%27+as+synth"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/resolve"},{"name":"get_object","title":"Fetch a typed object by ref","tools":["get_object"],"method":"GET","path":"/v1/sessions/{session_id}/objects/{kind}/{ref}","scope":"read","group":"observation","summary":"Fetch a typed object (synth, location, entity) by ref, canonical or subjective view.","preconditions":["live session_id","valid kind + ref from resolve_ref"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/objects/synth/aeb2b653-68a6-a5ff-410b-0c4ded005c01?view=both","label":"Get synth object","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/objects/synth/aeb2b653-68a6-a5ff-410b-0c4ded005c01?view=both","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fobjects%2Fsynth%2Faeb2b653-68a6-a5ff-410b-0c4ded005c01%3Fview%3Dboth&label=Get+synth+object"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/objects/{kind}/{ref}"},{"name":"get_events","title":"Paginate raw audit events","tools":["get_events"],"method":"GET","path":"/v1/sessions/{session_id}/events","scope":"read","group":"observation","summary":"Paginate raw audit events since a sequence cursor. Pairs with get_changes.","preconditions":["live session_id"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/events?since=0&limit=50","label":"Events since 0 on 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/events?since=0&limit=50","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fevents%3Fsince%3D0%26limit%3D50&label=Events+since+0+on+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/events"},{"name":"get_changes","title":"Structured change set since a cursor","tools":["get_changes"],"method":"GET","path":"/v1/sessions/{session_id}/changes","scope":"read","group":"observation","summary":"Structured change set since a sequence or snapshot — changed refs, event counts, compact summaries.","preconditions":["live session_id"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/changes?since=0","label":"Changes since 0 on 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/changes?since=0","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fchanges%3Fsince%3D0&label=Changes+since+0+on+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/changes"},{"name":"get_last_cycle_report","title":"Narrative report of the last cycle","tools":["get_last_cycle_report"],"method":"GET","path":"/v1/sessions/{session_id}/reports/last-cycle","scope":"read","group":"observation","summary":"Narrative report of the most recent cycle: responses, communications, outcomes.","preconditions":["live session_id","at least one completed cycle"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/reports/last-cycle","label":"Last-cycle report for 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/reports/last-cycle","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Freports%2Flast-cycle&label=Last-cycle+report+for+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/reports/last-cycle"},{"name":"get_report_since","title":"Narrative report since a cursor","tools":["get_report_since"],"method":"GET","path":"/v1/sessions/{session_id}/reports/since","scope":"read","group":"observation","summary":"Narrative report of everything that happened since a sequence cursor.","preconditions":["live session_id"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/reports/since?since=0","label":"Report since 0 for 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/reports/since?since=0","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Freports%2Fsince%3Fsince%3D0&label=Report+since+0+for+479d31dd"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/reports/since"},{"name":"get_snapshot_overview","title":"Overview at a past snapshot","tools":["get_snapshot_overview"],"method":"GET","path":"/v1/sessions/{session_id}/snapshots/{snapshot_ref}/overview","scope":"read","group":"observation","summary":"Non-destructive historical overview — same shape as get_overview, materialized from a persisted snapshot. The live session is untouched. See RFC-0001 for the scrub/time-travel workflow this unlocks.","preconditions":["live session_id","snapshot_ref from list_snapshots"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/snapshots/snapshot_000000/overview","label":"Overview at snapshot_000000","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/snapshots/snapshot_000000/overview","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fsnapshots%2Fsnapshot_000000%2Foverview&label=Overview+at+snapshot_000000"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/snapshots/{snapshot_ref}/overview"},{"name":"get_snapshot_object","title":"Object detail at a past snapshot","tools":["get_snapshot_object"],"method":"GET","path":"/v1/sessions/{session_id}/snapshots/{snapshot_ref}/objects/{kind}/{ref}","scope":"read","group":"observation","summary":"Non-destructive historical object fetch — beliefs, memories, mood, components — as they existed at a prior snapshot. Same shape as get_object.","preconditions":["live session_id","snapshot_ref","valid kind+ref at that cycle"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/snapshots/snapshot_000000/objects/synth/aeb2b653-68a6-a5ff-410b-0c4ded005c01?view=both","label":"Synth aeb2b653 at snapshot_000000","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/snapshots/snapshot_000000/objects/synth/aeb2b653-68a6-a5ff-410b-0c4ded005c01?view=both","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fsnapshots%2Fsnapshot_000000%2Fobjects%2Fsynth%2Faeb2b653-68a6-a5ff-410b-0c4ded005c01%3Fview%3Dboth&label=Synth+aeb2b653+at+snapshot_000000"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/snapshots/{snapshot_ref}/objects/{kind}/{ref}"},{"name":"diff_snapshots","title":"Diff two snapshots","tools":["diff_snapshots"],"method":"GET","path":"/v1/sessions/{session_id}/snapshots/diff","scope":"read","group":"observation","summary":"Event-level diff from_snapshot → to_snapshot. Generalizes get_changes from snapshot→current to any pair of snapshots. Reads left-to-right like a git diff; direction matters.","preconditions":["live session_id","from_snapshot and to_snapshot from list_snapshots"],"execution":{"method":"GET","path":"/v1/sessions/479d31dd/snapshots/diff?from_snapshot=snapshot_000000&to_snapshot=snapshot_000001","label":"Diff snapshot_000000 → snapshot_000001","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/snapshots/diff?from_snapshot=snapshot_000000&to_snapshot=snapshot_000001","execute_href":"/dashboard/execute?method=GET&path=%2Fv1%2Fsessions%2F479d31dd%2Fsnapshots%2Fdiff%3Ffrom_snapshot%3Dsnapshot_000000%26to_snapshot%3Dsnapshot_000001&label=Diff+snapshot_000000+%E2%86%92+snapshot_000001"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/snapshots/diff"},{"name":"stream_events","title":"Live SSE event stream","tools":["stream_events"],"method":"GET","path":"/v1/sessions/479d31dd/stream","scope":"read","group":"observation","summary":"Server-Sent Events stream of live audit events. Click the URL (not a Run button) — the browser streams it directly.","preconditions":["live session_id"],"url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/stream"},{"name":"apply_patch","title":"Apply world mutations","tools":["apply_patch"],"method":"POST","path":"/v1/sessions/{session_id}/patches","scope":"admin","group":"intervention","summary":"Apply a batch of world mutations (set_environment_field, add_belief, move_entity, etc.) against the canonical state. Admin only; state-changing.","preconditions":["live session_id","admin scope"],"execution":{"method":"POST","path":"/v1/sessions/479d31dd/patches","body":{"operations":[{"op":"set_environment_field","field_path":"ambient.temperature","value":22.0}],"mode":"commit"},"label":"Apply sample patch to 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/patches","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions%2F479d31dd%2Fpatches&label=Apply+sample+patch+to+479d31dd&body=%7B%22operations%22%3A%5B%7B%22op%22%3A%22set_environment_field%22%2C%22field_path%22%3A%22ambient.temperature%22%2C%22value%22%3A22.0%7D%5D%2C%22mode%22%3A%22commit%22%7D"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/patches"},{"name":"queue_stimulus","title":"Queue an external sensory stimulus","tools":["queue_stimulus"],"method":"POST","path":"/v1/sessions/{session_id}/stimuli","scope":"admin","group":"intervention","summary":"Queue an external sensory stimulus for delivery through the perception path. Mediated: enters via compose_sensory_bundle on the next step or turn.","preconditions":["live session_id","admin scope"],"execution":{"method":"POST","path":"/v1/sessions/479d31dd/stimuli","body":{"content":"a loud clang from the street","channel":"auditory","source":"external","salience":0.8,"delivery":"next_cycle"},"label":"Queue auditory stimulus on 479d31dd","url":"https://singing-bird.benac.dev/v1/sessions/479d31dd/stimuli","execute_href":"/dashboard/execute?method=POST&path=%2Fv1%2Fsessions%2F479d31dd%2Fstimuli&label=Queue+auditory+stimulus+on+479d31dd&body=%7B%22content%22%3A%22a+loud+clang+from+the+street%22%2C%22channel%22%3A%22auditory%22%2C%22source%22%3A%22external%22%2C%22salience%22%3A0.8%2C%22delivery%22%3A%22next_cycle%22%7D"},"url":"https://singing-bird.benac.dev/v1/sessions/{session_id}/stimuli"}]}