alvis a27bae828a kb: batch from 2026-07-30 parallel run (#181 #183 #189 #192 #164 #128 #219)
Work produced by the /kb driver on 2026-07-30. Each change is recorded on its
Kanboard task; all remain Done-unverified or parked pending alvis's decisions.

#183 agap-mcp/src/gitea.js
  askpassScript() and giteaWikiWrite()'s wiki checkout both used
  /tmp/agap-mcp-wiki, so writing the askpass helper made the dir non-empty and
  git clone always failed. gitea_wiki_write had likely never succeeded in
  production. Askpass moved to its own dir.

#181 agap-mcp/src/server.js
  Initialise registeredToolCount at module load so /health reports the real
  count immediately instead of 0 until the first MCP request.

#189 kanboard/backup.sh, seafile/backup.sh, vaultwarden/backup.sh,
     users-backup.sh, openai/backup-{hindsight-adolf,llm-dbs}.sh
  Remove the dead *.ts Zabbix trapper pushes (never landed). users-backup.sh
  also pointed at localhost:81 instead of 192.168.1.4:81 and pushed a date
  string into a numeric item. Freshness monitoring now rides the .age items.

#192 RESTORE-RUNBOOK.md, {kanboard,seafile,vaultwarden}/restore.sh
  Restore path for the three services, verified in throwaway containers.
  Note: this work found Seafile backups have carried an empty ccnet_db.sql
  since 2026-07-07 -- filed as kb#222, not fixed here.

#164 openai/litellm-config.yaml
  Metered `judge` (anthropic/claude-haiku-4-5) entry removed per alvis's
  2026-07-30 decision. ANTHROPIC_API_KEY was never wired, so it could not spend.

#128 openai/agent_registry.py
  litellm_key_spec() now also grants the routing-mode aliases, gated by the
  same _reachable_tiers() check as raw grants, so a small-tier agent cannot
  acquire automatic routing that resolves to tier-large.

#219 openai/migrate-adolf-state.sh
  Migration script only; inert until run. Copies (never moves) the
  openai_adolf-state volume to /mnt/ssd/dbs/adolf, verifying a full sha256
  manifest before declaring success. Tested against a throwaway volume.

Deliberately NOT included, both awaiting alvis:
  agap-mcp/docker-compose.yml -- kb#174's contested BW_EMAIL revert (parked).
  openai/docker-compose.yml   -- kb#219's bind-mount switch; the target dirs
                                 under /mnt/ssd/dbs/adolf do not exist yet, so
                                 committing it would let a later `compose up`
                                 recreate Adolf against empty paths.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Y5QPagv4iun1ghpwM96Ff
2026-07-30 15:06:09 +00:00
2026-03-05 11:22:34 +00:00
2026-03-17 03:06:18 +00:00
2026-03-05 11:22:34 +00:00

agap_git — Agap Server Configuration

agap_git is the configuration repo for Agap, the self-hosted home server. It holds:

  • docker-compose files for services running on Agap
  • host-level config: Caddy (Caddyfile), backup/install scripts, .env files

Convention: a Dockerfile, application source, or anything you'd build: from an image belongs in the service's own Gitea repo — not here. agap_git keeps the compose file that runs the resulting image, plus whatever config the compose needs. Third-party services (pulling a public image) live here in full, since there's no source to split out.

Self-developed services

Services with source written in-house are meant to be dual: source lives in their own Gitea repo, and the compose that runs them is described here.

Service Own repo Compose in agap_git
matrixbot (Matrix bot, Adolf channel adapter) alvis/matrixbot not present — runs from ~/matrixbot/docker-compose.yml in its own repo
moodtracker alvis/moodtracker not present — runs from ~/moodtracker/docker-compose.yml
marketplace-mcp alvis/marketplace-mcp not present — runs from ~/marketplace-mcp/docker-compose.yml
oO alvis/oO not present — runs from oO/infra/docker/docker-compose.yml; oO was already a fully separate project before this convention existed
mood (mood-archive) none yet fully vendored here (mood/, source + compose) — Kanboard #209 will extract it to its own repo

Known gap: the convention calls for compose to be described in agap_git and source to live in its own repo. For matrixbot / moodtracker / marketplace-mcp / oO, extraction (kb#78) moved the compose file along with the source into each new repo, so agap_git currently has zero footprint for these four — no compose, no config. Not fixed in this doc-only pass; flagged for a follow-up decision: either copy each compose back into agap_git, or formally amend the convention to let self-developed services keep compose in their own repo.

Third-party services (compose lives here in full)

Directory Service Port
immich-app/ Immich — photo management 2283
gitea/ Gitea — git hosting + Postgres 3000, 222
openai/ Adolf (OpenClaw gateway) + LiteLLM + Hindsight + Qdrant + Langfuse + Whisper/TTS stack see openai/docker-compose.yml (adolf-llm on 8010)
adolf/ Adolf config only (openclaw.json, design docs) — the adolf compose service lives in openai/docker-compose.yml; the OpenClaw fork source is a separate tree at ~/adolf
vaultwarden/ Password manager 8041
kanboard/ Kanban board, task orchestration for the claude bot 4800
seafile/ File sync, OnlyOffice, WebDAV (multiple compose files) 8078 (server), 8077 (Caddy)
matrix/ Synapse homeserver + coturn + LiveKit (not the matrixbot bot — see above)
overleaf/ LaTeX editor (ShareLaTeX/Overleaf CE)
linkwarden/ Bookmark manager 3012
vikunja/ Task manager 3457
radicale/ CalDAV/CardDAV server 5232
ntfy/ Push notifications 8840
syncthing/ File sync 8384
qbittorrent/ Torrent client 8085
searxng/ Metasearch engine 11437
ollama/ Local LLM runtime 11436
openwebui/ AI chat UI 3125
anki/ Anki sync server 8180
family/ MediaWiki (family wiki) 8099
freshrss/ RSS reader 8091
iperf3/ Network throughput testing 8095
otter/ OtterWiki 8083
agap-mcp/ MCP tool server for Claude (Node/Express) — vendored source, no separate repo 3100
personal-sensing/ SQLite store + schema for HA/Health Connect data (no compose; library used by an ETL, see kb#207)

Removed / moved out

  • windows/ — removed (kb#82): no VM, no container, dead config.
  • zabbix/, haos/ — moved to alvis/lizacer (kb#81). Zabbix runs on the lizacer server (192.168.1.4:81), not Agap.

Top-level files

  • Caddyfile — reverse proxy / TLS routing for all services
  • nvidia-docker-install.sh, install-cuda.sh — GPU host setup
  • users-backup.sh — host user backup

Quick Start

Each service is standalone; from its directory:

docker compose up -d
docker compose restart
docker compose logs -f
docker compose pull

The root docker-compose.yml is an alias that includes immich-app/docker-compose.yml.

Storage

  • /mnt/media/upload — Immich originals
  • /mnt/ssd1/media/ — Immich thumbnails, encoded video, Postgres
  • /mnt/misc/gitea — Gitea repositories and data

GPU Support

For GPU acceleration (Ollama/Open WebUI, Immich ML):

  1. sudo ./nvidia-docker-install.sh — Docker + NVIDIA Container Toolkit
  2. ./install-cuda.sh — CUDA toolkit

Documentation

See CLAUDE.md for developer instructions, credentials handling, and Gitea/Zabbix/Home Assistant API integration details.

See the Gitea wiki for infrastructure documentation (storage, network, per-service setup).

Description
No description provided
Readme 8.1 MiB
Languages
JavaScript 49%
Python 39.8%
Shell 6.9%
Dockerfile 1.8%
HTML 1.5%
Other 1%