Docs menu

Operations

The commands on this page run from your project folder. Every docker compose command takes -f deploy/docker-compose.yml.

Applying changes

After you change config/config.yaml, .env, package.json, or anything in src/, rebuild and restart:

docker compose -f deploy/docker-compose.yml up -d --build

Changes to files in docs/ are picked up at the next sync.

Upgrades

The engine is the @ithousecall/chat npm package. Your config, docs, and code stay as they are.

npm install @ithousecall/chat@latest
docker compose -f deploy/docker-compose.yml up -d --build

Commit package.json and package-lock.json; the Docker build installs from the lockfile.

Read the release notes for new or changed config keys. An invalid config stops startup with the path of the bad key, so problems show up right away in the logs.

Data volume

Everything @housecall stores lives in the data Docker volume, mounted at /app/data. When you run npm start or npm run console, it uses the data/ folder in your project instead.

To run the console against the data volume, stop the service first:

docker compose -f deploy/docker-compose.yml stop
docker compose -f deploy/docker-compose.yml run --rm housecall node --no-warnings=ExperimentalWarning src/main.ts --console
FileContents
session.sqliteConversations, thread mappings, approvals, and the images shown to the model.
docs.sqliteThe search index and per-source sync status.
housecall.lockThe instance lock.

docs.sqlite can be rebuilt from your sources: stop @housecall, delete it, and start again.

docker compose -f deploy/docker-compose.yml stop
docker compose -f deploy/docker-compose.yml run --rm housecall rm /app/data/docs.sqlite
docker compose -f deploy/docker-compose.yml start

Don’t delete session.sqlite unless you want to drop every conversation and pending approval.

Single instance

@housecall holds an exclusive lock on housecall.lock while it runs. A second @housecall on the same data, in the same container or another, refuses to start under the header @housecall cannot start: with another @housecall is already using /app/data/, the absolute path of the data folder. The lock is released when the process exits, however it exits. Stop the service before using docker compose run on the same volume.

Don’t scale the service to more than one replica.

Restarts

Compose runs the service with restart: unless-stopped. If @housecall hits a fatal error it exits with status 1 and Compose starts it again. Answers and approvals that were in progress resume from the data volume. Messages sent while it was stopped are not answered.

docker compose -f deploy/docker-compose.yml logs -f
docker compose -f deploy/docker-compose.yml restart

Logs

LineMeaning
[housecall] up: slack, teamsConnected to these platforms.
[docs] <source>: N indexed, N removed, N failedA source finished syncing.
[docs] removed N documents of sources no longer configuredA source was removed from the config, and its documents were deleted.
[turn] unanswered <reason> <detail>The model could not answer. The person sees Sorry, I could not answer that (<reason>).
[approvals] <id> <user>: <text>A click on an approval card that did not count, and the reply it got.
[attachments] <platform> <file>: <error>An image could not be downloaded. The model is told it could not see it.
[attachments] <platform> <file>: ... answered with a web page, not the fileThe platform sent a web page instead of the image, such as Slack without files:read.
[attachments] <platform> <file>: WxH is over 25000000 pixelsAn image was over 25 megapixels and was skipped.
[attachments] <platform> <file>: not a PNG, JPEG, GIF or WebP imageAn image in another format was skipped.
[attachments] <platform> <file>: could not be decodedAn image file was damaged and was skipped.
[mcp] <server>: skipping tool ...An MCP tool name collided with another tool.

Backups

Your project folder is in git, except .env and secrets/. Back those up with the data volume: stop @housecall, copy the volume out of the container, and archive it.

docker compose -f deploy/docker-compose.yml stop
docker compose -f deploy/docker-compose.yml cp housecall:/app/data ./housecall-data
tar czf housecall-backup.tgz housecall-data .env secrets
docker compose -f deploy/docker-compose.yml start

Leave out secrets if you have no service account key.