Setting up the concierge
Adding the concierge to an installation means creating the about-room,
wiring in the soliplex-concierge-room and soliplex-docs skills,
registering the create_gitea_issue tool, and declaring the Gitea connection.
The soliplex-concierge-installer skill does all of this for you on a
soliplex-template-generated
stack; the manual steps below are for any other installation.
Either way you will need a Gitea repository to file requests against, and an
access token whose account has Write access to it — not just Read. Gitea
lets a Read-only account open issues but silently drops their labels, so
requests would be filed untagged and slip past triage (issue #59).
A fine-grained token additionally needs the write:issue and read:repository
scopes.
The installer skill (recommended)
Run the soliplex-concierge-installer skill from an external coding agent (e.g.
Claude Code). It runs its bundled scripts/install_concierge.py with
uv run — a thin shim that provisions soliplex-concierge from its
PEP 723 header (so no install step is
needed) and delegates to the soliplex_concierge.installer module — applying
every change idempotently.
Preview first with --dry-run, then apply:
# dry run — report changes without writing
uv run scripts/install_concierge.py --stack-dir /path/to/stack \
--owner <gitea-owner> --repo <gitea-repo> --dry-run
# apply, pinning the dependency version
uv run scripts/install_concierge.py --stack-dir /path/to/stack \
--owner <gitea-owner> --repo <gitea-repo> --version <X.Y>
What it changes
It applies these idempotent edits to the stack:
- Adds
soliplex-conciergetobackend/pyproject.tomland thebackend/Dockerfileuv addblock (the generated Dockerfile ignores thepyproject.tomldeps, so both are needed). - Merges six entries into
backend/environment/installation.yaml:meta.tool_configs,environment,secrets, twoskill_configs— forsoliplex-concierge-roomandsoliplex-docs— androom_paths. - Copies the about-room into
backend/environment/rooms/<room-id>/(about_<compose-project-name>by default; override with--room-id). - Downloads and installs the
soliplex-concierge-roomandsoliplex-docsfilesystem skills intobackend/environment/skills/. - Appends the
GITEA_HOST/GITEA_ACCESS_TOKENplaceholders to.env— unless the stack ships a local Gitea service (see below), in which case.envis left for that service's ownscripts/init_gitea.pyto populate. - Writes the admin
scripts/gitea_issues.pyCLI (see Admin).
Useful flags
--version <X.Y>— pin the dependency added to the stack; omitting it warns about version skew,--version latestopts into the newest release.--room-id— room id to create (defaultabout_<compose-project-name>).--gitea-host/--gitea-token— fill real.envvalues instead of placeholders.--no-local-gitea— skip local-Gitea auto-detection (see below) and keep the external-Gitea defaults (placeholder.envvalues and roomowner/repo).--with-truststore— install thesoliplex-concierge[truststore]extra so the tool verifies TLS against the OS trust store rather thancertifi's bundle; use when the Gitea host's certificate chains to an enterprise / internal CA (issue #46).--room-skill-dir/--docs-skill-dir(or--room-skill-version/--docs-skill-version) — install the skills from a local copy or a pinned tag instead of downloading the latest.--force— overwrite an existing room/skill.
Afterwards, set the real Gitea values in .env and rebuild:
docker compose build backend && docker compose up -d. Confirm both skills are
present under backend/environment/skills/ and that
uv run scripts/gitea_issues.py --help works.
Local Gitea service
When the target stack was generated by soliplex-template with include_gitea,
its docker-compose.yml defines a gitea service (backed by Postgres) and the
stack ships a scripts/init_gitea.py shim that provisions it. The installer
detects that service and, instead of emitting dead placeholders:
- wires the room's
create_gitea_issuetool tosoliplex-admin/soliplex-requests— the service account and repositoryinit_gitea.pycreates, and - leaves
.envuntouched, sinceinit_gitea.pywritesGITEA_HOST/GITEA_ACCESS_TOKENitself.
The order is then: run the installer → docker compose up -d → uv run
scripts/init_gitea.py (mints the token, creates the repo, populates .env) →
docker compose up -d backend to pick up the new .env. Pass --owner /
--repo to override the defaults, or --no-local-gitea to opt out of detection
entirely (for an external Gitea).
Manual wiring
For a non-generated installation, do the same steps by hand.
- Install the package into the environment that runs Soliplex (it depends
on
soliplex):
For an enterprise / internal CA, install soliplex-concierge[truststore]
instead so the tool verifies TLS against the OS trust store (issue #46).
- Merge the
installation.yamlentries from the bundledinstallation-snippet.yaml. They: - register the tool-config class via
meta.tool_configs(Soliplex resolves the tool by its dottedtool_name; no core edit is needed), - add the directories of the two filesystem skills the about-room uses
(
soliplex-concierge-roomandsoliplex-docs) tofilesystem_skills_paths, and enable both underskill_configs, and -
declare the
GITEA_HOSTenvironment variable andGITEA_ACCESS_TOKENsecret the tool reads to call the Gitea REST API (no MCP server or external binary is required). -
Copy the about-room template from
rooms/about_soliplex/into your installation'srooms/directory, editing theowner/repoon thecreate_gitea_issuetool to point at your tracking repository. (Either may be a literal value or a Soliplex interpolation string such asenv:GITEA_OWNER.) -
Set the Gitea connection —
GITEA_HOSTand theGITEA_ACCESS_TOKENsecret (see the.envlines at the bottom of the snippet), using a token with Write access as noted above.
The about-room answers questions from the bundled soliplex-docs skill, so no
RAG database is required. To also answer from this installation's own
ingested content, uncomment the skill_configs block in the room's
room_config.yaml, pointing rag_lancedb_stem at a database under rag/db/.
tHe soliplex-template skill
can generate and ingest one (see the
RAG DB docs).