Web UI
======
Use the web interface for ChatGPT-style interaction in your local environment.
The Web UI is built with `Chainlit `_ and provides a user-friendly interface for chatting with your installed **FermiLink** packages.
Fast path (recommended)
-----------------------
If you have already completed :doc:`installation`, this is the only workflow you
need to get the Web UI running.
.. code-block:: bash
fermilink start
Then your browser will automatically open the following webpage:
.. figure:: _static/img/web_ui_entry.png
:alt: FermiLink web UI.
:align: center
:width: 95%
**Sign UP** with an account and then **Sign In**. You can then enjoy a ChatGPT-style interface with the same agent capabilities as the terminal, but with better interactivity and visualization support.
.. code-block:: text
/package list
to check the locally installed packages for **FermiLink**. If you see installed packages in the list, you are ready to chat. If you did not install any packages yet, install one with:
.. code-block:: bash
fermilink avail
fermilink install --activate
What ``fermilink start`` launches
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
``fermilink start`` launches two local processes:
- **runner**: FastAPI execution backend (default: ``http://127.0.0.1:8000``)
- **web**: Chainlit Web UI (default: ``http://127.0.0.1:7860``)
Service logs are written under ``$FERMILINK_RUNTIME_ROOT/logs/``.
Start, stop, and check web UI status
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you need to stop or restart the services, use the following commands:
.. code-block:: bash
# start the local runner + web UI
fermilink start
# check status
fermilink status
# restart services
fermilink restart
# stop services
fermilink stop
Where your work lives
~~~~~~~~~~~~~~~~~~~~~~~
In Web UI mode, each chat message runs inside a session workspace repo under::
$FERMILINK_WORKSPACES_ROOT//repo
The default ``$FERMILINK_WORKSPACES_ROOT`` path is ``~/.fermilink/``.
Inside each chat thread, you can find:
- ``projects/memory.md``: unified short-term/long-term memory used across turns
- ``projects/``: place for simulation folders and reports
To find recent workspaces on disk:
.. code-block:: bash
FERMILINK_WORKSPACES_ROOT=$HOME/.fermilink/workspaces
ls -t "$FERMILINK_WORKSPACES_ROOT" | head
Then inspect one session:
.. code-block:: bash
ls "$FERMILINK_WORKSPACES_ROOT//repo"
Troubleshooting (common first-run issues)
-----------------------------------------
- **Web UI shows no packages**:
install at least one package and activate it::
fermilink install --activate
- **Runner fails with a provider error**:
ensure the active provider CLI (``codex``, ``claude``, ``gemini``, or
``opencode``) is on ``PATH`` and authenticated, then restart.
You can check or change provider
selection with ``fermilink agent``::
# check current provider and reasoning effort
fermilink agent --json
# switch to Codex with high reasoning effort
fermilink agent codex --sandbox --model gpt-5.3-codex --reasoning-effort xhigh
# switch to Claude with relaxed sandbox for better performance
fermilink agent claude --bypass-sandbox --model sonnet --reasoning-effort high
# switch to Gemini
fermilink agent gemini --sandbox --model auto-gemini-3 --reasoning-effort high
# switch to OpenCode with a configured provider/model profile
fermilink agent opencode --bypass-sandbox --model openai/gpt-5.5 --reasoning-effort xhigh
# restart the web UI service of FermiLink to apply the new provider settings
fermilink restart
- **Ports already in use**:
stop the conflicting process, or override the commands (see below).
Package selection inside the UI
-------------------------------
**FermiLink** routes each message to an installed package (keyword router + optional
second-guess preflight). You can also pin a package for the current chat.
Use ``/package help`` in the UI for the built-in command list. The most common
commands are:
.. code-block:: text
/package list
/package current
/package use meep
/package auto on
/package auto off
/package clear
Notes:
- Auto routing is per-chat; it can switch packages between turns when enabled.
- Manual ``/package use ...`` pins always take precedence until you clear them.
- If you see "no packages", install one with ``fermilink install --activate``.
- Generated figures/documents are attached from either referenced paths in the
assistant reply or detected created/updated files under the workspace artifact
directories.
Advanced: override ports/hosts (optional)
-----------------------------------------
To override host/port without editing code, set command overrides:
.. code-block:: bash
export FERMILINK_RUNNER_CMD="uvicorn fermilink.runner.app:app --host 127.0.0.1 --port 8000"
export FERMILINK_WEB_CMD="chainlit run src/fermilink/web/app.py --host 127.0.0.1 --port 7860"
Then start normally:
.. code-block:: bash
fermilink start
Advanced: accounts and signup
-----------------------------
The Web UI uses password authentication and supports multiple accounts. You can manage accounts with the following commands:
Common controls:
- ``FERMILINK_AUTH_SIGNUP_ENABLED``: allow self-signup (default: true)
- ``FERMILINK_AUTH_AUTO_REGISTER``: auto-create a user record on first login
(default: false; convenient for single-user/local setups)
- ``FERMILINK_AUTH_MAX_USERS``: cap the number of accounts (``0`` means unlimited)
- ``FERMILINK_AUTH_MIN_PASSWORD_LEN``: minimum password length (default: 8)
To keep sessions stable across restarts, optionally set a persistent secret:
.. code-block:: bash
export FERMILINK_CHAINLIT_AUTH_SECRET=""
Advanced: Host this web UI for your team or class
--------------------------------------------------
We have tested that this Web service can be hosted on a server and accessed remotely with a proper IP adress or domain name. This might be useful for teaching purposes or team collaboration.
See also
--------
- :doc:`installation` for full setup.
- :doc:`configuration` for runtime variables.
- :doc:`scientific_packages` for package install/compile/recompile workflows.
- :doc:`architecture` for request flow and streaming contracts.