CAS Human-AI Collaboration
Welcome to HAICStudio
Use the participant access code supplied by your course administrator. No name or email is required.
Conversation
Start a conversation
Guided tutorial
CAS Human-AI Collaboration
Use the participant access code supplied by your course administrator. No name or email is required.
Conversation
Guided tutorial
Virtual workspace
Learning support
At your pace
Browse concise hints, review guided workflows, and open practical reference material from one place.
Independent study
No hints match this view.
A hint arrived at a useful moment. Open it when you are ready.
Guided practice
Choose a workflow, continue saved progress, or review a completed tutorial.
No tutorials match these filters.
Your progress in the current tutorial will stay saved.
The tutorial will return to Available. You can start it again from the beginning later.
Standalone reference
Use this specification before asking an AI model to write analysis code. It describes the complete guest API, figure rules, unavailable browser features, and resource limits.
.js program, and inspect the result before running it.
HAICStudio browser JavaScript runtime contract
Return one self-contained JavaScript program. It runs as a strict script in a fresh constrained QuickJS WebAssembly guest.
Available guest API:
- console.log(...values), console.info(...values), console.warn(...values), console.error(...values): write bounded terminal messages. haic.log(...values) is equivalent to console.log(...values).
- haic.fileNames(): return the exact names of the local files selected for this run.
- haic.readText(name): read one selected UTF-8 file by exact name.
- haic.parseCsv(text, options = {}): parse CSV. delimiter defaults to ","; headers defaults to true. With headers:false it returns arrays.
- haic.stats.sum(values), mean(values), median(values), quantile(values, probability), variance(values, sample = true), standardDeviation(values, sample = true), min(values), max(values), linearRegression([[x, y], ...]), and groupBy(rows, keyOrFunction).
- haic.random(integerSeed): return a deterministic pseudo-random function. Math.random() is disabled.
- haic.writeText(name, content): propose one UTF-8 text file.
- haic.writeCsv(name, rows): propose one deterministic CSV file from an array of row objects containing only finite numbers, strings, booleans, or null.
- haic.figure(name, spec): propose a Vega-Lite v6 figure. Use inline data.values only. The validated figure creates both name.vl.json and name.png.
Figure rules:
- Allowed top-level properties: $schema, title, description, width, height, data, mark, encoding, layer, resolve.
- Supported marks: arc, area, bar, boxplot, circle, errorband, errorbar, line, point, rect, rule, square, text, tick, trail.
- No remote data, URLs, transforms, expressions, signals, event handlers, or image marks. A figure description supplies its accessible label.
- Width must be 200-1200 pixels and height 200-800 pixels. At most 6 layers are allowed.
Unavailable capabilities:
- No alert, window, document, DOM, canvas, network APIs, browser storage, timers, modules/imports, require, packages, Node.js, process, shell, PHP, server, or host-page access.
- Date.now() and new Date() without an explicit value are disabled. Use explicit dates only.
Resource and output rules:
- At most 8 uniquely named UTF-8 input files and 5 MiB total input; 120,000 source characters; 5 seconds; 64 MiB memory.
- At most 100 terminal lines, 12 emitted outputs, 4 figures, 5,000 rows, 64 columns, and 2 MiB combined generated text/specification data.
- Output names must be unique ignoring case, at most 120 characters, and plain file names without paths. The program must emit at least one text, CSV, or figure output.
- Treat selected source data as read-only. Validate inputs, avoid sensitive logs or outputs, use explicit seeds, calculate aggregate rows once, and pass those same rows to haic.writeCsv() and haic.figure().
Your choices
Optional guidance can be paused and restored. Course-required guidance remains available.
Your hidden cards
Restore an intervention if you want it to become eligible across your conversations again.
You have not hidden any Brain Kicks interventions.
A moment to work with the AI differently
ZHAW SIRA Lab
We are the ZHAW Institute of Business Information Technology. Everything you do with us is treated anonymously and kept confidential.
In this tool, your chats, saved drafts, queued prompts, and files are stored in a database. We are interested in how you use this tool, how you chat, and how you create and access files. We read this material to learn and understand how you and others work with generative AI. We do not want to know who you are.
Everything retained in the application database is collected and processed anonymously by ZHAW. To generate a response, the submitted prompt and relevant chat history are sent to GPT at OpenAI. Saved drafts, later queued prompts, and workspace files stay on the course server unless you insert text or explicitly attach a PNG and submit it. An attached PNG is sent only for that turn; later requests retain a text-only marker unless you reattach the image. When Model laboratory is available, the application stores your workspace-wide model choice and compatible parameter settings. Each provider request records the exact model and parameter configuration that produced it, and completed responses show that content-free configuration as evidence; changing settings later does not rewrite earlier records. Do not upload sensitive source datasets. Saving generated code leaves it inert. Only a saved .js file you explicitly run is executed in a constrained browser-only realm; optional local input files stay in browser memory and generated outputs reach the course server only if you choose to save them. No participant code runs on the application server.
When Learning and guidance is available, the application also stores its assigned policies and content, your optional settings, which hints were delivered, shown, opened, dismissed, or suppressed, and your tutorial starts and current progress. Leaving and resetting a tutorial erases its current step progress but retains the content-free fact that it was started for aggregate reporting. Contextual hint selection uses named interface events and bounded derived counts or yes/no indicators. If Brain Kicks is on, the application sends a bounded snapshot of completed text from the current conversation to a dedicated OpenAI assessor after a response. It stores only controlled situation states, confidence values, owned message references, and operational counts—not a second copy of the conversation or free-text reasoning. Optional Brain Kicks starts paused until you turn it on; course-required Brain Kicks cannot be paused, but individual cards can still be hidden. Other conversations, drafts, queued prompts, attachments, images, and workspace files are excluded. Education records do not copy unsent prompt text, selected passages, workspace-file contents, keystrokes, caret positions, visited URLs, or free-text assessor output. Administrators can see content-free totals by cohort, not individual activity or a route into participant conversations.
For reliability support, each OpenAI request also retains content-free operational telemetry such as lifecycle stage, model configuration, bounded input and response measurements, token counts, HTTP status, timing milestones, and controlled error categories. It does not copy prompts, responses, credentials, workspace content, or raw provider errors. You can open Request diagnostics from the conversation status bar and download the same redacted JSON for support.
Alexandre de Spindler is responsible for this tool. If you have questions, uncertainties, or comments, you can email him or contact him on Teams.
Conversation
Loading chat information…
This estimates the next request from locally stored text history. It is not a quality score, draft text is excluded until sent, and the character estimate does not precisely measure vision-token use.
This local safety limit may stop new turns before the model context window is full.
Content-free telemetry
This view excludes prompts, responses, credentials, workspace content, images, and raw provider errors.
Open a conversation to inspect its requests.
will be deleted.
Its conversations will be preserved and moved to Ungrouped.
This permanently deletes the conversation, every message, its saved draft, and every queued prompt. Workspace files are preserved. This action cannot be undone.
Local browser tool
Runs only in this browser. A fresh constrained JavaScript/Wasm realm receives no network, page, cookie, storage, module, or application access. Generated code is still untrusted: inspect it before running.
Select optional UTF-8 CSV, TSV, JSON, or text files. Their contents remain in browser memory and are never uploaded by this action.
Up to 8 files and 5 MiB total. Use haic.readText(name), haic.parseCsv(text), haic.stats, haic.writeCsv(name, rows), and haic.figure(name, spec).
No local input files selected.
alert() and browser APIs are intentionally unavailable. Use console.log() or haic.log() for terminal output. Copy this contract into a prompt when asking an AI to generate analysis code.
HAICStudio browser JavaScript runtime contract
Return one self-contained JavaScript program. It runs as a strict script in a fresh constrained QuickJS WebAssembly guest.
Available guest API:
- console.log(...values), console.info(...values), console.warn(...values), console.error(...values): write bounded terminal messages. haic.log(...values) is equivalent to console.log(...values).
- haic.fileNames(): return the exact names of the local files selected for this run.
- haic.readText(name): read one selected UTF-8 file by exact name.
- haic.parseCsv(text, options = {}): parse CSV. delimiter defaults to ","; headers defaults to true. With headers:false it returns arrays.
- haic.stats.sum(values), mean(values), median(values), quantile(values, probability), variance(values, sample = true), standardDeviation(values, sample = true), min(values), max(values), linearRegression([[x, y], ...]), and groupBy(rows, keyOrFunction).
- haic.random(integerSeed): return a deterministic pseudo-random function. Math.random() is disabled.
- haic.writeText(name, content): propose one UTF-8 text file.
- haic.writeCsv(name, rows): propose one deterministic CSV file from an array of row objects containing only finite numbers, strings, booleans, or null.
- haic.figure(name, spec): propose a Vega-Lite v6 figure. Use inline data.values only. The validated figure creates both name.vl.json and name.png.
Figure rules:
- Allowed top-level properties: $schema, title, description, width, height, data, mark, encoding, layer, resolve.
- Supported marks: arc, area, bar, boxplot, circle, errorband, errorbar, line, point, rect, rule, square, text, tick, trail.
- No remote data, URLs, transforms, expressions, signals, event handlers, or image marks. A figure description supplies its accessible label.
- Width must be 200-1200 pixels and height 200-800 pixels. At most 6 layers are allowed.
Unavailable capabilities:
- No alert, window, document, DOM, canvas, network APIs, browser storage, timers, modules/imports, require, packages, Node.js, process, shell, PHP, server, or host-page access.
- Date.now() and new Date() without an explicit value are disabled. Use explicit dates only.
Resource and output rules:
- At most 8 uniquely named UTF-8 input files and 5 MiB total input; 120,000 source characters; 5 seconds; 64 MiB memory.
- At most 100 terminal lines, 12 emitted outputs, 4 figures, 5,000 rows, 64 columns, and 2 MiB combined generated text/specification data.
- Output names must be unique ignoring case, at most 120 characters, and plain file names without paths. The program must emit at least one text, CSV, or figure output.
- Treat selected source data as read-only. Validate inputs, avoid sensitive logs or outputs, use explicit seeds, calculate aggregate rows once, and pass those same rows to haic.writeCsv() and haic.figure().
Ready. The runtime starts only when you choose Run analysis.
Every figure produces a deterministic PNG preview and its validated .vl.json specification. Save only reviewed aggregate outputs; never save sensitive source records.
will be permanently deleted.
Deleting a folder also deletes every file and subfolder inside it. This action cannot be undone.