> ## Documentation Index
> Fetch the complete documentation index at: https://iii.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Install

> Install the iii engine and set up your agentic development environment.

## Start a project

The recipe below installs the engine, creates a project, and starts it. Select your llm provider, or
select **no llm** to set up a project without one. Every recipe adds [console](./using-iii/console),
the browser ui for your running system; a provider also adds
[harness](https://workers.iii.dev/workers/harness) which enables both agentic development and use of
agents within your iii system. You can add a provider worker later at any time.

<div className="iii-qs" role="group" aria-label="quickstart recipe">
  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-none" defaultChecked />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-openai" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-openai-codex" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-anthropic" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-deepseek" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-kimi" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-openrouter" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-xai" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-zai" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-github-copilot" />

  <input className="iii-qs-radio" type="radio" name="iii-qs" id="qs-llamacpp" />

  <div className="iii-qs-head">
    <span className="iii-qs-title">select your llm provider</span>

    <div className="iii-qs-picker">
      <label className="iii-qs-pill" htmlFor="qs-none">
        no llm
      </label>

      <label className="iii-qs-pill" htmlFor="qs-openai">
        openai api
      </label>

      <label className="iii-qs-pill" htmlFor="qs-openai-codex">
        openai codex
      </label>

      <label className="iii-qs-pill" htmlFor="qs-anthropic">
        anthropic
      </label>

      <label className="iii-qs-pill" htmlFor="qs-deepseek">
        deepseek
      </label>

      <label className="iii-qs-pill" htmlFor="qs-kimi">
        kimi (moonshot)
      </label>

      <label className="iii-qs-pill" htmlFor="qs-openrouter">
        openrouter
      </label>

      <label className="iii-qs-pill" htmlFor="qs-xai">
        xai (grok)
      </label>

      <label className="iii-qs-pill" htmlFor="qs-zai">
        z.ai
      </label>

      <label className="iii-qs-pill" htmlFor="qs-github-copilot">
        github copilot
      </label>

      <label className="iii-qs-pill" htmlFor="qs-llamacpp">
        llama.cpp (local)
      </label>
    </div>
  </div>

  <div className="iii-qs-body">
    <div className="iii-qs-slot" data-qs="none">
      <div className="iii-qs-comment"># No llm needed. Add a provider worker whenever you want agents.</div>
    </div>

    <div className="iii-qs-slot" data-qs="openai">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># The leading space keeps the export out of bash/zsh history (if you have history control enabled)</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export OPENAI\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="openai-codex">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># No api key. This provider uses your chatgpt subscription.</div>
      <div className="iii-qs-comment"># Sign in with the codex cli first, so \~/.codex/auth.json exists:</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>codex login</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="anthropic">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># The leading space keeps the export out of bash/zsh history (if you have history control enabled)</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export ANTHROPIC\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="deepseek">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># The leading space keeps the export out of bash/zsh history (if you have history control enabled)</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export DEEPSEEK\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="kimi">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># The leading space keeps the export out of bash/zsh history (if you have history control enabled)</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export MOONSHOT\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="openrouter">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># The leading space keeps the export out of bash/zsh history (if you have history control enabled)</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export OPENROUTER\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="xai">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># The leading space keeps the export out of bash/zsh history (if you have history control enabled)</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export XAI\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="zai">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># The leading space keeps the export out of bash/zsh history (if you have history control enabled)</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export ZAI\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="github-copilot">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># No api key. Your github copilot subscription grants the models.</div>
    </div>

    <div className="iii-qs-slot" data-qs="llamacpp">
      <div className="iii-qs-comment"># Set up your llm provider</div>
      <div className="iii-qs-comment"># Runs against your own llama-server, [http://127.0.0.1:8080](http://127.0.0.1:8080) by default.</div>

      <div className="iii-qs-comment">
        {'# A key is only needed when llama-server runs with --api-key:'}
      </div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span> export LLAMACPP\_API\_KEY=yourkey</span>
      </div>
    </div>

    <div className="iii-qs-gap" aria-hidden="true" />

    <div className="iii-qs-comment"># Install iii & setup your project</div>

    <div className="iii-qs-cmd">
      <span className="iii-qs-prompt">\$</span>
      <span>curl -fsSL [https://install.iii.dev/iii/main/install.sh](https://install.iii.dev/iii/main/install.sh) | sh</span>
    </div>

    <div className="iii-qs-cmd">
      <span className="iii-qs-prompt">\$</span>
      <span>iii project init iii-app && cd iii-app</span>
    </div>

    <div className="iii-qs-cmd">
      <span className="iii-qs-prompt">\$</span>

      <span>
        {'iii compose --up'}
      </span>
    </div>

    <div className="iii-qs-gap" aria-hidden="true" />

    <div className="iii-qs-comment"># New terminal, same folder</div>

    <div className="iii-qs-slot" data-qs="none">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=console</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="openai">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-openai</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="openai-codex">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-openai-codex</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="anthropic">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-anthropic</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="deepseek">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-deepseek</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="kimi">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-kimi</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="openrouter">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-openrouter</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="xai">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-xai</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="zai">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-zai</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="github-copilot">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-github-copilot</span>
      </div>

      <div className="iii-qs-comment"># Sign in once the provider worker is up:</div>

      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger provider::github-copilot::login::start</span>
      </div>
    </div>

    <div className="iii-qs-slot" data-qs="llamacpp">
      <div className="iii-qs-cmd">
        <span className="iii-qs-prompt">\$</span>
        <span>iii trigger compose::add worker=harness worker=console worker=provider-llamacpp</span>
      </div>
    </div>

    <div className="iii-qs-gap" aria-hidden="true" />

    <div className="iii-qs-comment"># Open your browser to [http://localhost:3113](http://localhost:3113)</div>
  </div>
</div>

## Next Steps

<CardGroup cols={2}>
  <Card title="Quickstart" href="./quickstart" icon="terminal">
    Follow the Quickstart and explore a live iii application.
  </Card>

  <Card title="Use iii" href="./using-iii" icon="table-layout">
    Learn how to use iii in production.
  </Card>
</CardGroup>
