feat: load operator instructions from agents/*.md into the reply prompt
Some checks failed
Release / semantic-release (push) Successful in 30s
Release / build-windows (push) Has been cancelled
Release / build-macos (arm64, macos-latest) (push) Has been cancelled
Release / build-macos (x64, macos-15-intel) (push) Has been cancelled
Release / build-linux (push) Has been cancelled
Release / release-main (push) Has been cancelled
Release / release-develop (push) Has been cancelled
tests / Unit tests (Linux, Python 3.11) (push) Has been cancelled

Drop Markdown files into an agents/ folder and their contents are appended to
the main reply LLM's system prompt, so an operator can extend the assistant's
rules/tone without code changes. Files are concatenated in filename order
(use 00-, 10- prefixes to control ordering) and re-read once per turn, so edits
apply on the next reply with no rebuild/restart. Fail-open: a missing, empty,
or unreadable folder yields no instructions and never breaks a reply.

- load_agent_instructions() in system_prompt.py (AGENTS_DIR env, default
  /app/agents); reads *.md only, skips blanks, ignores non-dir paths
- engine.py appends it alongside the existing settings-UI llm_instructions,
  under the same "Additional instructions from the operator:" framing
- docker-compose.yml bind-mounts ./agents:/app/agents:ro and sets AGENTS_DIR
- agents/example.md.sample starter template (.sample is not loaded)
- tests cover ordering, md-only filtering, blank-skip, env/arg resolution,
  and fail-open paths
- README, .env.example, docs/llm_contexts.md updated

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
javis-bot
2026-06-23 00:57:54 +09:00
parent 677bfcd2a9
commit 2f000ac6c8
8 changed files with 156 additions and 1 deletions

15
agents/example.md.sample Normal file
View File

@@ -0,0 +1,15 @@
# Operator instruction file (example)
#
# HOW TO USE: copy or rename this file to anything ending in `.md`
# (e.g. `rules.md`). Every `*.md` in this folder is appended to the assistant's
# main reply system prompt, in filename order — use number prefixes like
# `00-tone.md`, `10-rules.md` to control ordering. Edits take effect on the
# NEXT reply; no rebuild or restart is needed (the folder is read per turn).
#
# Files ending in `.sample` (like this one) are ignored, so this template never
# affects replies until you rename it to `*.md`.
#
# Everything below a heading is treated as plain instruction text for the LLM.
Always keep replies under two sentences.
When the user asks about deployment, mention the relevant docker compose command.