Skip to main content
The persona is agent/prompts/instructions.md, a plain Markdown file with one placeholder. Editing it is the whole process. There is no restart and no rebuild.
That is the whole file as shipped.

The placeholder

{agent_name} is replaced with the value of AGENT_NAME. Substitution is str.replace, not str.format, so a prompt containing a JSON example or any other brace is safe. It is the only placeholder. Everything else in the file is literal text sent to the model.

Why there is no restart

LiveKit runs entrypoint() per job. Assistant.__init__ calls load_instructions(), and that reads the file every time. So a save lands on the next call. A call already in progress keeps the prompt it started with.

Two ways to edit it

Same file, either way.
Open agent/prompts/instructions.md and save. Compose mounts the directory into both containers, so there is nothing to rebuild.

What the console write needs

  • CONSOLE_WRITES_ENABLED=true. Compose sets it. It defaults to false in code.
  • The backend’s read-write mount of ./agent/prompts. Compose sets that too. The agent’s mount of the same directory is :ro, because one writer is the reason a save can be atomic.
Without the mount the editor still loads and every save answers 409 naming the path.
Do not edit agent/src/prompts/instructions.py. That holds the packaged fallback used when the file is missing, so a fresh clone still talks. When the file is absent the console shows an empty editor and says the worker is running that fallback.