Edit an asset’s or twin’s structure as JSON directly in the app
The universal schema is what a robot is — its links, joints, sensors, actuators and capabilities. Assets and twins each carry one, and both can now be edited as JSON from the app by anyone with write access.
Asset — open the asset, go to the Files tab, and choose Edit JSON on the Base schema card.Twin — select the twin in the environment editor, open Advanced, and choose Schema JSON.
The editor checks the JSON parses and is an object, and reports the line and column when it does not. On save, the server validates the whole document — capabilities, and a cross-check that any drive block names joints that actually exist. A schema that fails is refused with the reason, and nothing is written.Two shapes are always refused: an empty schema, and one that drops links when it previously had them. Removing sensors or actuators is a normal edit and is allowed.For an asset, some checks report rather than refuse. Your edit is saved and the editor lists what it found, so you can fix it in a follow-up edit instead of being blocked.
Removing links or joints asks for confirmation first. They are what the 3D viewer and the simulation exporter walk, so removing them changes what every twin of that asset resolves to.
The editor remembers which version of the schema you opened. If someone saves a change before you do, your save is refused rather than overwriting theirs — close and reopen the editor to load the current schema, then reapply your edit.
Assets — regenerating the schema from the URDF keeps per-joint home positions, sensors, actuators, capabilities and collision config. Anything else you edit by hand is discarded on the next rebuild.Twins — a twin’s schema is its own snapshot of its asset. Running sync with asset re-snapshots it and discards edits made here, apart from sensor fields you changed and joint homes you authored. Editing a twin’s schema never changes its asset.
If an edit changes a joint’s pose or axis, it moves that joint’s zero. Saved joint positions and home positions are offsets from that zero and are not adjusted to match, so they will refer to a different physical pose afterwards. The editor says so when it happens — re-teach those positions rather than assuming they carried over.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Cyberwave Docs","colors":{"primary":"#00b5dd","light":"#33cfef","dark":"#0091b1"},"logo":{"light":"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/images/cyberwave-logo-black.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=7af7130ac16b7bc13166a3d9f431cdf5","dark":"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/images/cyberwave-logo-white.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=7befe341f16cadf8b7a4acb4ba0d294a"},"favicon":"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/favicon.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=20eaaf30d7f090c5eb2628572ee4eb20","navbar":{"links":[{"href":"https://cyberwave.com/blog","label":"Blog"},{"href":"https://cyberwave.com/contact-us","label":"Contact"},{"href":"https://status.cyberwave.com","label":"Status"}]},"footer":{"socials":{"x":"https://x.com/cyberwave_com","linkedin":"https://www.linkedin.com/company/cyberwave-com","youtube":"https://www.youtube.com/channel/UCmw6EQ1nJj7sqjkITm2wjCw"},"links":[{"header":"Resources","items":[{"label":"Status","href":"https://status.cyberwave.com"},{"label":"Changelog","href":"https://docs.cyberwave.com/changelog"},{"label":"Discord","href":"https://discord.gg/dfGhNrawyF"},{"label":"GitHub","href":"https://github.com/cyberwave-os"}]}]},"integrations":{"posthog":{"apiKey":"phc_JswM4a2VwYGkjsKr7xVYwdiX6BDSDKDXc25fkvApnhZ","apiHost":"https://eu.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cyberwave","hasAudioNarration":false,"actualSubdomain":"cyberwave","customDomains":["docs.cyberwave.com"],"gitSource":{"type":"github","owner":"cyberwave-os","repo":"docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae050f854afc9d90cc53677","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API","count":241},{"language":"default","tag":"APIs","count":241},{"language":"default","tag":"REST (generated)","count":235},{"language":"default","tag":"Models","count":229},{"language":"default","tag":"Docs","count":114},{"language":"default","tag":"Reference","count":56},{"language":"default","tag":"Connect hardware","count":28},{"language":"default","tag":"Simulate \u0026 test","count":27},{"language":"default","tag":"Build with AI","count":26},{"language":"default","tag":"Workflow nodes","count":26}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#sidebar a[href=\"/sdks/cpp-sdk\"]{pointer-events:none;opacity:0.5;cursor:default}"},{"filePath":"images/src/_base.css","content":":root{--cyan:#00b5dd;--cyan-2:#33cfef;--cyan-3:#5fdaf3;--ink:#04212b;--text:#e6f4f8;--muted:#9ab4bd;--dim:#6f8b96;--line:#24363e;--panel:#101c22;--card:#15252d;--card-line:#2c434d}*{box-sizing:border-box;margin:0}html,body{background:transparent}body{font-family:\"Inter\",ui-sans-serif,system-ui,sans-serif;color:var(--text);-webkit-font-smoothing:antialiased}.label{font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}"}],"page":{"pagePath":"feature-reference/edit-universal-schema","slug":"/feature-reference/edit-universal-schema","pageMetadata":{"title":"Editing a universal schema","description":"Edit an asset's or twin's structure as JSON directly in the app","icon":"pencil","href":"/feature-reference/edit-universal-schema"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Edit an asset’s or twin’s structure as JSON directly in the app\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,em:`em`,p:`p`,strong:`strong`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`universal schema`}),` is what a robot `,_jsx(_components.em,{children:`is`}),` — its links, joints, sensors, actuators and capabilities. Assets and twins each carry one, and both can now be edited as JSON from the app by anyone with write access.`]}),`\n`,_jsx(Heading,{level:`2`,id:`where-to-find-it`,children:`Where to find it`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Asset`}),` — open the asset, go to the `,_jsx(_components.strong,{children:`Files`}),` tab, and choose `,_jsx(_components.strong,{children:`Edit JSON`}),` on the Base schema card.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Twin`}),` — select the twin in the environment editor, open `,_jsx(_components.strong,{children:`Advanced`}),`, and choose `,_jsx(_components.strong,{children:`Schema JSON`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-gets-checked-before-a-save-lands`,children:`What gets checked before a save lands`}),`\n`,_jsx(_components.p,{children:`The editor checks the JSON parses and is an object, and reports the line and column when it does not. On save, the server validates the whole document — capabilities, and a cross-check that any drive block names joints that actually exist. A schema that fails is refused with the reason, and nothing is written.`}),`\n`,_jsxs(_components.p,{children:[`Two shapes are always refused: an empty schema, and one that drops `,_jsx(_components.code,{children:`links`}),` when it previously had them. Removing `,_jsx(_components.code,{children:`sensors`}),` or `,_jsx(_components.code,{children:`actuators`}),` is a normal edit and is allowed.`]}),`\n`,_jsx(_components.p,{children:`For an asset, some checks report rather than refuse. Your edit is saved and the editor lists what it found, so you can fix it in a follow-up edit instead of being blocked.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Removing links or joints asks for confirmation first. They are what the 3D viewer and the simulation exporter walk, so removing them changes what every twin of that asset resolves to.`})}),`\n`,_jsx(Heading,{level:`2`,id:`if-someone-else-edits-at-the-same-time`,children:`If someone else edits at the same time`}),`\n`,_jsx(_components.p,{children:`The editor remembers which version of the schema you opened. If someone saves a change before you do, your save is refused rather than overwriting theirs — close and reopen the editor to load the current schema, then reapply your edit.`}),`\n`,_jsx(Heading,{level:`2`,id:`what-a-rebuild-or-a-sync-discards`,children:`What a rebuild or a sync discards`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Assets`}),` — regenerating the schema from the URDF keeps per-joint home positions, sensors, actuators, capabilities and collision config. Anything else you edit by hand is discarded on the next rebuild.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Twins`}),` — a twin’s schema is its own snapshot of its asset. Running `,_jsx(_components.strong,{children:`sync with asset`}),` re-snapshots it and discards edits made here, apart from sensor fields you changed and joint homes you authored. Editing a twin’s schema never changes its asset.`]}),`\n`,_jsx(Heading,{level:`2`,id:`moved-joint-zeros`,children:`Moved joint zeros`}),`\n`,_jsxs(_components.p,{children:[`If an edit changes a joint’s `,_jsx(_components.code,{children:`pose`}),` or `,_jsx(_components.code,{children:`axis`}),`, it moves that joint’s zero. Saved joint positions and home positions are offsets from that zero and are `,_jsx(_components.strong,{children:`not`}),` adjusted to match, so they will refer to a different physical pose afterwards. The editor says so when it happens — re-teach those positions rather than assuming they carried over.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Editing a universal schema","description":"Edit an asset's or twin's structure as JSON directly in the app","icon":"pencil","href":"/feature-reference/edit-universal-schema"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Where to find it","slug":"where-to-find-it","depth":2,"children":[]},{"title":"What gets checked before a save lands","slug":"what-gets-checked-before-a-save-lands","depth":2,"children":[]},{"title":"If someone else edits at the same time","slug":"if-someone-else-edits-at-the-same-time","depth":2,"children":[]},{"title":"What a rebuild or a sync discards","slug":"what-a-rebuild-or-a-sync-discards","depth":2,"children":[]},{"title":"Moved joint zeros","slug":"moved-joint-zeros","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"cyberwave","siteName":"Cyberwave Docs","title":"Editing a universal schema - Cyberwave Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-28T09:00:07.126Z","originalFileLocation":"feature-reference/edit-universal-schema.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Edit an asset\u0026#x27;s or twin\u0026#x27;s structure as JSON directly in the app\">\u003cmeta data-mint-head name=\"application-name\" content=\"Cyberwave Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Editing a universal schema - Cyberwave Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Edit an asset\u0026#x27;s or twin\u0026#x27;s structure as JSON directly in the app\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Cyberwave Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cyberwave.com/feature-reference/edit-universal-schema\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cyberwave.mintlify.site/_mintlify/api/og/v2?division=Add+your+own+robot\u0026amp;title=Editing+a+universal+schema\u0026amp;description=Edit+an+asset%27s+or+twin%27s+structure+as+JSON+directly+in+the+app\u0026amp;theme=6d163fce0009c02e4f3f953a\u0026amp;signature=283aa4662b7348a8fe042b8489c21772ce28ab341d11580ab19b0a6e8c5ea39e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Editing a universal schema - Cyberwave Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Edit an asset\u0026#x27;s or twin\u0026#x27;s structure as JSON directly in the app\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cyberwave.mintlify.site/_mintlify/api/og/v2?division=Add+your+own+robot\u0026amp;title=Editing+a+universal+schema\u0026amp;description=Edit+an+asset%27s+or+twin%27s+structure+as+JSON+directly+in+the+app\u0026amp;theme=6d163fce0009c02e4f3f953a\u0026amp;signature=283aa4662b7348a8fe042b8489c21772ce28ab341d11580ab19b0a6e8c5ea39e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/cyberwave/vQ8b9_MAwUfrGxQ_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Cyberwave Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00b5dd\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cyberwave.com/feature-reference/edit-universal-schema\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/feature-reference/edit-universal-schema.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cyberwave.com/#organization\",\"name\":\"Cyberwave Docs\",\"url\":\"https://docs.cyberwave.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cyberwave/gDyqTt86aQ59dugY/images/cyberwave-logo-black.svg?fit=max\u0026auto=format\u0026n=gDyqTt86aQ59dugY\u0026q=85\u0026s=7af7130ac16b7bc13166a3d9f431cdf5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cyberwave.com#website\",\"name\":\"Cyberwave Docs\",\"url\":\"https://docs.cyberwave.com\",\"publisher\":{\"@id\":\"https://docs.cyberwave.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema#webpage\",\"url\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema\",\"name\":\"Editing a universal schema\",\"description\":\"Edit an asset's or twin's structure as JSON directly in the app\",\"dateModified\":\"2026-09-28T09:00:07.126Z\",\"isPartOf\":{\"@id\":\"https://docs.cyberwave.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Connect hardware\",\"item\":\"https://docs.cyberwave.com/robots/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Add your own robot\",\"item\":\"https://docs.cyberwave.com/robots/add-your-robot\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Editing a universal schema\",\"item\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema#article\",\"headline\":\"Editing a universal schema\",\"name\":\"Editing a universal schema\",\"description\":\"Edit an asset's or twin's structure as JSON directly in the app\",\"url\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cyberwave.com/feature-reference/edit-universal-schema#webpage\"},\"dateModified\":\"2026-09-28T09:00:07.126Z\",\"publisher\":{\"@id\":\"https://docs.cyberwave.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cyberwave.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Cyberwave Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Cyberwave Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/feature-reference/edit-universal-schema.md","siteName":"Cyberwave Docs","nav":{"global":null,"tabs":[{"tab":"Docs","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Welcome","icon":"house","href":"/overview"},{"title":"Agentic quickstart","icon":"robot","href":"/get-started/quickstart"},{"title":"Choose your path","icon":"signs-post","href":"/get-started/choose-your-path"},{"title":"Core concepts","icon":"shapes","href":"/get-started/core-concepts"},{"title":"Account and API keys","icon":"key","href":"/get-started/account"}]},{"group":"Build with AI","icon":"wand-magic-sparkles","pages":[{"title":"Connect AI to robots","sidebarTitle":"Connect AI to robots","icon":"wand-magic-sparkles","href":"/ai/overview"},{"title":"Your first AI loop","sidebarTitle":"Your first AI loop","icon":"wand-magic-sparkles","href":"/overview/first-ai-loop"},{"title":"Connect your AI tool","icon":"plug","href":"/ai/connect-your-ai-tool"},{"title":"Prompt library","icon":"message-lines","href":"/ai/prompt-library"},{"group":"Agents","icon":"comments","pages":[{"title":"AI agents","sidebarTitle":"Overview","icon":"comments","href":"/ai/agents"},{"title":"Environment assistant","sidebarTitle":"Environment assistant","icon":"cubes","href":"/ai/environment-assistant"},{"title":"Control agent","sidebarTitle":"Control agent","icon":"gamepad","href":"/ai/control-agent"},{"title":"Workflow assistant","sidebarTitle":"Workflow assistant","icon":"diagram-project","href":"/ai/workflow-assistant"}]},{"group":"AI models","icon":"brain","pages":[{"title":"AI models","sidebarTitle":"Overview","icon":"brain","href":"/ai/models"},{"title":"Model catalog","icon":"brain","href":"/feature-reference/ml-models/index"},{"title":"Tasks and outputs","icon":"brackets-curly","href":"/feature-reference/ml-models/structured-actions"},{"title":"Model playground","sidebarTitle":"Try models in the Playground","icon":"flask","href":"/feature-reference/ml-models/playground"},{"title":"Bring your own model","icon":"upload","href":"/feature-reference/ml-models/uploading-your-model"},{"title":"Speech-to-text models","icon":"microphone","href":"/feature-reference/ml-models/speech-to-text"}]},{"title":"Ways to control a robot","sidebarTitle":"Ways to control a robot","icon":"gamepad","href":"/ai/control"},{"group":"Workflows","icon":"diagram-project","pages":[{"title":"Build and run workflows","icon":"diagram-project","href":"/feature-reference/workflows"},{"title":"Running a workflow in simulation","icon":"cube","href":"/feature-reference/workflows/simulation-execution-target"},{"title":"Prompting Call Model","icon":"message","href":"/feature-reference/workflows/call-model-prompt"},{"title":"Reusing chains across upstreams","icon":"link","href":"/feature-reference/workflows/reusing-chains"},{"title":"Edge workflow dependencies","icon":"puzzle-piece","href":"/feature-reference/workflows/edge-dependencies"},{"group":"Voice commands","icon":"microphone","pages":[{"title":"Audio in workflows","icon":"waveform-lines","href":"/feature-reference/workflows/audio-in-workflows"},{"title":"Call Model — STT on edge","icon":"microphone-lines","href":"/feature-reference/workflows/call-model-stt-edge"},{"title":"Wake Word — testing","icon":"vial","href":"/feature-reference/workflows/wake-word-engine/testing"}]},{"group":"Examples","icon":"lightbulb","pages":[{"title":"Inspect areas with Move Twin","icon":"magnifying-glass","href":"/feature-reference/workflows/inspect-area"},{"title":"Direct GPS targets with Move Twin","icon":"location-dot","href":"/feature-reference/workflows/move-to-gps"}]}]},{"title":"Agent safety and approval","icon":"shield-check","href":"/ai/safety"}]},{"group":"Simulate \u0026 test","icon":"cube","pages":[{"title":"Simulate in the browser","sidebarTitle":"Playground and MuJoCo","icon":"hand-wave","href":"/overview/hello-robot"},{"title":"Simulation","icon":"atom","href":"/overview/features/simulation"},{"title":"Simulation view","icon":"video","href":"/feature-reference/environment-editor/simulation-view"},{"title":"Simulation timing and advanced settings","icon":"gauge","href":"/feature-reference/environment-editor/simulation-timing"},{"group":"Environments \u0026 editor","icon":"map","pages":[{"title":"Environments","icon":"globe","href":"/overview/features/environment"},{"title":"Environment editor","icon":"pen-to-square","href":"/feature-reference/environment-editor/index"},{"title":"Assistant asset generation","icon":"wand-magic-sparkles","href":"/feature-reference/environment-editor/assistant-asset-generation"},{"title":"Environment templates","icon":"copy","href":"/feature-reference/environment-editor/environment-templates"},{"title":"Fixed and free-floating objects","icon":"anchor","href":"/feature-reference/environment-editor/fixed-base-objects"},{"title":"Disabling collision on a twin","icon":"ghost","href":"/feature-reference/environment-editor/disable-collision"},{"title":"Point cloud import","icon":"braille","href":"/feature-reference/environment-editor/point-cloud-import"},{"group":"Maps \u0026 navigation","icon":"route","pages":[{"title":"Geo reference","icon":"location-crosshairs","href":"/feature-reference/environment-editor/geo-reference"},{"title":"Waypoints on the map","icon":"map-pin","href":"/feature-reference/environment-editor/map-waypoints"},{"title":"Generate a map from the scene","icon":"grid-2","href":"/feature-reference/environment-editor/generated-occupancy-map"},{"title":"Waypoint reachability","icon":"route","href":"/feature-reference/environment-editor/waypoint-reachability"}]}]},{"group":"Twins","icon":"clone","pages":[{"title":"What is a digital twin","icon":"clone","href":"/overview/features/digital-twin"},{"title":"Catalog","icon":"book-bookmark","href":"/feature-reference/catalog"},{"title":"Work with digital twins","icon":"clone","href":"/feature-reference/digital-twins"},{"title":"Coupled and passive joints","icon":"link","href":"/feature-reference/digital-twins/mimic-joints"},{"title":"Live position \u0026 camera frames","icon":"satellite-dish","href":"/feature-reference/twin-live-position-and-frames"},{"title":"Telemetry event time","icon":"clock","href":"/feature-reference/telemetry-event-time"}]},{"group":"Teleoperation \u0026 poses","icon":"gamepad","pages":[{"title":"Teleoperation and remote control","icon":"gamepad","href":"/feature-reference/environment-editor/teleoperation"},{"title":"Arm commands","icon":"terminal","href":"/feature-reference/arm-commands"},{"title":"Saved poses","icon":"bookmark","href":"/feature-reference/twin-saved-poses"},{"title":"Twin joint home positions","icon":"house","href":"/feature-reference/twin-joint-home-positions"}]},{"group":"Live view","icon":"video","pages":[{"title":"Driver logs","icon":"scroll-text","href":"/feature-reference/environment-editor/driver-logs"},{"title":"Consume live video with WebRTC","icon":"video","href":"/overview/tools/custom-webrtc-consumer"}]}]},{"group":"Connect hardware","icon":"plug","pages":[{"title":"How hardware works in Cyberwave","sidebarTitle":"Overview","icon":"cubes","href":"/robots/overview"},{"title":"Supported hardware","icon":"microchip","href":"/overview/supported-hardware"},{"title":"Remote lab","sidebarTitle":"Remote lab","icon":"robot","href":"/overview/develop-remote-hardware"},{"group":"Robot arms","icon":"robot","pages":[{"title":"Robotic arms","icon":"hand","href":"/overview/robotic-arms"},{"title":"Get started with the SO-101 arm","sidebarTitle":"SO-101 quickstart","icon":"microchip","href":"/tutorials/so101-teleop-dataset"},{"title":"Get started with the AgileX Piper arm","sidebarTitle":"AgileX Piper quickstart","icon":"microchip","href":"/tutorials/agilex-piper-quickstart"},{"title":"OpenArm (ROS 2)","icon":"robot","href":"/feature-reference/edge/drivers/openarm-ros2"},{"title":"Hand-eye calibration","icon":"crosshairs","href":"/feature-reference/hand-eye-calibration"}]},{"group":"Quadrupeds \u0026 rovers","icon":"dog","pages":[{"title":"Robotic dogs","icon":"dog","href":"/overview/robotic-dogs"},{"title":"Relocalize a Go2 on a saved map with an AprilTag","sidebarTitle":"AprilTag relocalization","icon":"location-crosshairs","href":"/robots/go2-apriltag-relocalization"},{"title":"ROS 2 driver","sidebarTitle":"ROS 2 driver","icon":"terminal","href":"/api-reference/autonomous-navigation-driver"}]},{"group":"Drones","icon":"helicopter","pages":[{"title":"Drones","icon":"drone","href":"/overview/drones"}]},{"group":"Cameras \u0026 audio","icon":"camera","pages":[{"title":"Cameras","icon":"camera","href":"/overview/cameras"},{"title":"Native microphone driver","sidebarTitle":"Native microphone driver","icon":"microphone-lines","href":"/feature-reference/edge/drivers/native-microphone-driver"},{"title":"Native speaker driver","sidebarTitle":"Native speaker driver","icon":"volume-high","href":"/feature-reference/edge/drivers/native-speaker-driver"},{"title":"macOS microphone bridge","sidebarTitle":"macOS microphone","icon":"microphone-lines","href":"/feature-reference/edge/macos-microphone"}]},{"group":"Edge computers","icon":"microchip","pages":[{"title":"Overview","icon":"microchip","href":"/feature-reference/edge/overview"},{"title":"Prepare your Raspberry Pi","sidebarTitle":"Raspberry Pi setup","icon":"raspberry-pi","href":"/feature-reference/edge/raspberry-pi"},{"title":"Prepare your Jetson Orin Nano","sidebarTitle":"Jetson Orin Nano setup","icon":"microchip","href":"/feature-reference/edge/jetson-orin-nano"}]},{"group":"Add your own robot","icon":"screwdriver-wrench","pages":[{"title":"Add your own robot","sidebarTitle":"Add your robot","icon":"screwdriver-wrench","href":"/robots/add-your-robot"},{"title":"Simulator compatibility","description":"Control which simulators assets and twins can participate in.","icon":"cube","href":"/feature-reference/catalog/simulation-support"},{"title":"Editing a universal schema","icon":"pencil","href":"/feature-reference/edit-universal-schema"},{"title":"Asset kits","description":"Reuse robots and accessories as a docked assembly","icon":"boxes-stacked","href":"/feature-reference/catalog/asset-kits"},{"title":"Writing compatible drivers","icon":"pen-to-square","href":"/feature-reference/edge/drivers/writing-compatible-drivers"},{"title":"ROS 2 topic namespacing (fleets)","icon":"tags","href":"/feature-reference/edge/drivers/ros2-topic-namespacing"},{"title":"Docker registry","icon":"clone","href":"/feature-reference/docker-registry"}]},{"group":"Drivers","icon":"gears","pages":[{"title":"Drivers","icon":"gears","href":"/feature-reference/edge/drivers/overview"},{"title":"Multi-camera driver orchestration","icon":"camera","href":"/feature-reference/edge/drivers/multi-camera-driver-orchestration"}]}]},{"group":"Train \u0026 improve","icon":"chart-line","pages":[{"title":"Models \u0026 datasets","icon":"brain","href":"/overview/features/models-and-datasets"},{"title":"Record and replay","icon":"clock-rotate-left","href":"/overview/features/replay-and-historical-data"},{"group":"Datasets","icon":"database","pages":[{"title":"Import datasets","icon":"file-import","href":"/feature-reference/datasets/import"},{"title":"Dataset playground","icon":"flask","href":"/feature-reference/datasets/playground"},{"title":"Dataset export \u0026 format conversion","icon":"arrow-right-arrow-left","href":"/feature-reference/datasets/format-conversion"},{"title":"When episodes fail","icon":"triangle-alert","href":"/feature-reference/datasets/episode-failures"}]},{"group":"Train a VLA","icon":"eye","pages":[{"title":"SmolVLA training","sidebarTitle":"SmolVLA","icon":"microchip","href":"/feature-reference/ml-models/smolvla-training"},{"title":"OpenVLA-OFT training","sidebarTitle":"OpenVLA-OFT","icon":"microchip","href":"/feature-reference/ml-models/openvla-oft-training"},{"title":"VLA Cloud Node","icon":"brain","href":"/overview/tools/vla-cloud-node"}]},{"group":"Train an RL policy","icon":"dumbbell","pages":[{"title":"RL tasks","icon":"graduation-cap","href":"/feature-reference/rl-tasks"},{"title":"RL task scene sensors","icon":"camera","href":"/feature-reference/rl-task-scene-sensors"}]},{"group":"Deploy a policy","icon":"upload","pages":[{"title":"Uploading policies","icon":"upload","href":"/feature-reference/uploading-policies"},{"title":"Online controllers","icon":"microchip","href":"/feature-reference/online-controllers"}]}]},{"group":"Deploy \u0026 operate","icon":"server","pages":[{"title":"Run models on the edge","icon":"microchip-ai","href":"/feature-reference/workflows/workers/overview"},{"group":"Vision pipelines on the edge","icon":"filter","pages":[{"title":"Frame substitution","icon":"user-shield","href":"/feature-reference/edge/drivers/frame-filters"},{"title":"Camera detection overlays","icon":"object-group","href":"/feature-reference/edge/drivers/camera-detection-overlays"},{"title":"Multi-camera detection routing","icon":"shuffle","href":"/feature-reference/edge/drivers/multi-camera-detection-routing"},{"title":"Record \u0026 replay","icon":"circle-play","href":"/feature-reference/edge/drivers/data-record-replay"},{"title":"Security pipeline (multi-camera, anonymising)","icon":"user-shield","href":"/feature-reference/edge/drivers/security-pipeline"}]},{"title":"Cloud Node","icon":"cloud","href":"/overview/tools/cloud-node"},{"group":"Fleet and alerts","icon":"bell","pages":[{"title":"Fleet provisioning","icon":"server","href":"/enterprise/fleet-provisioning"},{"title":"Alerts","icon":"bell","href":"/feature-reference/edge/drivers/alerts"}]},{"group":"For IT \u0026 integrators","icon":"building","pages":[{"title":"Cyberwave for integrators","sidebarTitle":"Overview","icon":"building","href":"/enterprise/overview"},{"title":"Integration surfaces","icon":"plug","href":"/enterprise/integration-surfaces"},{"title":"Network and firewall requirements","sidebarTitle":"Network and firewall","icon":"network-wired","href":"/enterprise/network-and-firewall"},{"title":"Access control","icon":"shield","href":"/feature-reference/access-control"},{"title":"Zenoh-MQTT bridge","icon":"bridge","href":"/overview/tools/zenoh-mqtt-bridge"},{"title":"A2A partner task API","icon":"handshake","href":"/api-reference/a2a-partner-api"}]}]}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/overview/tools/python-sdk"}]},{"tab":"API","pages":[{"title":"API","href":"/api-reference/overview"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Editing a universal schema - Cyberwave Docs","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}