From f6193f6953c1834b727b5539ffad8c8d5e5405fc Mon Sep 17 00:00:00 2001 From: Nima Hakimi <74723240+nimkimi@users.noreply.github.com> Date: Wed, 19 Aug 2026 06:46:02 +0000 Subject: [PATCH 1/4] feat: unlisted talk deck at /harness Self-contained HTML deck (public/harness.html) served via a rewrite in next.config.js. Intentionally not linked from any nav. --- next.config.js | 7 + public/harness.html | 818 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 825 insertions(+) create mode 100644 public/harness.html diff --git a/next.config.js b/next.config.js index 568fd04..91c48b8 100644 --- a/next.config.js +++ b/next.config.js @@ -15,6 +15,13 @@ const nextConfig = { }, ]; }, + async rewrites() { + return [ + // Unlisted talk deck (aug 2026): served from public/harness.html. + // Intentionally not linked from any nav. + { source: '/harness', destination: '/harness.html' }, + ]; + }, }; module.exports = nextConfig; diff --git a/public/harness.html b/public/harness.html new file mode 100644 index 0000000..70e38a3 --- /dev/null +++ b/public/harness.html @@ -0,0 +1,818 @@ + + + + + +Agent = modell + harness + + + +
+
+ + +
+
agent = modell + harness
+
«Agent = Model + Harness» — LangChain
+ +
+ + +
+

Samme modell. Helt forskjellig resultat.

+
+
+ mandag + Kjørte testene med feil kommando, la koden i feil mappe, fant opp et mønster vi sluttet med i fjor +
+
+ tirsdag + Kjørte riktig testkommando, la filen i riktig mappe, stoppet før force push +
+
+
Samme modell.
+ +
+ + +
+

Harness: alt som ikke er modellen

+
+
+
harness = system prompt + tools + context + regler + feedback loops
+
    +
  • Copilot CLI er en harness: agent loop, tools, filsystem
  • +
  • Men: den er generisk. Den kjenner ikke repoet deres.
  • +
+
+
+ harness + tools + context + regler + feedback +
modell
+
+
+ +
+ + +
+

Tre nivåer

+
+
+
NIVÅ 0
+

Out of the box

+

Der vi står allerede

+
+
+
NIVÅ 1
+

Prose

+

Du forteller agenten ting: instructions, skills

+
+
+
NIVÅ 2
+

Programmatisk

+

Du garanterer ting: hooks

+
+
+
Prose er forslag. Kode er garantier.
+ +
+ + +
+
+
Nivå 1 · Prose
+

AGENTS.md: alltid i kontekst

+
+
+
AGENTS.md
+
## Kommandoer +- Test: pnpm test (én fil: pnpm test -- path) +- Lint: pnpm lint --fix +- Typecheck: pnpm typecheck # før du sier deg ferdig + +## Struktur +- apps/web Next.js-frontend +- packages/ui Delte komponenter, aldri uten review +- infra/ Terraform. Ikke rør uoppfordret.
## Konvensjoner +- Ingen default-eksporter +- Feil: Result-typen i core/result.ts, ikke throw +- Nye endepunkter trenger test i samme PR + +## Ikke gjør +- Ikke commit til main +- Ikke oppgrader avhengigheter som sidefeature
+
+

Leses automatisk hver session, fra git root og cwd · path-spesifikke regler: .github/instructions/*.instructions.md med applyTo-glob · leser også CLAUDE.md

+
+ +
+ + +
+
+
Nivå 1 · Prose
+

Skills: kunnskap on demand

+
+
+
.github/skills/deploy/SKILL.md
+
---
+name: deploy
+description: Slik deployer vi. Bruk ved
+  release, rollback eller feilsøk av pipeline.
+---
+
+
    +
  • Instructions er alltid med → tar plass i context. Skills lastes når de er relevante.
  • +
  • Agenten ser bare navn + description, henter resten ved behov
  • +
  • Interop: leser også .claude/skills/
  • +
  • Samme gate: custom agents (.agent.md, subagent med eget context window og begrensede tools)
  • +
+
+ +
+ + +
+
+
Nivå 2 · Programmatisk
+

Hvorfor hooks, og ikke bare prose?

+
+
+

«Ikke push til main» i markdown er et ønske, ikke en regel.

+
1

Prose drukner: jo lengre session, jo dårligere etterlevelse

+
2

Prose koster context. Hooks koster null: de kjører utenfor modellen, hver gang

+
3

Guardrails må være garantier

+

Forbehold: krasjer hooken → kallet blokkeres (fail-closed). Timer den ut → slipper gjennom. Sett timeout, hold den rask.

+

Prose er kultur, hooks er lovverk.

+
+ prompt→ + preToolUse
allow/deny/ask
→ + tool call→ + postToolUse→ + resultat→ + svar +
+
+
+
events · v1.0.80
+
sessionStart
+
sessionEnd
+
userPromptSubmitted
+
userPromptTransformed
+
postResult
+
preToolUse
+
postToolUse
+
postToolUseFailure
+
preMcpToolCall
+
errorOccurred
+
agentStop
+
subagentStop
+
subagentStart
+
preCompact
+
permissionRequest
+
+
+ +
+ + +
+
+
Nivå 2 · Programmatisk
+

Hooks i praksis (testet på versjonen vi kjører)

+
+
+
~/.copilot/hooks/guard.json
+
{
+  "version": 1,
+  "hooks": {
+    "preToolUse": [
+      { "hooks": [ {
+        "type": "command",
+        "command": "bash ~/.copilot/hooks/guard.sh",
+        "timeoutSec": 5
+      } ] }
+    ]
+  }
+}
+
+
+
guard.sh
+
#!/bin/bash
+IN=$(cat)
+if echo "$IN" | grep -q 'rm -rf'; then
+  echo '{"permissionDecision":"deny",
+    "permissionDecisionReason":
+      "rm -rf er ikke lov her."}'
+fi
+exit 0
+
+
+
Denied by preToolUse hook: rm -rf er ikke lov her.
+
+
+

Typisk bruk

+

Guardrails med deny (rm -rf, git push --force, prod-credentials) · formatter/tester etter edit · context inn ved sessionStart

+
+
+

Sikkerhet

+

Repo-hooks kjører først når mappa er trusted · enterprise-policyer i policy.d kan ikke skrus av · disableAllHooks finnes

+
+
+

debug: /env viser lastede hooks · stdout → ~/.copilot/logs/ · lastes ved session-start · Windows: egne bash- og powershell-nøkler

+ +
+ + +
+
+
Nivå 2 · Programmatisk
+

Fra min egen verktøykasse

+
+
+
+
tiering-guard.sh
+

Denier subagent-kall uten eksplisitt modellvalg. Deny-meldingen inneholder regelen → agenten leser den, retter seg og prøver igjen.

+
+
+
context-budget-advisor.sh
+

Leser context-forbruket ved hver stopp, ber agenten runde av eller ta handoff ved 50 % og 75 % av vinduet.

+
+

Gjenbruk i Copilot:

+
"command": "bash ~/.claude/hooks/tiering-guard.sh"
+

Scriptet er det samme; feltnavnene inn/ut må matche verktøyet.

+
+
+
+
tiering-guard.sh · utdragClaude Code-format
+
deny() {
+  jq -n --arg r "$1" '{hookSpecificOutput:
+    {hookEventName:"PreToolUse",
+     permissionDecision:"deny",
+     permissionDecisionReason:$r}}'
+  exit 0
+}
+model=$(printf '%s' "$input" | jq -r '.tool_input.model // empty')
+[ -n "$model" ] && exit 0
+deny "no explicit model on this dispatch -- tier it and re-issue"
+
+
+
+ +
+ + +
+
+

Gi agenten sensorer

+
+
+ guides→ + agent loop + ←sensors +
+
+
+

Guides styrer førnivå 1

+

Instructions, skills: øker kvaliteten på første forsøk

+
+
+

Sensors fanger opp etternivå 2

+

Tester, lint, typecheck via hooks: agenten retter seg selv

+
+
+
Dårlig output er ofte en manglende sensor.
+
+ +
+ + +
+

Oppsummert

+
+ AGENTS.md + .github/skills/ + .github/agents/ + .github/hooks/ +
+

Versjonert, PR-bart, delt: én person bygger, alle får nytte.

+

Åpen standard, aug 2026: Agent Plugins 1.0 · AWS · Anysphere · Microsoft · OpenAI · Vercel

+
agent = modell + harness
+
Spørsmål?
+ +
+ +
+
+ +
+
+
+ + + + From 0c4a37f52554dbcb6676ca19b5688d6cdff95c2e Mon Sep 17 00:00:00 2001 From: Nima <74723240+nimkimi@users.noreply.github.com> Date: Wed, 19 Aug 2026 09:01:54 +0200 Subject: [PATCH 2/4] fix: noindex the unlisted talk deck The deck is deliberately unlinked, but robots.txt allows / and nothing stopped a crawler that found the URL from indexing it. A meta robots tag enforces the intent at the page; adding /harness to robots.txt would do the opposite and advertise it. --- public/harness.html | 1 + 1 file changed, 1 insertion(+) diff --git a/public/harness.html b/public/harness.html index 70e38a3..64dc1cf 100644 --- a/public/harness.html +++ b/public/harness.html @@ -3,6 +3,7 @@ + Agent = modell + harness