IEVA · Offer · Harness
Governed actions around the model.
The model decides. A harness turns decisions into actions. The IEVA Harness is a thin runtime layer around the coding agents you already use — Claude Code and Codex — that makes each action recorded, reviewable, and gated.
It is deliberately small: session logging, policy, approvals, bounded delegation, and a learning loop you can inspect. Nothing else.
Draft offer — for founder reviewBuilt from internal research. Nothing on this page is shipped or for sale.
Why a harness matters
IEVA runs on written contracts: a pipeline, reviewable memory, skills, approval gates, privacy boundaries. Today those contracts are instructions. A capable agent follows them. Nothing checks that it did.
- Nothing records what the agent actually read, sent to a model provider, called, or wrote.
- Nothing stops a write that bypasses a rule, apart from the model’s own compliance.
- An approval gate is only a sentence when no person is watching, as in a scheduled briefing.
- No trace exists to show why a skill failed, or whether a change to it made things better.
The existing health check validates structure. It does not validate behavior. The harness closes that gap, and it is how governance becomes demonstrable rather than aspirational.
One design stance guides the scope: keep the tool surface small and well governed. The harness stays thin, and IEVA’s tool set stays narrow.
What the harness does
Six parts, each one a plain module with a clear seam. Every part is direction or concept today, and labelled as such.
01 · Record
Session log
An append-only event log per session: context sent, tool calls, policy decisions, approvals, file writes, usage. Redacted as it is written. Local only.
Product direction02 · Decide
Policy and presets
Your permission and privacy notes compile into a policy. Every tool call is classified and allowed, asked, or denied. There is no full-access preset.
Product direction03 · Ask
Approvals as Markdown
An approval request names the exact action, target, and payload, and it expires. Approving covers that action once, never a class of actions.
Product direction04 · Run
Governed headless runs
A job is a Markdown file. A run snapshots the vault, launches the agent with a narrow tool list, audits the diff, and reverts writes outside policy.
Concept workflow05 · Delegate
Bounded delegation
A subagent starts only from a written contract with allowed paths and a budget. It can be steered and stopped. Its handoff is reviewed, never absorbed. Advanced edition.
Concept workflow06 · Learn
Reviewable learning
Traces become pattern notes, pattern notes become skill proposals, and a proposal changes a skill only after your approval and a clean regression check.
Concept workflow
Architecture, in plain language
Markdown stays durable and authoritative. The harness adds two machine-readable stores that are never canon: raw session logs, and generated policy and usage rollups. Everything a person must review or approve remains a note.
Product direction
Durable layerMarkdown. Canonical. Everything a person reviews or approves.
- ProfileAgent permissions, privacy boundaries
- SkillsCanonical workflows, synced to each agent
- Pipeline notesInbox, projects, output, reference
- WikiWritten only through harvest
- OperationsApprovals, delegations, briefings
- LearningPatterns, proposals, example cases
- JobsOne Markdown file per repeatable run
Policy and context are compiled from Markdown
IEVA HarnessNode built-ins only. No network code in the core.
- Command lineRun, audit, explain policy, approve
- Policy compilerPresets and action classes
- Context assemblerStable-to-volatile order
- Tool pipelineClassify, decide, execute, redact
- Session storeAppend-only log, migrations, retention
- Snapshot and diff auditReverts out-of-policy writes
- Skill runtimeSnapshot, apply, revert, sync
- Case replayTemporary fixture copy
- Subagent supervisorSteer, stop, budgets
Runs are launched; events come back normalized
Agent adaptersThe agent keeps its own loop and its own sign-in.
- Claude CodeHeadless runs, policy hook, transcript import
- CodexHeadless runs, transcript import
- Manual importContract-only: a pasted or exported transcript
- Direct API adaptersOpenAI-compatible and Anthropic APIs
Events are appended, redacted at write time
Local runtime stateMachine-readable, not canonical, outside search and graph.
- Session logsVersioned, one event per line
- SnapshotsVault hashes and skill copies
- Generated rollupsCompiled policy, usage, review queue
Derived views, counts only
SurfacesNo second interface to learn.
- Obsidian Control DeckRuns, approvals, review queue, usage, learning
- Markdown fallbackThe same views as plain notes
- TerminalRuns, audits, usage, policy explanations
One governed run
A job is a Markdown file. Its frontmatter names the skill, preset, agent, budget, and the only places it may write. The body is the task.
- Check gatesSetup healthy, profile approved, preset allowed
- SnapshotHashes of every path the preset may write
- Assemble contextStable first, volatile last; every file recorded
- Launch agentIsolated configuration, narrow tool list
- Log and redactEvents streamed into the session log
- Never blockAn ask becomes a deny plus an approval request
- Diff auditWrites outside policy reverted and flagged
- Deliver as draftProvenance attached, review pending, run report written
---
job: briefing
skill: session-start
preset: draft
adapter: claude-code
model: "" # empty = agent default; an explicit value always wins
effort: default # expensive settings are never the default
outputs:
- "briefings/{{date}} Briefing.md"
budget:
max-turns: 20
max-minutes: 10
---
Produce today’s briefing as a draft. Cite a source note for every signal.
Do not modify any file other than the output.What is logged, and why
The principle is simple: anything the model saw should be reconstructable from the log. That is the same standard IEVA already applies to memory — reviewable, never hidden — extended to runtime.
Product direction
- What left the machine
- Before a run, the harness records every file placed in context, with a hash and the provider it went to. Sending context to a model provider is a transfer. This is the ledger of it.
- Tool calls and results
- Each call is logged with its action class and the paths it touched. Large results are truncated and stored with a content hash, so notes are not duplicated into logs.
- Policy decisions and approvals
- Allow, ask, or deny, with the rule that produced it. Approval requests and their outcomes are events too.
- File writes and deliveries
- Before and after hashes for every write, whether it was within policy, and which files were delivered for review.
- Usage
- Tokens, cache reads where the agent reports them, latency, and model. Rollups are counts and ratios only. Cost estimates use a price table you maintain; we do not ship authoritative prices.
- How a session ended
- Completed, needs approval, stopped, over budget, or launch failure. A run with zero tool calls and no deliverable is reported as a failure, not a success.
{"v":1,"seq":1,"type":"context/assembled","data":{"provider_destination":"<provider> via <agent>",
"files":[{"path":"AGENTS.md","sha256":"…","bytes":29758,"sensitivity":"normal"}]}}
{"v":1,"seq":9,"type":"tool/call","data":{"call_id":"t7","tool":"Write",
"paths":["wiki/Pricing lessons.md"],"action_class":"reversible-write"}}
{"v":1,"seq":10,"type":"policy/decision","data":{"call_id":"t7",
"decision":"deny","rule":"wiki-guard","preset":"draft"}}
{"v":1,"seq":20,"type":"session/end","data":{"status":"completed","tool_call_count":11}}Redaction happens at write time
- Built-in secret patterns — API keys, private keys, tokens, card-like numbers — are replaced with a marker and a length. No hash is kept, because hashes of short secrets can be brute-forced.
- Content read from folders you mark restricted is logged as metadata only: path, size, content hash.
- You can add your own redaction patterns in your privacy note.
- A format change writes a new log file beside the untouched original, with hashes of both. Older readers report a newer version clearly instead of failing silently.
Logs are local by default. They sit in a runtime folder that Obsidian does not index, so they stay out of search and graph. Capture is proposed as opt-in at onboarding, with 30-day retention and one command to prune.
Policy and approvals
Policy is compiled from two notes you already own: your agent permissions and your privacy boundaries. The compiled file is derived, never hand-edited. When a decision surprises you, a policy-explain command prints the decision and the Markdown line that produced it.
Product direction
Honest enforcement levels
Not every agent can be governed equally. Each action path carries one of three levels, and every run report states which one applied.
| Level | When | What it guarantees |
|---|---|---|
| Enforced | A governed headless run launched by the harness | A tool allowlist passed to the agent, the policy hook, a vault snapshot before the run, a diff audit after it, and automatic revert of writes outside policy. |
| Hook-mediated | An interactive session in an agent that offers pre-tool hooks. Claude Code does; others are confirmed per agent before release. | The policy hook can deny or ask before a tool runs. The session transcript is imported afterwards. |
| Contract-only | Any other agent | Your written rules, plus an audit after the fact: a file diff against the last snapshot. |
Five presets. No full-access preset.
A preset answers two separate questions: must the user confirm, and what can the action reach. Restricted folders are unreadable in every preset. Until a profile is approved, only read-only and maintain are available.
| Preset | Read | Write | Material change | External or irreversible | Typical use |
|---|---|---|---|---|---|
read-only | Permitted folders | Session log and run report only | Deny | Deny | Exploration, audit, briefing preview |
draft | Permitted folders | Declared draft destinations only | Deny; a proposal note instead | Deny, then an approval request | Briefings, triage proposals, review drafts. Default for headless runs. |
operate | Permitted folders | Reversible internal writes in permitted folders | Ask | Ask when interactive; deny when headless | Normal assisted work. Interactive default after onboarding. |
sandbox | Fixture copy only | Fixture copy only | Allowed inside the copy | Deny | Replaying a saved example case |
maintain | System files | Generated dashboard data and derived indexes | Deny | Deny | Refresh, health checks, migrations |
How a tool call is decided
- Classify the call: action class, touched paths, network effect.
- An always-deny rule matches — credentials, restricted folders, a wiki write outside harvest — and the call is denied.
- A write outside the preset’s destinations is denied when headless, asked when interactive.
- External actions, deletions, and material changes ask. Headless, the ask becomes a deny plus an approval request.
- Otherwise the call is allowed.
- Afterwards the result is redacted before logging, and the write is recorded with hashes.
Approvals are notes
An approval request is a Markdown file with the exact action, the target, a content diff or payload summary, the requesting session, and an expiry. Approving it authorizes one execution of exactly that action. It does not authorize similar future actions. Expired requests are void.
Any tool call with network effect — a web fetch, a connector call, a push, a send — is classified external: asked when interactive, denied when headless. Writes to the wiki are denied unless the harvest skill is active, an approval exists, and the article cites a real output record.
Bounded delegation, clean handoffs
Concept workflowAdvanced edition
A subagent can start only from a delegation contract: objective, definition of done, permitted files and tools, prohibited actions, required sources, uncertainty to surface, handoff format, approval gate. The contract also fixes the preset, the allowed paths, and the budget.
- Steer. Messages join a steering queue in the contract and are delivered between turns, where the agent supports resuming a session. Undelivered messages can be edited or deleted.
- Stop. Stopping ends the process, records the stop, and runs the diff audit.
- Budget. Turns, wall time, and optional spend are enforced by the harness. Over budget, the subagent stops and files a handoff marked incomplete.
- Handoff. The result must fill the handoff template. Its content never becomes memory, output, or wiki automatically.
No teams, rosters, mailboxes, or autonomous swarms. In the local edition the delegation contract remains a manual discipline.
The learning layer
Concept workflow
Agent memory has a known gap: nobody checks whether it remembered the right thing. IEVA’s answer is a loop in which every step is a file you can read, and the only step that changes behavior needs you.
- TracesSession logs. Immutable.
- Pattern notesProblem, root cause, fix. Cite their sessions.
- Skill proposalOne atomic change: create, patch, or no action
- GateYour approval, plus no regression on saved cases
- Apply or rejectSnapshot first. Reject leaves the skill untouched.
- Impact recordAccepted and rejected proposals, kept in full
The rules that keep it honest
- Patterns stay out of the wiki. The wiki holds evergreen lessons about your work, harvested from shipped output. Pattern notes describe how agents perform procedures. They live in their own learning area, and they are not memory either.
- Pattern notes cannot change behavior. Only an approved skill proposal can.
- The gate is you, plus evidence. A proposal is accepted only after your recorded approval and no regression on saved example cases. Deterministic checks gate. Rubric items are shown side by side for your judgment. A model judge, if used at all, is advisory only.
- Snapshot and revert. Proposals are data applied by a deterministic script, not free edits. The skill is snapshotted before any change, and a revert restores it. Git is optional.
- Executing sessions load skills, not the pattern notebook. The proposer reads pattern notes. The agent doing the work does not.
- Facts about you go to memory review. If a pattern is really a fact about the user, it becomes a memory proposal with an evidence label. Your explicit corrections outrank patterns.
- No autonomous overnight self-modification. The advanced edition may prepare notes and proposals on a schedule. Applying always requires the user.
Why keep the notebook away from the agent doing the work? The skill-learning paper this loop adapts (arXiv 2608.27454) reports an ablation: giving the proposer access to pattern notes raised its average from 45.3% to 63.7%, and also giving the executing agent access lowered it to 60.9%. That is the paper’s finding on its own benchmarks, not an IEVA result.
Saved example cases are made by you from a real session. Each holds a frozen, redacted copy of the notes involved, the task, and the checks. Replay runs in a temporary copy, never the live vault. Pattern notes are marked stale after a review date and duplicates are merged, but none is deleted without approval.
Security posture
Design principle
The harness is a governance aid, not a security boundary. Policy hooks and approval prompts do not guarantee isolation or prevent all damage. We say so here, and the product documentation will say the same.
- No telemetry
- Nothing is sent to Ækora. A test asserts that harness modules contain no network code. Adapters hand off to your agent, which talks to its provider under your account.
- No runtime dependencies
- Node built-ins only. No third-party packages at runtime means a small attack surface and no supply chain to watch.
- Secrets stay out
- The harness never reads, stores, or logs credentials. Agents use their own sign-in. API adapters, in the advanced edition, read keys from the environment or the OS keychain, never from the vault. Isolated agent configuration lives in OS temp and is deleted after the run.
- Restricted means unreadable
- Folders you mark restricted are unreadable in every preset. With no approved profile, only read-only and maintenance presets exist.
- Labelled enforcement
- Enforced, hook-mediated, or contract-only. Every run report states which applied.
- Step back
- “IEVA, step back” disables scheduled jobs and learning suggestions, and creates no inferred patterns. Headless jobs check the flag before they start.
For the principles that govern the whole product, see security and governance.
What we adopted, adapted, and skipped
The harness adapts ideas from published agent-harness and skill-learning research. We borrowed concepts, not code, and we left most of it out. The rule was one line: adopt whatever makes actions recorded, reviewable, and gated; skip whatever serves coding benchmarks, teams, marketplaces, or a second interface.
| Idea | Decision | IEVA form, or the reason |
|---|---|---|
| Adopt — the concept as-is, in our own implementation | ||
| Append-only session event log | adopt | The core of the harness. Anything that reaches a model request should be reconstructable from the log. |
| Versioned log format with migrations that preserve originals | adopt | A migration writes a new file beside the untouched original and records hashes of both. |
| Pre-execute, execute, post-execute tool pipeline | adopt | Classification, policy decision, execution, redaction, and logging happen in that order. |
| Approval kept separate from sandboxing | adopt | “Must the user confirm?” and “what can this action reach?” are different questions. Each preset answers both. |
| Headless one-shot runs | adopt | A job is a Markdown file. A headless run never blocks waiting for approval. |
| Per-turn token and cache statistics | adopt | Honest cost visibility, kept local, against a price table the user maintains. |
| A way to explain the final configuration | adopt | A policy-explain command prints the decision for a path or command and the Markdown line that produced it. |
| Plain statements about security limits | adopt | Enforcement levels are labelled in every run report. The harness is described as a governance aid, not a security boundary. |
| Adapt — the idea, reshaped to IEVA’s contracts | ||
| Everything-is-a-plugin architecture | adapt | The seams stay — adapters, policy, store, skills, surfaces — as plain modules. No plugin framework. |
| Model adapters | adapt | Agent command-line adapters first: they own the loop and the sign-in. Direct API adapters are an advanced-edition option. |
| Permission presets | adapt | Five IEVA presets mapped to action classes. No full-access preset. |
| Mid-session instruction updates that protect the cache | adapt | Context is assembled from stable to volatile, and mid-session changes are appended, never rewritten. With command-line adapters the agent owns caching; real control exists only in API adapters, and only where a provider documents it. |
| File preview and delivery | adapt | Provenance frontmatter, a delivery event, and a review queue. Obsidian already previews the file. |
| Steerable, stoppable subagents | adapt | Only from a written delegation contract, with a steering queue, a stop, and enforced budgets. Advanced edition. |
| Score-based acceptance of skill changes | adapt | The gate becomes user approval plus no regression on saved example cases. A model judge, if used at all, is advisory. |
| Scheduled overnight improvement runs | adapt | The advanced edition may prepare pattern notes and proposals on a schedule. Applying a change always needs the user. |
| Skip — out of scope, with a reason | ||
| Plugin frameworks, marketplaces, third-party plugin installs | skip | Third-party code execution and supply-chain risk contradict a local product with no remote runtime dependencies. |
| Modes where the model writes code that composes tools | skip | Arbitrary code over tools weakens per-call approval and logging. |
| Modes where the agent modifies its own harness | skip | IEVA changes its own behavior only through gated skill proposals. |
| Agent teams, rosters, mailboxes | skip | Clean handoffs over autonomous swarms. |
| A web interface in the local edition | skip | The Obsidian Control Deck plus a Markdown fallback is the interface. |
| Telemetry export | skip | No telemetry is a product promise. Nothing is sent to Ækora. |
| Hosted runtime, daemons, inbound webhooks, cloud sandboxes | skip | A local vault should have no inbound network surface. |
| General file uploads and an image-input pipeline | skip | The vault is already the file store, and image handling adds privacy surface. To be revisited with buyer evidence. |
| Developer SDKs and editor protocol profiles | skip | IEVA is not a developer platform. |
| Coding-benchmark tuning | skip | It serves coding benchmarks, not executive work. Model-specific workarounds stay out of canonical skills. |
Features by edition
The local edition keeps the harness simple and entirely manual: you start each run. The advanced edition adds scheduling, replay, supervised subagents, and direct API adapters. How the advanced edition is packaged is not decided, and no prices are published.
Product direction
| Capability | Local edition | Advanced edition |
|---|---|---|
| Session log, redaction, retention, migration | Yes, capture is opt-in | Yes, plus an export bundle |
| Agent adapters | Claude Code, Codex, manual import | Plus direct API adapters and more agents |
| Presets, policy compiler, policy explanation | Yes | Yes |
| Policy hook for interactive sessions | Claude Code; Codex if its hooks prove stable | Yes |
| Approvals as a Markdown queue | Yes | Plus approval delegation and expiry policies |
| Audit: snapshot diff after the fact | Yes | Yes |
| Headless jobs: briefing, triage proposal, weekly review draft | Yes, run manually | Plus a scheduler bridge and custom jobs |
| File delivery with provenance and a review queue | Yes | Yes |
| Usage rollups with your own price table | Yes | Plus per-job budgets and spend ceilings |
| Pattern notes and a learning-review skill | Yes, invoked by you | Plus scheduled preparation of patterns and proposals |
| Skill proposals: apply, reject, revert, impact record | Yes | Yes |
| Saved example cases | Save, and check by hand | Automated replay, repeated-run comparison |
| Steerable, stoppable subagents under a contract | No; the contract stays manual | Yes |
| Cache-aware, append-only instruction updates | Ordering only | Full, for API adapters |
| Local web view | No | Optional, this machine only |
| Connectors as governed tools | No | Connected edition |
Roadmap, honestly staged
This is a plan, not a progress report. No stage below is shipped, and no dates are promised. Each stage has an acceptance test, stated in advance, so “done” means something.
Spikes and decisions
Synthetic transcripts captured from each supported agent. Every adapter assumption confirmed or changed. Log schema frozen. Threat model written.
Done when every assumption about a third-party agent is marked confirmed or changed.
Raw layer
Session store, importers for both agents and manual import, redaction, the migration framework, run and usage commands.
Done when seeded secrets are fully redacted in the test corpus, migrations leave originals byte-identical, a malformed line never corrupts a log, and the no-network test passes.
Policy and approvals
Policy compiler, presets, policy explanation, the pre-tool hook, approval requests, audit with snapshot diff and revert, the wiki guard.
Done when red-team fixtures pass: a wiki write outside harvest is denied, network commands are asked or denied, an out-of-scope headless write is reverted, an unconfigured profile allows only read-only.
Headless jobs and delivery
The run command, three built-in jobs, isolated agent configuration, launch-failure detection, provenance frontmatter, Control Deck panels with a Markdown fallback.
Done when a job never writes outside its destination and an approval need ends the run as needs-approval with a request file.
Learning layer, manual
Pattern-note and proposal templates, the learning-review skill, propose, apply, reject and revert, snapshots, the impact record, saved cases with deterministic checks.
Done when applying requires a recorded approval, rejecting leaves the skill byte-identical, and rejected proposals appear in full in the impact record.
Local edition harness release
Documentation, changelog, third-party notices, clean-install and merge tests. Planned as a later release of the local edition; it does not hold up the first vault package.
Done when nothing changes for a user who never enables the harness.
Case replay runner
Sandbox fixture copies, replay, a current-versus-candidate report, optional repeated-run comparison.
Done when replay never touches the live vault.
Supervised subagents
The delegation-contract runtime: steering queue, stop, budgets, handoff validation.
Done when stop ends the whole process tree and audits, and a handoff never writes memory or wiki on its own.
API adapters and cache-aware assembly
Direct API adapters with a tool loop limited to IEVA tools, appended instruction events, keys from the environment or the OS keychain, a scheduler bridge.
Done when the same policy tests pass through the API loop and no key ever appears in the vault or a log.
Optional local web view
A read-only view of runs, approvals, and usage, bound to this machine, with no remote assets. Deferred until there is evidence of demand.
Built only if buyers without Obsidian need it.
Questions
Does the harness replace Claude Code or Codex?
No. It wraps them. Those agents already run a capable loop, and they keep their own sign-in. The harness adds the governance around the loop: what goes in, what is allowed, what is recorded, what is reviewed.
Is it a security boundary?
No, and we will not describe it as one. Policy hooks, allowlists, and snapshot-and-revert reduce risk and make behavior reviewable. They do not guarantee isolation or prevent all damage. Every run report states which enforcement level applied.
Does anything go to Ækora?
No. There is no telemetry and no export path. The design includes a test asserting that harness modules contain no network code. The agent you choose talks to its provider under your account, and the log records exactly which files were sent.
Where do logs live, and can I delete them?
In a runtime folder inside your vault that Obsidian does not index, excluded from Git by default. Setup warns about cloud-sync exposure. The proposed defaults are opt-in capture and 30-day retention, with a single command to prune.
Can IEVA rewrite its own skills?
Not on its own. A skill changes only through a proposal you approve, after the saved example cases show no regression. The skill is snapshotted first and can be reverted. There is no autonomous overnight self-modification in any edition.
What happens when an unattended run needs approval?
It does not wait and it does not proceed. The ask becomes a deny, the harness writes an approval request as a Markdown note, and the run ends marked needs-approval.
Which agents are supported?
The plan covers Claude Code and Codex, plus manual import of a transcript from anything else. Other agents run contract-only: your written rules, audited after the fact. This describes what the harness runs around. It is not a partnership or an endorsement.
Do I need Git?
No. Snapshots are plain file copies, so revert works without a repository. Git remains useful, and optional.
When can I get it, and what does it cost?
Neither is published. This page describes a plan. If the direction matters to how you work, say so in the access conversation — the launch cohort shapes what gets built first.
Private launch · Launching 2026
Tell us where governance breaks for you.
The IEVA Harness is product direction, not a shipped feature. If recorded, reviewable, gated agent work matters to how you operate, say so in the access conversation — it shapes what we build first.