Reading & motion

Stops motion. Your device’s reduced-motion setting always takes priority.

AI AlliancenAgent HarnessIn development

A shared development project

Build with AI.
On a shared foundation.

Agent Harness

An open agent harness for the public sector.

We are building the framework around AI agents so more people can develop, test and share solutions — with clear rules for data, tools and human approval.

The first version is taking shape. Experience will shape the next.

Our next shared test

Hackathon

09.30–15.30 · KL-huset

Rooms 2-01 & 2-02

A day to build.
And learn together.

Vibecoding with Corti S1 and a public-sector agent harness. We test the parts that are ready and gather feedback for the next version.

In person. Facilitated by Parthee. Participation by arrangement. Bring a laptop, charger and an idea.

About the day and participation ↗
See the full provisional programme

45 minutes of shared introduction, including all talks and transitions. 3 hours and 45 minutes of building time across two sessions.

Welcome and shared starting point

Parthee introduces the day, the initiative and the ambition to share.

Corti

Why Corti supports the initiative and how to get help.

Promte

Why Promte supports the initiative and how to get help.

Mistral · to be confirmed

A perspective on the collaboration. If this session is not confirmed, we will start earlier.

Practical transition

Where teams can get help, and transitions between talks.

Getting set up together

Setup and access to the services. A help desk for anyone needing further assistance.

Ideas from the municipalities

12–13 municipalities, no more than 2 minutes each.

Building session 1

Define the scope of the task and build a first version.

Lunch and break

Exchange ideas across teams.

Building session 2

Keep building, test each other’s solutions, fix errors and collect links.

Cake and next steps

Wrap-up, sharing and a date for the online follow-up.

Who is contributing?
Kalundborg

Development and facilitation

Promte

Coding platform and selected open source components

Corti

S1 model and inference

DCAI / Gefion

Part of the initiative

Komplai

Harness development

Velatir

Security and implementation

The idea

AI can propose a lot.
The boundaries must be clear.

An AI agent can use tools and perform tasks. A harness is the layer around the agent that should connect its work to the rules and workflows we decide on.

We want to understand what the agent may do, when a person must approve and how actions are documented. That is the shared foundation we are developing and testing together.

Watch the film

An introduction to Aura

Film in Danish · 2:54

Architecture and skillsOpen the interactive diagram: from skill loading to tools, approvals and testing.

Shared method.
Your tool. Your solution.

Local test version · in development

The film shows the ambition. Here is the test version’s architecture: the instruction layer, agent engine, model connection and action controls.

Aura Harness

Shared ground rules + 12 skills

Scope · code · testing · security · deployment · handover

Working instructions — not technical access control
PATH 2 / THE AURA APP

On your computer

Electron

You + Aura

Electron UI · task and approvals

OpenCode

Agent loop · local process via adapter

Your project

Files, preview and Git

File edits and commands require approval. The agent does not run in a fully isolated sandbox.
INSTRUCTION LAYER / THE AURA APP

How skills are loaded.

