Concierge

Open source · MIT · by repo.box

A landing-page agent that cannot do anything but answer.

Concierge is a chat widget plus a sandboxed proxy. It answers visitor questions from one page brief you wrote, streams fast, and has no tools, no browser, no retrieval and no memory. Jailbreak it and the worst case is an off-brand sentence.

The widget in the corner of this page is Concierge, briefed on Concierge. Ask it what this is. That is the pitch.

Write your own brief

Why it's safe by design

One decision does the work: the agent has no capabilities.

Sandboxed

No tools, no function calling, no browsing. There is nothing to escalate to.

No hallucination

The whole brief sits in the system prompt. It answers from what is in front of it and refuses when the answer is not there.

Fast

A small model, streamed tokens, no retrieval round-trip. First token lands quickly.

Locked down

Hardened prompt, client system roles stripped, depth and length caps, per-IP and per-session rate limits, bounded concurrency, a provider circuit breaker.

1 · Interview

Six questions produce a brief the server accepts. Nothing here is stored beyond a 30-minute sandbox you opt into.

    Brief JSON

    incomplete
    
              

      2 · Configure

      Every token the widget knows is adjustable. The preview is the real widget talking to the real server; when you have used a brief above, it answers from that brief.

      Preset
      Accent
      Shape & density
      Copy
      All tokens

      Values below are the preset defaults after accent, radius and density are applied. Edit any of them; blank restores the default.

      Live preview

      brief: Concierge

      Inline mount of the same embed bundle served at /concierge/embed.js. The preview always mounts inline; Position only changes the export.

      3 · Export

      Everything below is derived from the configuration above. Paste the script tag into a blank HTML file and it renders exactly this widget against this server.

      
              
            

      Docs

      Install

      Two ways, same widget. The script tag needs no build step; the server serves the bundle at /embed.js so the host page never hosts the asset.

      
            
      
      
            

      Props and data-* attributes

      Every prop has a data-* equivalent (launcherLabeldata-launcher-label).

      Propdata-*DefaultWhat it does

      Brief schema

      Six required strings. docs is the agent's entire world; end it with a LINKS: block of the exact URLs it may share. capabilities is optional and honoured only from server-loaded briefs.

      
            

      Validate any brief against the running server without storing it:

      curl -s -X POST https://concierge.repo.box/concierge/brief/validate \
        -H 'content-type: application/json' --data @brief.json
      # → {"ok":true,"errors":[]}  or  422 {"ok":false,"errors":["docs must not be empty", …]}

      Theming tokens

      Generated at page load from the widget's own TOKEN_METADATA and THEME_PRESETS exports, so this table cannot drift from the bundle you embed. Composition order: preset → accent derivation → radius scale → density → themeVars.

      TokenCategoryControlsmidnightPreset differences

      Self-host

      
            

      Server limits (env, default): CONCIERGE_MAX_CONCURRENT 4 · CONCIERGE_MAX_QUEUE_DEPTH 16 · CONCIERGE_REQUEST_TIMEOUT_MS 30000 · CONCIERGE_RATE_LIMIT_IP 20/min · CONCIERGE_RATE_LIMIT_SESSION 12/min · CONCIERGE_CIRCUIT_FAILURES 3. GET /health reports liveness and queue/circuit state; GET /ready returns 503 when saturated. Error codes: queue_full, rate_limited_ip, rate_limited_session, provider_circuit_open. The sandbox used by this page is opt-in (CONCIERGE_SANDBOX=1) and off in a default install.

      Optional capability packs

      Powerless by default. Each pack is a door you open, only from trusted server-side brief JSON; the /chat body cannot enable, inject or modify any of it.