QUBE Survey Workbench — NIPO Odin & QubeScript
Author and test NIPO Odin and QubeScript questionnaires in VS Code with parser-backed checks, outline navigation, and local interview execution.
The local editor, source tools, and interview workbench are free and run offline without sign-in. WebAssembly binaries power execution across Windows, macOS, and Linux. Hosted collaboration, online testing, and ticket reproduction integrate with QUBE Survey and require a QUBE Survey account and the appropriate account and project permissions.
| Capability |
Odin |
QubeScript |
| Files |
.odin |
.qube |
| Highlighting, outline, folding |
Yes |
Yes |
| Diagnostics as you type |
Yes |
Yes |
| Completion, hover, definition, references, rename |
Yes |
Yes |
| Questionnaire navigator |
Yes |
Yes |
| Local interview testing |
Yes |
Yes |
| Data-position and translation tools |
Yes |
— |
For NIPO and Odin users
Author and maintain .odin scripts with parser-backed syntax and semantic checks, question and variable references, and source tooling:
- Works with NIPO systems: Odin source authored here can also run in NIPO systems, including Nfield and NIPO Fieldwork System (NFS), subject to supported commands and target-system setup.
- Local interview testing: Preview routing, logic, and question flows locally before uploading. Local execution does not establish full NIPO runtime compatibility; test the specific behavior your questionnaire needs.
- Integrated testing during scripting: Testing and ticketing workflows are useful during script development even when final fieldwork runs on NIPO.
Online testing and tickets
Use QUBE Survey's testing and ticketing workspace while continuing to run supported Odin scripts on NIPO. Testing guide · Ticket workflow.
- Local preview: Test questions and routing in the local interview workbench.
- Immutable test uploads: Upload the exact questionnaire source to QUBE Test as an immutable version when you choose Open in QUBE Survey.
- Reproduce reported issues: Review tickets linked to exact source versions and captured test interview journeys. Reproduce Ticket opens an Odin ticket's reported source and restores the captured path locally in VS Code.
- Fix and verify: Edit the script, verify the fix locally, and upload an Odin candidate fix for human verification.

