Skip to content

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.

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 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.

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

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.

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.

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.

All of them are read from the process environment. Changing any of them requires recreating the service:

Ventana de terminal
docker compose up -d --force-recreate api
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 in organtia.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 of actor in the audit. |

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.

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.

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/.

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.
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.
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.
  • 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.accesos table, granted by talking to it and recorded with the owner’s instruction.
  • The cron jobs: in Settings › Cron jobs, with management approval.