hackviz — utviklermanual
Koble agentene dere «gjeter» til storskjermen: hver agent blir en pixel-figur i kontoret, med status, aktivitetstekst og kodefeed i sanntid. Det eneste agenten gjør er å sende noen HTTP-kall mens den jobber.
Base-URL: https://innohack26.iktorkide.no
1. Få team-nøkkelen
Alle skrive-kall krever headeren X-Api-Key med teamets nøkkel. Du får
nøkkelen av Arild (én per team: Audi, DigDir, PreTest). Nøkkelen skal aldri sjekkes
inn i kode eller deles offentlig. Lese-sidene (denne manualen, visningen og
/apidoc) er åpne.
2. Send din første status
Med curl:
curl -X POST https://innohack26.iktorkide.no/api/v1/status \
-H "X-Api-Key: $HACKVIZ_KEY" \
-H "Content-Type: application/json" \
-d '{"agent_id":"team1-backend","agent_name":"Bygge-Bjarne","status":"coding","detail":"Skriver ingest-endepunktet"}'
Eller med Python (httpx):
import os, httpx
BASE = "https://innohack26.iktorkide.no"
httpx.post(
f"{BASE}/api/v1/status",
headers={"X-Api-Key": os.environ["HACKVIZ_KEY"]},
json={
"agent_id": "team1-backend",
"agent_name": "Bygge-Bjarne",
"status": "coding",
"detail": "Skriver ingest-endepunktet",
},
timeout=10,
)
Bruk samme agent_id over tid, da blir det samme figur på skjermen.
Svaret er 202 med normalisert status.
3. Statusvokabular
Gyldige status-verdier (ukjent verdi faller trygt tilbake til
idle med originalen i detail):
planningcodingbuildingreadingsearchingtestingdebuggingreviewingtalkingwaiting_agentwaiting_humandeployingcommittingcelebratingblockedidle
Statusen styrer både animasjonen og hvor i kontoret figuren går (bås, bibliotek, fellesareal, …). Ikonene over hodene er forklart i legenden nederst på visningen.
4. Livssyklus
POST /api/v1/lifecycle styrer inn- og utgang. agent_joined
spawner figuren i døra; agent_finished går rolig ut døra;
agent_terminated og agent_crashed hopper ut nærmeste vindu.
Agenter som ikke får oppdatering på 10 minutter går automatisk ut døra.
curl -X POST https://innohack26.iktorkide.no/api/v1/lifecycle \
-H "X-Api-Key: $HACKVIZ_KEY" -H "Content-Type: application/json" \
-d '{"agent_id":"team1-backend","agent_name":"Bygge-Bjarne","event":"agent_joined"}'
5. Fase
POST /api/v1/phase setter den overordnede fasen for hele teamet (vises i
banneret øverst). progress er valgfri, 0.0–1.0.
curl -X POST https://innohack26.iktorkide.no/api/v1/phase \
-H "X-Api-Key: $HACKVIZ_KEY" -H "Content-Type: application/json" \
-d '{"phase":"Fase 2: Bygger API","description":"Ingest tar form","progress":0.4}'
6. Felter og grenser
detail: kort tekst (maks 200 tegn) som vises i aktivitetsfeeden. Secret-scrubbet.code_snippet: valgfritt kodeutdrag (maks 2000 tegn) til kodefeeden. Secret-scrubbet.timestamp: valgfri ISO 8601-tid; utelates den, brukes serverens nåtid.- Rate limit per nøkkel; ved
429kommer enRetry-After-header. Vent og prøv igjen.
7. Koble agenten din
Generisk: én liten funksjon
Kall denne fra hvor som helst i agent-løkka di, uansett rammeverk:
import os, httpx
BASE = os.environ.get("HACKVIZ_BASE", "http://localhost:8000")
KEY = os.environ["HACKVIZ_KEY"]
AGENT_ID, AGENT_NAME = "team1-backend", "Bygge-Bjarne"
def post_status(status, detail=None, code=None):
payload = {"agent_id": AGENT_ID, "agent_name": AGENT_NAME, "status": status}
if detail:
payload["detail"] = detail
if code:
payload["code_snippet"] = code
try:
httpx.post(f"{BASE}/api/v1/status",
headers={"X-Api-Key": KEY}, json=payload, timeout=5)
except Exception:
pass # visualiseringen skal aldri stoppe arbeidet ditt
post_status("planning", "Leser kravene")
# ... senere ...
post_status("coding", "Implementerer auth", code="def login(): ...")
Claude Code: en hook
La Claude Code rapportere automatisk. Legg et lite skript som POSTer status, og kall
det fra en hook i .claude/settings.json. Eksempel som melder «koder» etter
hvert verktøykall og «venter på menneske» når økten stopper:
// .claude/settings.json
{
"hooks": {
"PostToolUse": [
{ "hooks": [ { "type": "command", "command": "python .claude/hackviz_hook.py coding" } ] }
],
"Stop": [
{ "hooks": [ { "type": "command", "command": "python .claude/hackviz_hook.py waiting_human" } ] }
]
}
}
# .claude/hackviz_hook.py
import os, sys, httpx
httpx.post(
f"{os.environ['HACKVIZ_BASE']}/api/v1/status",
headers={"X-Api-Key": os.environ["HACKVIZ_KEY"]},
json={"agent_id": "team1-claude", "agent_name": "Kode-Kari", "status": sys.argv[1]},
timeout=5,
)
Sett HACKVIZ_BASE og HACKVIZ_KEY i miljøet før du starter Claude Code.
Codex / annen CLI
Har agenten ingen hooks, pakk den inn i et skript som sender status før og etter
kjøring, eller la agenten selv kalle post_status-funksjonen over som et verktøy:
#!/usr/bin/env bash
set -e
post() { curl -s -X POST "$HACKVIZ_BASE/api/v1/status" \
-H "X-Api-Key: $HACKVIZ_KEY" -H "Content-Type: application/json" \
-d "{\"agent_id\":\"team1-codex\",\"agent_name\":\"Data-Didrik\",\"status\":\"$1\",\"detail\":\"$2\"}" >/dev/null || true; }
post building "Starter Codex-kjøring"
codex exec "$@"
post committing "Codex ferdig"
Full API-referanse
Presis maskinlesbar spesifikasjon ligger på /apidoc (ReDoc) og som rå OpenAPI på /openapi.json — fint å gi til en agent som skal forstå mulighetene selv.