Test the wording, answer options and routing before fieldwork.
Compare the proposed source changes, replay the reported journey and verify the fix. Fixed means ready for human review.
For QubeScript authors
Start new questionnaires with .qube using QubeScript (QSS), a declarative survey language for CAWI on QubeSurvey.
- Declarative directives for questions, options, routing and repeats.
- Semantic highlighting, outline navigation, and live compiler diagnostics.
- Local interview testing through the QSS WebAssembly runtime.
- Upload to QUBE Survey for online testing and fieldwork.
Installation
Install Visual Studio Code 1.102 or later
if needed.
In VS Code, open Extensions (Ctrl+Shift+X / Cmd+Shift+X), search for
@id:QubeSurvey.vscode-qube, choose QUBE Survey Workbench by qubesurvey,
and select Install Pre-Release Version. The command-line equivalent is:
code --install-extension QubeSurvey.vscode-qube --pre-release
Open or create a .qube script. Existing .odin files also work.
Upgrading from agentic-labs.vscode-qube or an earlier Odin extension?
Explicitly uninstall agentic-labs.vscode-qube or the earlier Odin extension
after installing the new extension. Released odin.* command aliases remain available.
Explicitly configured odin.qubeSurvey.baseUrl values migrate to
qube.qubeSurvey.baseUrl unless that setting already has a value at the same
scope. Existing URL choices are preserved.
Manual VSIX fallback
If installing manually from the supplied VSIX:
In VS Code, open Extensions → … → Install from VSIX… and select the
supplied vscode-qube-<version>.vsix file. The command-line equivalent is:
code --install-extension vscode-qube-<version>.vsix
Start with QubeScript
Save a text file as survey.qube, for example:
@survey feedback @language en @mode cawi
@question comment text
What would you like to tell us?
@outcome complete
Thank you.
Check the Problems panel, then run QUBE: Run Interview from the Command
Palette. The interview opens beside the source. Revise the script and test
its questions and routes before uploading it.
QubeScript is also named Qube Survey Script in the language selector and
existing documentation. Its editor support includes:
- Parser-backed syntax and semantic diagnostics, with the producing pass
identified in each finding.
- Semantic highlighting, outline and navigator for questions, pages,
sections, repeats, routes, options, structs, outcomes and suspensions.
- Context-sensitive completion for directives, option domains and routes.
- Hover, definition, references and rename for declared entities.
- Local interview execution through the QSS runtime.
Highlighting and structure remain available while the source is incomplete.
QubeScript and Odin keep independent language semantics; the workbench selects the
runtime belonging to the file's language.
Existing Odin scripts
Odin support includes parser diagnostics, question and variable references,
data-position findings, language-section coverage and local interview testing.
Repeated findings are grouped in the Problems panel.
ODIN source tools include:
- Fix / Unfix Data Positions — absolute or relative positions.
- Renumber Questions — configurable start, step and optional question range.
- Extract Translation Section — remove commands for translation.
- Append Language Section — append translated content.
These features do not establish full NIPO runtime compatibility. In particular,
*MERGE filenames can link to a unique matching .odin file in the workspace,
but that navigation does not mean merged questionnaires execute in the runtime.
Test the specific behavior your questionnaire needs.
The extension claims .odin, leaving legacy .q files to an explicit
workspace association:
{ "files.associations": { "*.q": "odin" } }
AI authoring and MCP
The pre-release includes QUBE Survey MCP and makes it available through
VS Code's native MCP support.
An MCP-capable AI assistant can use its parser-backed qss.* and odin.* tools
while editing the same local script files.
QubeScript tools include qss.check, qss.symbols, qss.guide.get and
qss.reference.search; Odin has its own capability set.
- Open a trusted workspace and run QUBE: Show AI Setup. It reports whether
the bundled server is available and explains missing files, an unsupported
editor or a disabled setting.
- Run MCP: List Servers, select QUBE Survey, and start it. VS Code
manages the process and any tool permissions.
- In your MCP-capable AI chat, select the QUBE Survey tools. Ask the assistant
to consult the QubeScript guide, edit the script and check the complete source.
- Review its changes, then run QUBE: Run Interview to test questions and
routes against the intended behavior.
The server uses the extension host's Node runtime, so this VS Code setup needs
neither a QUBE source checkout nor a separate Node installation. QUBE Survey
sign-in is also unnecessary for local MCP checks. Configure the AI assistant
and its model separately; its model usage follows that client's pricing.
Set qube.ai.mcp.enabled to false in User Settings to remove the server from
discovery. The extension withholds MCP definitions in untrusted workspaces.
It registers the server through the native provider API rather than modifying
workspace or user MCP configuration files.
For another MCP client, use the separately packaged Survey MCP distribution
and follow the MCP setup guide.
Use qss.check to check generated QubeScript and test its behavior in the local
workbench. The hosted ticket Agent currently handles Odin; the QubeScript MCP tools
do not establish a hosted QubeScript Agent workflow.
Optional MCP Fieldwork reads — local candidate
The Workbench can connect the same MCP to your current QUBE Test session
as part of its pre-release capabilities. This bridge is not in the older public
Odin extension 0.7.12. Local script tools require neither this access nor a
hosted connection.
- Open a trusted workspace. Keep
qube.qubeSurvey.baseUrl at exactly
https://test.qubesurvey.com; other endpoints and base paths do not support
this bridge.
- Run QUBE: Allow MCP Fieldwork Reads. Review the confirmation: authorized
aggregate progress, quota conditions/counts and setup history can reach your
assistant and its configured model.
- Choose Allow reads. The command enables the application setting
qube.ai.mcp.fieldwork.enabled, then uses the existing browser device
authorization if this endpoint has no saved connection. Cancelled or failed
authorization grants no Fieldwork consent.
- Refresh QUBE Survey tools in your AI client. Call
fieldwork.accounts.list
with {}, choose the intended Account by its returned ID, then call
fieldwork.runs.list; choose a returned Run UUID for fieldwork.runs.get,
fieldwork.quotas.get or fieldwork.quota_setup.get. Ask for the current
counts and original setup separately.
Account IDs are a bare UUID or billing_<UUID>. Copy the complete ID, including
its prefix and letter case; Run IDs remain UUIDs. Account discovery returns
only IDs and display names, which may be identical. It selects nothing and
confers no access to a Run. More than 100 Accounts returns an unavailable result.
The setting defaults to false. It is a ceiling, not consent: setting it to
true alone enables no reads. Allow applies to this editor window and its
current connection; another window needs its own confirmation. Progress reads
use existing scoped permissions. Quota and setup reads require current paid
owner/editor access; View Run progress alone does not grant those reads.
API availability still depends on the deployed environment. An unavailable
response is not a zero count or an empty quota table.
Run QUBE: Disable MCP Fieldwork Reads to revoke the local bridge while
keeping local script tools. Disconnect, a changed destination or credential,
and window reload also invalidate access; run Allow again for the intended
connection. The editor keeps the ordinary session bearer in SecretStorage and
host memory. The MCP child receives only a revocable loopback capability.
Disable does not claim server-wide session revocation or recall data already
delivered to the assistant.
These five tools cannot mutate Runs, edit targets, recover setup, send messages,
read individual answers or download exports. Use the reviewed human Fieldwork
UI for changes. This candidate is not hosted MCP OAuth, a standalone sign-in
flow or qualification of every assistant client or platform.
QUBE Survey online
The default hosted destination is
QUBE Test, the shared Odin/QubeScript testing workspace.
Online commands use browser device authorization and store the token in VS
Code's SecretStorage. Connections and remembered Script selections belong to
the configured service URL, including its base path. Changing that URL requires
a connection for the new destination; a token from an older release with no
recorded destination is not reused. Run an online command to authorize again.
- Open in QUBE Survey uploads the current source as an immutable version
to the selected authorized project and opens the configured hosted debugger.
Both languages are supported by this upload command.
- Tickets lists active tickets from authorized projects.
- Reproduce Ticket opens the exact reported source read-only and restores
its captured journey in the local Odin workbench.
- Mark Ticket Fixed with Current Script uploads an Odin candidate version
and marks the ticket fixed for human verification. It requires an Owner or
Editor role and hosted write permission.
Disconnect from QUBE Survey removes the current destination's local
connection. It also requests server sign-out; the result message distinguishes
local removal from accepted or unconfirmed remote sign-out. Local removal alone
does not prove that the server revoked the session. An upload already sent to
the server may still exist if you change the connection while it is running.
Commands
Commands use the QUBE: prefix in the Command Palette. Commands marked
(online) require a QUBE Survey connection.
| Command |
Applies to |
| QUBE: Run Interview |
Both |
| QUBE: Show AI Setup |
Both |
| QUBE: Allow MCP Fieldwork Reads (candidate, online) |
Both |
| QUBE: Disable MCP Fieldwork Reads (candidate) |
Both |
| QUBE: Refresh Questionnaire Navigator |
Both |
| QUBE: Open in QUBE Survey (online) |
Both |
| QUBE: Connect or Refresh Tickets (online) |
Both |
| QUBE: Reproduce Ticket (online) |
ODIN |
| QUBE: Mark Ticket Fixed with Current Script (online) |
ODIN |
| QUBE: Fix / Unfix ODIN Data Positions |
ODIN |
| QUBE: Renumber ODIN Questions… |
ODIN |
| QUBE: Extract ODIN Translation Section |
ODIN |
| QUBE: Append ODIN Language Section… |
ODIN |
Settings
| Setting |
Default |
Meaning |
qube.ai.mcp.enabled |
true |
Make the bundled MCP available through VS Code in trusted workspaces; configured in User Settings |
qube.ai.mcp.fieldwork.enabled |
false |
Candidate: permit explicit per-window Fieldwork consent; enabling the setting alone grants no access |
qube.qubeSurvey.baseUrl |
https://test.qubesurvey.com |
Hosted service URL; explicit URL overrides are preserved |
odin.diagnostics.enable |
true |
Parse and report problems |
odin.diagnostics.showWarnings |
true |
Include warnings and infos |
odin.diagnostics.strict |
true |
CATI-safe strict mode: unfixed positions and undefined variables become errors |
odin.diagnostics.unfixedPositions |
true |
Group unfixed-position findings |
odin.renumber.defaultStart |
10 |
Default start for Renumber Questions |
odin.renumber.defaultStep |
10 |
Default increment for Renumber Questions |
The deprecated odin.qubeSurvey.baseUrl also defaults to Test. ODIN language
settings remain under odin.*.
Privacy
Editing, diagnostics, transforms, local interview execution, replay and case
history inspection run locally. The extension sends no telemetry.
Online commands connect to the configured hosted service. Open in QUBE
Survey and Mark Ticket Fixed upload the current editor source; Tickets
reads authorized project, ticket, reported-source and reproduction data. Local
interview answers and case history are not otherwise uploaded by the extension.
The bundled MCP checks the source supplied to its tools locally. An AI
assistant can send that source to its configured model and has its own file
access, connection and data handling settings. Local MCP tools require no
hosted connection. With explicit candidate Fieldwork
consent, the editor reads its matching saved connection and keeps the bearer
in the host; the child receives only a revocable local capability. Read results
can reach the assistant. Its provider's data handling still applies.
Learn more at qubesurvey.com.