Where to click, what to expect.
A hands-on walkthrough of every feature in v1.0.0-r1.8, for testers who want to build their own things: a workspace, knowledge, an agent with the code sandbox, an automation with a hook, a dashboard with cross-filtering, a form, an embedded app, and the platform's own look and feel. Every chapter is a numbered click path and ends with What you should see.
Names in bold are the labels on screen.
A hands-on walkthrough of every feature in release v1.0.0-r1.8, written for testers who have a seat on an installation and want to build their own things: a workspace, knowledge, an agent with the code sandbox, an automation with a hook, a dashboard with cross-filtering, a form, an embedded app, and the platform's own look and feel. Every chapter is a numbered click path and ends with What you should see. If you don't see it, that is a finding — write it up.
Names in bold are the exact labels on screen. Left navigation has two groups: Work (Home, Chat, Knowledge, Automations, Approvals, Activity & Results, Dashboards, Agents) and Console (Console Home, Monitoring, Governance, Identity, AI Gateway, Agent Administration, Connectivity, Platform Settings, Marketplace). The workspace switcher is the pill at the top left; most things you create live in the workspace selected there.
Seats used below: Platform Admin for anything under Console; Workflow Author or Knowledge Worker for the Work side. If a button is missing, your seat lacks the permission — that is by design, and also worth checking against the role you were given (Identity → Roles & Access).
---
Build it yourself, then try to break it.
1Your first ten minutes: a workspace and its data policy
- Console Home → Identity → Workspaces → New workspace (or
/admin/workspaces/new). - Name it
test-<yourname>. Set Data sovereignty policy to Local only (nothing may go to a cloud model) or Local + cloud allowed. Set the Default model tier. - Add yourself under Add member. Save changes.
- Switch to it in the workspace switcher.
What you should see: the switcher pill shows your workspace with a "Local only · cloud blocked" or "Local + cloud" hint; Home shows an empty workspace at a glance.
Try this: with Local only, go to Chat, pick the Cloud Reasoning tier and ask anything. You get a sovereignty refusal, not an answer. Governance → Audit log shows the refusal.
2Knowledge: upload, search, cite
- Knowledge → Create knowledge set → name it. Open it.
- Upload documents (drop files: PDF, DOCX, XLSX, TXT, MD, HTML) or Ingest URL → Scrape & Index. Upload a scanned PDF too.
- Wait for Indexed. Use Search this knowledge set….
- Go to Chat, ask a question the documents answer.
What you should see: the answer carries citations; clicking one opens the passage. A scanned PDF either indexes (a vision model is configured) or tells you at upload time that text extraction needs a vision model — never a silently empty set. A colleague who is not a member of your workspace cannot see the set or get answers from it.
3Chat: exact computation and charts
- Chat, any workspace. Type: "What is 2 to the power 64, exactly?"
- Turn on compute mode (the composer shows Compute mode on — your next message is computed exactly in the sandbox) and send it again.
- Type "Q1 12, Q2 18, Q3 15, Q4 22 — bar chart of quarterly revenue" and use Visualize data → Bar.
- On the chart, use Pin to dashboard (needs Build dashboards).
What you should see: step 1 may be an estimate; step 2 is 18446744073709551616, computed in the sandbox, and the run trace (Agent Administration → Runs) shows the executed code. Step 3 renders a chart with hover values and a PNG/SVG export; step 4 asks for a dashboard and the chart lands there as a widget with its own dataset.
4Agents: design, allow tools, certify, run, revoke
- Agents → Create agent (or Agent Administration → Composer). Name it, pick the Default persona, set Workspace scope to your workspace.
- Allowed tools: tick Search knowledge, Show a table, chart or KPI, Append to dataset. Tick Run code if your licence includes the sandbox (otherwise the tool says Requires licence).
- Posture: Sovereign / Mixed / Permissive. Model tier ceiling and Max USD / run. Create agent.
- To use the code sandbox, the workspace must allow it: Identity → Workspaces → your workspace → Agentic tool access → Run agent-written code (sandboxed) → Save changes.
- Certify: Agent Administration → Certification → + Certify agent (needs a platform CA; if the page says Generate a platform CA first, do that once). Pick the agent, the scope (the tools you ticked), a classification ceiling and an expiry → Issue passport. The agent card now shows Certified. (An off-platform CA can sign instead: Export cert request in the Agent Designer, then Import agent certification token under Certificates.)
- Chat with the agent: ask it to compute something exactly, then to show the result as a table.
- Ask it to do something outside its allowed tools (e.g. write to a dataset you did not allow). Then revoke: Agent Administration → Certificates → the agent's cert → Revoke.
What you should see: the agent's table appears as a card in the chat with a Pin to dashboard button; the out-of-scope request is refused and the run trace shows a denied tool call with the rule; after revocation a new conversation is refused at once and a running one stops within 30 seconds. A Sovereign posture agent refuses code execution in a sovereign workspace regardless of the toggle.
5Automations: a workflow with an approval and a Publish-result step
- Automations → Design workflow (Designer). Add trigger → pick one (e.g. Webhook or Schedule). Add next step → AI step (prompt, Model tier, Data classification).
- Add next step → Approval → set Approvers.
- Add next step → Code (JavaScript in the sandboxed worker) that returns rows, e.g.
return { rows: [{date: '2026-09-01', line: 'U1', passengers: 120}] }. - Add next step → Publish result → pick or create a dataset, write mode Append, rows
{{code.rows}}. - Publish. Back in Automations → Active, use Run now. Approve it under Approvals.
- Automations → History → open the run.
What you should see: each step's input and output; the approval shows who decided and when; the run has a Published rows tab; Dashboards → Datasets shows the new rows. Try the ✨ Help me build button in the Designer: describe an automation in a sentence and Render on canvas.
6Hooks: react to what happens
- In the Designer, create a second workflow whose trigger is When an event happens, event
dataset.rows.published. Add one step (an AI step summarising{{trigger.payload}}). Publish. - Automations → Hooks → New hook: title, Event
dataset.rows.published, Filterpayload.datasetId eq <your dataset id>(use Test filter against the sample payload), Handler = the workflow from step 1. Enable. - Run the workflow from chapter 5 again (or import a CSV into the dataset).
- Open the hook's Deliveries.
What you should see: 1 delivered, a View run link, and the handler's run in History. Disable the handler workflow and trigger again: the hook shows handler paused and deliveries fail honestly, with Retry. In Deliveries → Replay events, pick a window, Preview, then Replay N — the replayed deliveries carry a replayed #n badge and each starts exactly one new run.
7Dashboards: datasets, business models, widgets, cross-filter, forms
Datasets
- Dashboards → Datasets → New dataset: title, Columns (e.g.
datedate,linestring,passengersinteger,occupancynumber), Keep rows for (days) = 90. Create dataset. - Open it → Import CSV (write mode Upsert by key or Append).
What you should see: the row count, the retention, the quota bar. In the grid: drag a column edge to resize, drag a header to reorder, Search in table (Ctrl/Cmd-F), select a range and Ctrl/Cmd-C to copy into a spreadsheet; numbers right-aligned; the first column stays put on wide tables.
A dashboard
- Dashboards → New dashboard → Create. You are in the editor.
- Add widget: Type KPI; Business model (one is created for each dataset); tick a measure; in the property panel pick the Measure; Add. Repeat with Type Chart: tick a measure and a dimension, pick X field / Y field from the pickers, tick Show values on hover. Under Interactions, set Clicking a bar or slice filters other widgets by your dimension. On the KPI, tick Listen to selections from other widgets.
- Drag widgets by their header; resize from any edge; Pin one so it stays put; drag the New widget chip onto an empty cell to create a widget right there.
- Add filter (a period filter). Save draft, then Publish.
- Open the published dashboard (it is now in the left navigation under Dashboards). Click a bar.
What you should see: the other bars dim, a chip line: U1 appears above the dashboard, the KPI re-queries to the filtered value, and the chip's ✕ clears it. Versions lets you roll back; Retire removes the dashboard from the navigation. Try ✨ Help me build with a sentence like "passengers per line for the current month, and a total": the proposal is validated against the model before you see it.
A form
- Add widget → Type Form (Adaptive Card). Keep the sample card, or add an
Input.ChoiceSet, anInput.Numberwithmin/max, and anAction.ShowCardwith extra fields. Pick a workflow as the target. Add, Save draft, Publish. - On the published dashboard submit the form empty, then correctly.
What you should see: the empty submit is blocked in the browser with the card's own messages, zero requests sent; the correct submit shows the success message and starts the target workflow (Approvals or History shows the run). Share on a dashboard with a form is refused — forms are never public.
Share
- On a dashboard without a form: Share → Create link (label, hours). Open the link in a private window.
What you should see: the dashboard renders read-only with your organisation's name and the expiry, no login; Revoke in the same dialog kills it. (Needs the resultsPublicShare licence flag and Share a result.)
8Marketplace and templates
- Marketplace → filter Type Solution → open one → Install → choose a workspace → Confirm install.
- Automations → Templates → Deploy template.
What you should see: the solution's workflows appear under Automations → Active; a solution that carries a dashboard bundle also creates its dashboard, datasets and hooks in the chosen workspace (Dashboards navigation).
9Extensions: make the platform look and speak like you
Everything below is a signed pack — a zip with a manifest and data files, signed with a key you keep. The platform never runs code from a pack.
Sign your first pack
- On your laptop with Node 20:
node tools/aancer-pack/cli.mjs keygen --out mykey.key(from the release bundle; producesmykey.keyandmykey.pub). - Write
manifest.json(see the customer guide Authoring a pack for the minimal example; thehexad-cifolder in the bundle is a complete theme pack you can copy). node tools/aancer-pack/cli.mjs sign manifest.json content/ -o mypack-1.0.0.ancpack --key mykey.key
Install it
- Platform Settings → Extensions → Add trust key: key id (must equal
publisher.keyIdin your manifest), label, the contents ofmykey.pub. - Import pack → choose the
.ancpack→ Import. Read the verification summary and any warnings. Configure & activate → bind the parameters (usually a workspace) → Activate.
What you should see: a pack imported before the trust key was added is refused with PACK_SIGNER_UNKNOWN; after, "Bundle verified", the items listed with their state, and after activation everything the pack declares appears: theme applied, navigation entries, Home cards, dashboards, hooks (managed by pack). Retire pack removes it all and restores the stock product; a newer version of the same pack id imports as an upgrade and you can roll back.
What a pack can carry
| Item | What it does | Where it shows |
|---|---|---|
theme v2 | colours per theme block (light/dark/…), self-hosted fonts, logos, favicon, login page colour/tagline/footer, email chrome; may be install-wide or per workspace | everywhere; Branding page becomes managed by pack |
locale | your vocabulary over en/de/es/ar strings | the UI, including the login page |
dataset, model, widget, dashboard | a complete result layer | Dashboards |
hook | an event subscription | Automations → Hooks |
function | a JavaScript or Python function (sandboxed) usable as a measure, a code preset or an agent tool | models, Designer, agents |
chip | quick-action buttons in the chat composer | Chat |
link | an external link in the Dashboards navigation | Dashboards |
card | a card on Home ("From your packs") | Home |
app | one of your own web applications inside the Dashboards hub | Dashboards (needs embeddedApps) |
Your look and feel without a pack
Platform Settings → Branding: Platform name, Login page tagline, Primary color, Secondary color, Logo URL, Favicon URL, Login background color, Default theme. Live preview shows the login page. This is the six-field, no-signing route; a theme pack does everything this does plus fonts, per-block tokens and per-workspace variants.
10Embedded apps: your own application inside the hub
- In your pack, add an
appitem:url(https,{{workspace}}allowed),origin,capabilities(e.g.read:me,read:dataset:<id>,write:dataset:<id>,navigate,notify),egress.hosts. Import and activate as in chapter 9. - Platform Settings → Extensions → open the pack → Manage app: read the origin and capabilities, tick the acknowledgement, Approve; Approve each egress host.
- Your application must answer with
Content-Security-Policy: frame-ancestors <your platform origin>and must not sendX-Frame-Options: DENY. - Dashboards → your app appears under its group with the Embedded app glyph. Open it.
What you should see: before approval, an honest Needs approval card; if your app does not allow framing, the app has not allowed this platform to embed it with Retry; when it does, your app loads and receives a short-lived token over the bridge (never in the URL). Log out in another tab: the frame shows session revoked within 15 s. Rotate secret shows the new introspection secret once. Every bridge call is audited under app.capability.*.
11Governance: prove it happened
- Governance → Audit log: filter by action (
agent.tool.call,hook.delivered,extension.pack.activated,sovereignty.*). - Governance → Records of processing → export; Compliance → the regulatory reports.
- Console Home → Monitoring: runs, cost, security events.
What you should see: every consequential action from the chapters above, with who, when, workspace and outcome; denied actions as denials; row-level data never in the log. The audit chain verify endpoint (/api/admin/compliance/audit-chain/verify) reports ok: true.
12Things that should refuse — test them on purpose
| Try | Expected |
|---|---|
| Cloud tier in a Local-only workspace | sovereignty refusal, audited |
| Agent tool outside its passport | denied in the trace, nothing executed |
| Code tool without the workspace toggle or the licence | tool absent or Requires licence |
| Share a dashboard that has a form | refused with the reason |
| Import a pack signed with an unknown key, or a tampered pack | PACK_SIGNER_UNKNOWN / hash mismatch |
| A theme with white text on white | refused as illegible; low-contrast pairs are warnings |
| Hook on a workflow without an Event trigger | saved disabled with HANDLER_INACTIVE |
| Empty or out-of-range form submit | blocked in the browser, zero requests |
Embedded app without frame-ancestors | honest refusal card with Retry |
| Open a knowledge set of a workspace you are not in | 403 / honest empty state |
Every refusal above is a feature. Report a refusal that didn't happen, or one that happened without an audit row.
Found something that did not match?
That is a finding. Write it up on your board with the chapter number, what you clicked and what you saw; every refusal that did not happen, or happened without an audit row, is the most valuable report you can send.