Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Setting Up a Frontier Model Provider

InterGen runs locally and needs no account, no key and no network. Everything on this page is optional. It describes what happens if you decide you want the assistant to be able to ask a larger cloud model for help on a specific request — the feature InterGen calls phone-a-friend.

If you never configure a provider, nothing here applies to your machine. InterGen ships local-only and works that way indefinitely. With no provider configured, escalation cannot run at all: the offer degrades to a note telling you a provider would need configuring, and nothing is sent anywhere.

Before configuring anything, read What Leaves the Machine. It is the companion to this page and it describes exactly what a configured provider does and does not receive.

What the feature is

Phone-a-friend is consent-first assistance, not a background fallback. When InterGen recognizes that a request is multi-step, sensitive, or somewhat outside what it can do well locally, it offers to reach the provider you configured. You then decide, per request.

There is also an explicit affordance — an “ask my frontier model” action in the graphical interface, with a command-line equivalent — for when you already know you want the bigger model. Invoking it deliberately skips the recognition step, because you have already made the decision that step exists to ask you about.

Where the configuration lives

InterGen reads configuration from two files:

PathScope
/etc/intergen/config.ymlSystem-wide
~/.config/intergen/config.ymlPer-user

Three sections govern this feature: escalation, providers, and sentinel.

These sections are AI-immutable, by design

InterGen cannot edit escalation:, providers: or sentinel: — ever. They are in a protected set that the assistant is structurally forbidden from modifying. Only a human changes them, either by hand-editing the file or through an authenticated path in the graphical interface.

This is the point of the whole design. An assistant that could grant itself a network egress route, or quietly widen its own escalation policy, would make every other guarantee on this page unverifiable. The setting that decides whether your conversation can leave the machine is not a setting the thing having the conversation is allowed to touch.

Choosing an escalation mode

escalation.mode has four values. The default is ask.

ModeBehaviour
neverFully offline. InterGen never offers and never sends.
fallbackEscalates only when the local quality gate has failed.
askDefault. Offers on recognition; you consent before anything is sent.
autoDecides by confidence, with no prompt.
escalation:
  mode: ask
  primary_provider: null

primary_provider has no default. A provider is something you add; nothing is pre-selected for you.

If you want the certainty rather than the default, set mode: never. That is the configuration equivalent of the machine having no cloud story at all, and it is a supported, first-class state — not a degraded one.

Adding a provider

Provider entries live in the providers: list, which is empty by default. Each entry names an adapter, a model, and the keyring identifier under which the credential is stored, with an optional base URL for a self-hosted or proxied endpoint.

providers:
  - adapter: <adapter-name>
    model: <model-name>
    api_key_keyring_id: <keyring-entry-id>
    base_url: https://…        # optional

The API key is never in the configuration file

Note what api_key_keyring_id is: an identifier, not a secret. The credential itself lives in the system keyring. The configuration file records only which keyring entry to look up.

This matters for the obvious reason — a configuration file gets copied into backups, pasted into support threads, and committed to dotfile repositories, and a key written there leaks with it — and for a less obvious one: the key is fetched from the keyring per call rather than held in memory for the life of the process.

The substrate also refuses to send over a connection that is not TLS. A misconfigured base_url pointing at a plaintext endpoint fails closed rather than shipping your conversation in the clear.

Verifying your configuration

After editing, confirm the file parses and the assistant sees what you intended:

systemctl --user restart intergen      # intergen runs as a user unit
journalctl --user -u intergen -b --no-pager | tail -40

Then exercise it deliberately rather than waiting to be surprised: make a request you expect to trigger an offer, and confirm you get the consent prompt described in What Leaves the Machine — showing the full text, with send and cancel as the only options. If you configured mode: ask and content is sent without that prompt appearing, stop and investigate; that is not the intended behaviour.

Turning it off again

Set the mode to never, or remove the provider entry entirely:

escalation:
  mode: never

With no provider configured, the feature is inert regardless of mode. Removing the keyring entry as well means the credential is gone from the machine, not merely unreferenced.