iObj
Personlig JSON-objekt / "hukommelsesbank" service. Gemmer og gør søgbare små strukturerede memory-objekter — git-commit-noter, AI-recap, mødereferater, 1:1-noter, standups m.m. — på tværs af maskiner, uden at kræve en databaseserver.
Hvorfor
I dag ligger denne slags data spredt i flade filer (~/.githistory,
~/.claude_recap.md, ~/copilot-sessions/*/sessions), lokalt på én maskine og
uden fælles skema eller søgning. iObj samler det i én lille service, der kan
tilgås fra enhver maskine.
Bemærk: Denne version af iObj er selve servicen. Integration af
git-today / resume_copilot / recap-flowet til at skrive ind i iObj er en
separat, senere opgave.
Datamodel
Hvert objekt har:
id— uuidtype—git_commit|session_log|recap|meeting_note|oneonone|standup|customcreated_at— hvornår objektet blev gemtobject_date— datoen objektet handler om (bruges til sharding + datofiltrering)project— valgfrit projektnavntags— liste af fritekst-tagstitle/body— kort titel + fritekst/markdown-indholdpayload— vilkårligt ekstra JSON (fx{"sha": "...", "participants": [...]})source_machine/source_tool— hvor og hvorfra objektet blev skrevet
Data gemmes i TinyDB, ét JSON-fil-shard pr. måned (data/2026-07.json) —
ingen database-server at drifte, og filstørrelser holdes nede over tid.
Kør lokalt
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt -r requirements-dev.txt
IOBJ_DATA_DIR=./data IOBJ_API_TOKEN=dev-token \
uvicorn iobj.app:app --reload --port 8000
Kør tests:
pytest -q
API
Alle /objects* endpoints kræver Authorization: Bearer <IOBJ_API_TOKEN>
(auth er slået fra hvis IOBJ_API_TOKEN ikke er sat — kun til lokal dev).
| Metode | Path | Beskrivelse |
|---|---|---|
| GET | /health |
Liveness check |
| POST | /objects |
Opret objekt |
| GET | /objects |
Søg (query params: type, project, tag, date_from, date_to, q, limit, offset) |
| GET | /objects/date/{date} |
Alle objekter for én dato |
| GET | /objects/{id} |
Hent ét objekt |
| PATCH | /objects/{id} |
Opdater (delvist) |
| DELETE | /objects/{id} |
Slet |
Eksempler
TOKEN=dev-token
BASE=http://localhost:8000
# Opret en recap
curl -s -X POST "$BASE/objects" -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "recap",
"object_date": "2026-07-13",
"project": "NordBytes",
"tags": ["backend"],
"title": "BDD test patterns",
"body": "Implementerede Behave step definitions for invoice-flowet.",
"source_tool": "manual"
}'
# Opret en git-commit-note
curl -s -X POST "$BASE/objects" -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "git_commit",
"object_date": "2026-07-13",
"project": "DevOpsMCP",
"title": "Fix Redis TTL bug",
"payload": {"sha": "abc123", "author": "Henrik Jess Nielsen"}
}'
# Søg alt for NordBytes i juli, der nævner "BDD"
curl -s "$BASE/objects?project=NordBytes&date_from=2026-07-01&date_to=2026-07-31&q=BDD" \
-H "Authorization: Bearer $TOKEN"
# Alt for én bestemt dag (afløser for git-today's dags-visning)
curl -s "$BASE/objects/date/2026-07-13" -H "Authorization: Bearer $TOKEN"
Deploy
Dockerfile— python:3.11-slim, ikke-root bruger, health check på/healthiobj.nomad— Nomad job (samme mønster somdevops-mcp.nomad), deployes påautobox.i80.dk, exposed via Traefik somhttps://iobj.i80.dk- Data persisteres via Nomad host-volume
iobj-data→/app/data IOBJ_API_TOKENsættes via Consul KV (iobj/api/token), samme mønster som DevOpsMCP's secrets-templates
docker build -t registry.i80.dk/gitea/iobj:<tag> .
docker push registry.i80.dk/gitea/iobj:<tag>
nomad job run -var="image_tag=<tag>" iobj.nomad
curl -sf https://iobj.i80.dk/health
Miljøvariabler
| Variabel | Default | Beskrivelse |
|---|---|---|
IOBJ_DATA_DIR |
data |
Sti til mappen med TinyDB-shards |
IOBJ_API_TOKEN |
(unset) | Bearer-token for alle /objects* kald. Auth deaktiveret hvis unset — sæt altid i netværksdeploy |
IOBJ_LOG_LEVEL |
INFO |
Log-niveau |
PORT |
8000 |
Lytteport (styres af Nomad i produktion) |