FAQ
**Q: Startup says no configuration at ...: run \openheron init` to create one** The config root is empty. Run openheron init` in the project root.
Q: config: load <path>: agents/main.md does not exist or could not be parsed
One of two things: the config root points at the wrong place (fix it with
--config-dir or $OPENHERON_CONFIG_DIR), or the frontmatter of agents/main.md has
a wrong key.
Q: I changed agents/main.md and nothing happened?
agents/ is hot-reloaded, so it should have taken effect. If it did not, look for the
reload error in the startup log. server/ and skills/ are not hot-reloaded and
need a restart.
Q: The model does not think — reasoning: high seems to do nothing?
Most likely the model profile does not declare the high tier. A tier missing from
the table is silently ignored. Add it under models[].reasoning in
llm/<vendor>.yaml.
Q: kb_search finds nothing, or finds the wrong things?
Run openheron kb status first: lexical-only retrieval means there are no vectors
and the hybrid score is not in effect. Configure an embedding model and re-index.
Q: An agent cannot call write_file?
Two possibilities: it is disabled for that agent by disabled_tools, or it is denied
globally by deny. Check GET /v2/agents/:agentId for the effective tool table. By
default main has write_file/edit_file/execute disabled — in the factory
configuration it only orchestrates.
Q: /v2/run says threadId is required
Create the session with POST /v2/sessions first.
Q: The port is taken / the interface will not open?
Change the port in listen_addr, or override it with the LISTEN_ADDR environment
variable.
Q: How do I see what the server actually loaded?
GET /v2/config returns the effective configuration; GET /v2/health returns the
health status and any deferred notices; GET /v2/runtime returns the runtime status.
The startup log also prints the config root path.