4.4 KiB
MAIN OBJECTIVE: Create SESSION.md in your project directory according to the folliwing template. Do NOT modify this source file.
SESSION.md — Persistent AI Session Memory
This is the template and guide for SESSION.md files used across projects in this homelab.
What SESSION.md is for
SESSION.md is a persistent memory file — it accumulates decisions, discoveries, and context across AI coding sessions so the assistant doesn't start cold each time.
It is not a chat transcript.
It is not static documentation of how something works.
It is a living record of why things are the way they are, plus a map to the right context files.
Where to put it
| Scope | Location | Purpose |
|---|---|---|
| Global homelab | /root/bin/SESSION.md ← this file |
Cross-project memory, patterns, major decisions |
| Per-project | <project-dir>/SESSION.md |
Project-specific session memory |
Each project SESSION.md should link back here and to any relevant context files.
How to populate it
Copy the section structure below into your project's SESSION.md and fill it in.
Mandatory sections
Context pointers — every SESSION.md must list the files the AI should load to understand the project:
## Context Files
- `/root/bin/core_homelab.md` — cluster topology, SSH aliases
- `/root/bin/services_directory.md` — active service IPs and domains
- `/root/bin/SESSION.md` — global session memory (this file's parent)
- `./CONTEXT.md` — project-specific infrastructure and config
- `./README.md` — project overview
Project summary — one paragraph. What is this project? What problem does it solve?
Gitea repo — link to the Gitea remote (if version-controlled):
## Gitea
- Repo: https://git.sethpc.xyz/Seth/<repo-name>
- Remote: `https://Seth:<token>@git.sethpc.xyz/Seth/<repo-name>.git`
- API key: see `/root/bin/GITEA_API.md` (same key for all repos)
Session notes — the meat of the file. Append here each session.
Session notes format
Group entries by topic, not by date. Update the relevant section rather than appending raw timestamped blocks. Example:
## Session Notes
### Infrastructure decisions
- Chose LXC over Docker-in-LXC because the service doesn't need container isolation
- Enabled nesting=1 on CT 644 to allow Docker inside
### Bug fixes & discoveries
- Service wasn't starting: mc1 had autoStart=false in MCSManager config
(fixed: set eventTask.autoStart=true in InstanceConfig/<id>.json)
- tail -F (capital F) is correct — waits for file to appear, handles log rotation
### Open threads
- [ ] Add Redis backend for session persistence (currently SQLite only)
- [ ] Web dashboard for recent AI god interactions
How to keep it current
Run /update-context in OpenCode at the end of any session. The command will:
- Scan the conversation for decisions, fixes, and discoveries not yet recorded
- Append them to
SESSION.md(both this file and the project-level one if applicable) - Commit and push to Gitea
Command defined at: ~/.config/opencode/commands/update-context.md
Mandatory per-reply discipline:
- Update
SESSION.mdimmediately when a durable fact, decision, or fix is discovered. - Before every final reply, run a memory check and append any missing durable notes.
- End every reply with one line:
Session memory: updatedorSession memory: no new durable facts.
Global session notes
Patterns established across all projects
- Gitea backup convention: commit every meaningful change immediately; push on the same command. No squashing, no batching unrelated changes.
- Session file naming:
SESSION.md(notCONVERSATION.md, notCONTEXT.md).CONTEXT.md= static infra facts.SESSION.md= accumulated AI memory. - Context file loading: Always include
core_homelab.mdandservices_directory.mdin project instructions. Specific project context goes inCONTEXT.md. - autoStart for MCSManager instances: Must be set in
InstanceConfig/<id>.json(eventTask.autoStart: true), not just in the panel UI, to survive daemon restarts.
Infrastructure discoveries
mc-godmode.serviceon CT 644: already enabled and usingtail -Fcorrectly. The MC server itself hadautoStart: false— that was the real issue.- Gitea runs on port 443 via Caddy at
git.sethpc.xyz(CT 146, node-173). Direct access to192.168.0.125:80does not work from CT 629 — always use the domain.