Settings
There are two places where Organtia is configured, and it is worth not confusing them:
- The Settings view, inside the office: the whole company. It has eight tabs and gathers what gets adjusted once —the CEO, the people, the roles, the models and the automations—. Changes apply on the next message.
- The installation’s
.env: it defines the model, the identity, the database and access. Changes require recreating the container.
The Settings view
Section titled “The Settings view”It opens from the bottom of the side menu, with the gear icon and the label Settings. Only whoever administers can see it: a member is not offered a button the server would answer with a 403.
This name used to belong to a dialog that only held the CEO’s page, so anyone clicking it looking for users or providers found Adrián’s prompt and none of the other things. Now those pieces live in here, in tabs, instead of lying loose in the menu mixed in with the day-to-day work:
| Tab | What you do there |
|---|---|
| Company | The name, the legal name, the CEO’s name, the CIF, the address and the company register entry. |
| The CEO | Its instructions, and, read-only, the model, the temperature, the response cap and the turns it remembers. |
| People | Who signs in, with which access level and which role. |
| Roles | The crafts: what each role knows how to do before anyone programs it. |
| Models and providers | Which provider each role talks to, and with which model. |
| Applications | The connectors: which external services the team can use. |
| Cron jobs | The work that repeats, with its schedule. |
| Browser | What the roles are seeing on the internet, live. |
The standalone views still exist for direct links (?vista=personas, ?vista=modelos…): moving a
button cannot break an address someone has saved.
The CEO tab
Section titled “The CEO tab”The model and its parameters are edited in the .env, not here. The per-role model is
assigned in the Models and providers tab; this page only shows the CEO’s.
What it shows
Section titled “What it shows”| Data | Where it comes from | Can it be changed here |
|---|---|---|
| Model | MODEL_ID |
No |
| Temperature | MODEL_TEMPERATURE |
No |
| Response cap | MODEL_MAX_TOKENS (tokens per response) |
No |
| Turns it remembers | HISTORY_RUNS (exchanges re-read on every call) |
No |
| Project in progress | The session’s active project, or “general, no project” | No |
| Its instructions | organtia.instrucciones table, key adrian |
Yes |
The instructions
Section titled “The instructions”This is the block of text that defines how Adrián works. It is stored whole in
organtia.instrucciones and re-read on every turn, so a change affects the next message, not a
conversation already under way.
Limits the server applies on save:
| Check | Response if it fails |
|---|---|
| Fewer than 200 characters (not counting extra spaces) | “too short: it would be left without instructions” |
| More than 400,000 characters | “too long” |
On save, the notice confirms: “Saved. N characters. It applies on your next message.”, where N is the actual length of the text.
Under the editor there is a note with two facts: whether it is using a version of yours right now or the factory one, and which project is in progress.
Placeholders that fill themselves in
Section titled “Placeholders that fill themselves in”The text can carry these gaps, and the system replaces them when it builds the turn’s prompt:
| Placeholder | Replaced by |
|---|---|
{propietario} |
OWNER_NAME |
{empresa} |
EMPRESA (the company name of the installation) |
{ceo} |
CEO_NOMBRE |
{estado} |
The consolidated situation: project, pending items, decisions in force and the latest thing recorded |
If you delete {estado} from the text, the situation is added at the end anyway: the CEO cannot
be left not knowing where it stands. The substitution is literal, not with format, so a stray
brace does not break the turn.
Restoring the original
Section titled “Restoring the original”The “Restore the original” button asks for confirmation: the first click turns it into
“Sure? Click again” for four seconds, and the second restores the factory text (the one that
lives in the code, in prompts.py). Then it reports: “Original instructions restored”.
Every save and every restore leaves a row in the audit with herramienta = ui:instrucciones and actor = propietario.
Environment variables
Section titled “Environment variables”All of them are read from the process environment. Changing any of them requires recreating the service:
docker compose up -d --force-recreate apiInstallation identity
Section titled “Installation identity”| Variable | Default | What it does | If you change it |
|---|---|---|---|
CLIENTE |
organtia |
Deployment name: it prefixes containers, volumes and network. | Changes container names; the stack has to be recreated. It does not touch the data. |
MARCA |
Organtia |
Product name. It appears in the tab, on the gate and in the panel. | Relabels the installation. It does not affect how it works. |
EMPRESA |
empty | Seed only: the name proposed the first time the Company tab is opened. Empty = development installation. | From then on the table rules; changing this no longer changes anything. |
CEO_NOMBRE |
Adrián |
Seed only for the CEO’s name. | Same: after that the Company tab rules. |
LEGAL |
Data Lean Makers, S.L. |
Seed only for the legal name. | Same: after that the Company tab rules. |
Company data is no longer touched in the
.env. The name, the legal name, the CEO’s name and the legal details are written in Settings › Company and stored inorgantia.empresa. The variables above only fill in the form the first time, so an installation that was already running does not wake up blank. A change saved from the interface shows up instantly in the title and in the HTML pages, without recreating the container. |OWNER_NAME|Pedro| The name the CEO uses for the owner. | Changes how it addresses you in replies and the value ofactorin the audit. |
Database
Section titled “Database”| Variable | Default | What it does | If you change it |
|---|---|---|---|
DB_HOST |
db |
PostgreSQL host. | If it does not resolve, the API does not start. |
DB_PORT |
5432 |
PostgreSQL port. | It has to match the one on the db container. |
DB_NAME |
organtia |
Database name. | Points at another database; with an empty one, the schema is created on startup. |
POSTGRES_USER |
organtia_admin |
Administrator role: only the migrations use it. | Changing the role means it has to exist in PostgreSQL. |
POSTGRES_PASSWORD |
mandatory | Password of the administrator role. | Without it, the API does not start: “Missing mandatory environment variable”. |
APP_DB_USER |
organtia_app |
Application role, with the minimum privileges. | Same: the role must exist and have permissions on the schema. |
APP_DB_PASSWORD |
mandatory | Password of the application role. | Without it, the API does not start. |
The two roles exist on purpose: the application cannot alter the audit or change the schema, because it does not have permission to.
Language model
Section titled “Language model”| Variable | Default | What it does | If you change it |
|---|---|---|---|
MODEL_ID |
deepseek-v4.1-flash:1017 |
Model the CEO uses (and the roles without a model of their own). | Changes the engine behind every turn. It must exist on the endpoint. |
MODEL_BASE_URL |
https://ollama.com/v1 |
Endpoint compatible with the OpenAI API. | Points at another provider; the key has to be theirs. |
MODEL_API_KEY |
mandatory | Provider key. | Without it, the API does not start. It is not shown anywhere. |
MODEL_TEMPERATURE |
0.4 |
Creativity of the replies. | Higher, looser replies; lower, more repetitive ones. |
MODEL_MAX_TOKENS |
16000 in the code |
Token cap for one reply. | .env.example ships 32000. Lowering it cuts long replies; raising it spends more and can take longer. |
HISTORY_RUNS |
2 in the code |
Previous exchanges re-read on every call. | This is the “Turns it remembers” of the CEO tab. .env.example ships 8. Raising it a lot inflates the prompt and slows the turn down. |
HISTORIAL_TURNOS |
8 |
It is read on startup, but nobody uses it today. | None. The effective value is HISTORY_RUNS. |
TURNO_ESPERA |
120 |
Seconds to wait on the model without receiving anything before warning and leaving the turn. | With low values slow turns get cut; with high values an outage takes a while to show. |
If you change models, the practical reference is: one line in .env, recreate api and check it
with a short conversation. The models tested with tools in Spanish are
deepseek-v4.1-flash:1017 and gpt-5.4-mini.
Access to the office
Section titled “Access to the office”| Variable | Default | What it does | If you change it |
|---|---|---|---|
ACCESO_CLAVE |
mandatory (32+ characters) | Key the session cookies are signed with. | Without it, or with fewer than 32 characters, the gate lets nobody in. Changing it invalidates every open session. |
ACCESO_DIAS |
7 |
Days the session cookie is valid for. | 1 to 90 is accepted; outside that range it stays at 7. |
Details in /docs/administracion/usuarios/.
Secrets and external services
Section titled “Secrets and external services”| Variable | Default | What it does | If you change it |
|---|---|---|---|
ORGANTIA_SECRET_KEY |
empty | Master key that encrypts provider and connector keys before storing them in PostgreSQL. | If it is not set, one is generated in a file on the volume. If you lose it, the encrypted keys can no longer be read and have to be entered again. |
ORGANTIA_SECRET_FILE |
/app/archivos/.organtia_secret |
Path of that file when there is no environment variable. | Points elsewhere; if the volume does not persist, the key is regenerated on every start and anything encrypted before becomes unreadable. |
ORGANTIA_URL_PUBLICA |
https://demo.organtia.ovlicuo.com |
Public address of the office. It is used to build the OAuth2 return for connectors. | It has to match the “redirect URI” registered with each provider, or OAuth fails. |
INTERNAL_SERVICE_TOKEN |
mandatory | Token the cron clock calls the API with when there is nobody behind it. | Without it, the API starts but the cron jobs do not run, and the log says so. |
SCHEDULER_BASE_URL |
http://127.0.0.1:8000 |
Internal port of the Agno scheduler. | Changes where the clock calls; it is internal to the container, not the host’s. |
PANEL_TOKEN |
empty | Token of the old approvals panel. | Empty = the panel is not served (it answers 503). .env.example treats it as retired: approvals are made in the office. |
OFICINA_PIXEL_URL |
empty | Address of the pixel-art viewer. | Empty = the room is not drawn; the work goes on the same. |
OFICINA_PIXEL_TOKEN |
empty | Token for that viewer. | Only needed if the viewer requires it. |
System
Section titled “System”| Variable | Default | What it does | If you change it |
|---|---|---|---|
TZ |
Europe/Madrid |
Time zone of the container. | Affects the dates shown and the month boundary of the budget. |
ORGANTIA_DEBUG |
0 |
With 1 (or true, si, yes, on), it prints detailed traces of tools and errors to the console. |
More noise in the logs, useful for diagnosing. |
API_PORT |
18011 |
Host port the API is published on. It listens on 127.0.0.1 only. |
If you change it, you have to adjust Caddy’s reverse_proxy. |
WEB_DIR |
/app/web |
Folder the compiled interface and the gate images are served from. | If it does not contain index.html, the office does not load. |
NAVEGADOR_CDP |
empty | Endpoint of an already open browser, to debug the web skill. | Empty = the service launches its own Chromium with the role’s profile. |
Startup errors that come from here
Section titled “Startup errors that come from here”| Message | Cause |
|---|---|
| “Missing mandatory environment variable: X” | One of the mandatory ones is missing: POSTGRES_PASSWORD, APP_DB_PASSWORD, MODEL_API_KEY or INTERNAL_SERVICE_TOKEN. The process does not start and says which one. |
| “MODEL_MAX_TOKENS must be an integer” | A non-numeric value in an integer variable. |
| “MODEL_TEMPERATURE must be a decimal number” | A non-numeric value in a decimal variable. |
| The gate returns 500 and shows no form | ACCESO_CLAVE empty or too short. It does not stop it from starting: it fails on sign-in. |
| “Panel disabled: set PANEL_TOKEN in .env and restart the API” | Someone opened /panel/ with no token configured. |
What is not configured from here
Section titled “What is not configured from here”- The company’s name and legal details: in Settings › Company (no longer in the
.env). - Each role’s model: in Settings › Models and providers.
- The token budget: on the role’s page and in Departments.
- The paths the CEO can read: in the
organtia.accesostable, granted by talking to it and recorded with the owner’s instruction. - The cron jobs: in Settings › Cron jobs, with management approval.