Ground rules set the direction. Skills make the working method specific to the task at hand.

  1. 01

    Read the library

    profiles/grundregler.md
    profiles/skills/*/SKILL.md

    Shared rules, skills and their reference files are text that can be read and adapted.

  2. 02

    Apply project choices

    features.cjs → resolve()

    Project choices override global defaults. Dependencies are checked. Skills.list uses customised skill text for the project, when present.

  3. 03

    Assemble active context

    Skills.context(projectRoot)

    Ground rules are always included. Only skills for enabled features are made available to the engine.

A / SYSTEM PROMPT

Rules are included from the start

Ground rules + the app’s own rules + project guidance form the system instruction. The task, project brief and selected references supply context.

context.rules + appRules + projectGuidance
B / SKILL TOOL

Skill text is loaded when needed

Enabled skills are written to the engine’s local configuration. The agent is instructed to fetch the relevant SKILL.md through the skill tool and read only the references it needs.

config/skills/<name>/SKILL.md
FROM TASK TO WORKING METHOD

See what a specific skill contributes

TASK → LOADING

Build the library’s registration form.

skill({ name: "harness-design-og-tilgaengelighed" })

Relevant reference: references/tilgaengelighed.md

DEVELOPMENT GUIDANCE

Use the selected design guide. Plan mobile layout, labels, focus and error states before building the component.

TESTING AND HANDOVER GUIDANCE

Try the form with a keyboard and on a narrow screen. Report what was checked and what remains.

Illustrated example using the project’s actual skills. The buttons make no AI calls. Several skills may apply to one task; the text is guidance, not a guarantee that the model follows it.

SEPARATE CONTROL LAYER

A skill grants no extra permissions.

The engine’s allowlist determines which skills can be fetched. File edits and commands are checked separately and require approval; planning does not allow writing files or running commands.

  1. Agent proposal
  2. permissions
  3. Approve / decline
  4. Execute / stop
Technical details: configuration and session

engine.cjs → writeSkills()
The engine’s config/skills directory is recreated at startup with the active package. Disabled skills and previous copies do not remain there.

chat-session.cjs → fingerprint
Ground rules, skill content and features are included in the session fingerprint. Changes create a new model session on the next send, so old instructions are not reused as unchanged context.

engine.cjs → permissions()
Skill access starts with deny; only enabled skill names receive allow. The app checks the engine version and effective configuration at startup. These controls do not make the agent a fully isolated sandbox.

Source: the supplied Aura code, commit df681eb, desktop/core/{features,skills,engine,chat-session,project-guidance}.cjs and profiles/. This describes the Aura app’s workflow; other coding tools have their own loader and permissions.

FOLLOW AN EXAMPLE IN AURA

A site for library activities

You start with a need.

A fictional example: a small site for library activities. You choose the audience, content and project folder. Creating the project does not yet require an AI call.

Idea → local projectFictional example · no files are changed or published
THE FILM’S AMBITION

From personal need to shared value.

  1. Yourself
  2. Team and department
  3. Selected citizens

Each step requires decisions about access, data and responsibility. The film’s shared municipal infrastructure and MitID are a direction, not finished integrations in the app.

Based on the supplied Aura film and project code as of 10 October 2026. Organisation profiles, shared login, an audit trail with verified approvers and full coding-agent isolation have not yet been built. The app is a test version; a complete workflow on a regular tester’s own computer has not yet been documented.
Want to go deeper? Read the architecture proposal in our knowledge library.
An everyday exampleFollow illustrative meeting minutes in four steps. A goal illustration — no AI calls.

An illustrative workflow

You set the direction.
Follow the task all the way.

An employee wants meeting minutes from fictional notes. Explore the four steps.

YOUR TASK01 / 04

“Draft meeting minutes from my fictional notes. Only save them after I approve.”

A clear mandate

You define the task, material and limits on what the agent may do independently.

Illustration of the goal · no AI calls

Get started

Start with a task.
Bring your experience.

Use the core rules and skills in your own coding tool, or try the local desktop app. Both are in development. Instructions provide guidance, not access control.

  1. 01

    Choose a specific need

    Bring an idea or a project to rebuild. Set clear boundaries and use synthetic test data.

  2. 02

    Build with what is ready

    At the hackathon, we will test the first version with Corti’s models and Promte’s platform. Setup and access details will follow before the event.

  3. 03

    Share results and learning

    Record what works and what is missing. The aim is to share solutions as open source so others can build on them.

Already have access to the prototype?

Try the instruction packs locally

Install core rules and skills using the app, your coding agent or manually. This example uses Git and Node.js. Repository access is currently required. Always follow the latest README.

Adjust the tools and path for your existing project. The app is a test version for invited users; a full workflow on an ordinary tester’s computer has not yet been tested.

Read the README ↗
git clone https://github.com/ai-alliancen-org/ai-harness.git
cd ai-harness
node scripts/harness.cjs install --tools claude-code,cursor --project ../mit-projekt

Hackathon solutions

Participants’ projects will be collected here after the hackathon, when they are ready to share.

An open effort

The foundation gets better
with more perspectives.

Your experience of everyday needs and requirements can help shape the next version.

Follow the initiative ↗

The goal is to share the work as open source. Repository access is currently required.