{% extends "base.html" %} {% block title %}Setup — {{ instance_name or "AI Data Analyst" }}{% endblock %} {% block content %} {% include "_page_chrome.html" %}
{% set display_name = (user.name or (user.email or "").split("@")[0] or "there") %} {# Install-hero renders only for not-onboarded users. Once `agnes init` POSTs /api/me/onboarded (or the user clicks the in-hero X) the hero disappears entirely — the rest of /home (connector tiles, news, etc.) stays. Offboarding escape hatch moved to a discrete strip below; see `.offboard-strip`. #} {% if not onboarded %}
Welcome, {{ display_name }} — let's get you set up

Connect Claude Code on your machine to your team's data

{{ instance_brand }} gives Claude Code on your computer access to your team's curated data, plugins, and shared knowledge — so you can ask questions and get answers in plain language, right from your terminal. This page walks you through the one-time setup (~10 minutes). Everything it installs lives in your home folder (~/{{ workspace_dir }}) and can be removed in one command.

Step 1 — install Claude Code
curl -fsSL https://claude.ai/install.sh | bash
{# P0-1 — terminal-howto disclosure. Two panels (unix / windows) that flip in lockstep with the install-cmd OS tabs above. #}
Don't have a terminal open? — show how

macOS: press + Space, type Terminal, press Enter.

Linux: press Ctrl + Alt + T (most distros), or open the apps menu and search "Terminal".

WSL: open the Windows Start menu, search "Ubuntu" (or your installed distro), press Enter.

Paste the command above with Ctrl + Shift + V (Linux/WSL) or + V (macOS), then press Enter.

Verify with claude --version. Sign in once with claude and complete the OAuth flow. Don't have a Claude license yet? See plan options on /setup-advanced (Pro / Max 5× / Max 20×).
{% if home_automode.show %}
Step 2 — turn on auto-mode (recommended before Step 4)
In the Claude Code session you just signed into, press Shift + Tab. Claude cycles modes: default → auto-accept edits → plan mode → default; the footer shows ⏵⏵ when auto-accept is on. On the first cycle to auto-accept, Claude asks whether to make it the default — say yes. Closed the session already? Run claude again, then press Shift + Tab.

Want full auto-approve including Bash? See YOLO mode on /setup-advanced — pairs --dangerously-skip-permissions with a reviewed ~/.claude/settings.local.json allowlist. Skip if you're not sure.
{% endif %}
Step 3 — create your workspace folder
mkdir -p ~/{{ workspace_dir }} && cd ~/{{ workspace_dir }}
This is where {{ instance_brand }} will live. Run the command in the terminal you opened for Step 1, then keep that terminal handy — the next step pastes the setup script into Claude Code from this same directory.
Step 4 — install {{ instance_brand }} from inside Claude Code

Click the button — {{ instance_brand }} creates a 90-day login token, copies a ready-to-paste setup script to your clipboard, and a follow-up popup tells you exactly where to paste it. The script bootstraps everything in ~/{{ workspace_dir }} once Claude Code receives it.

Valid 90 days · token stays in clipboard only
Or paste manually (preview the script)
{% with preview_mode=True %} {% include "_claude_setup_instructions.jinja" %} {% endwith %}
The preview above is the exact text the button copies; the placeholder is replaced with a real token at click time. Don't create ~/{{ workspace_dir }}/Projects/ manually — the bundled plugin offers to set it up after install.
{# P1-6 — auto-detect badge is the PRIMARY affordance after the install-script copy: agnes-init's first POST to /api/me/onboarded flips state automatically and the page reloads. The manual "Mark me as onboarded" button below it stays as a fallback when auto-flip never lands. #}
Waiting for your first agnes pull — auto-detects within ~30 s of the setup script finishing.
{# Self-mark fallback for the auto-flip. The hero's X close button does the same thing more visibly; both target the not-onboarded → onboarded direction. The onboarded → offboarded variant lives below the hero (.offboard-strip) so it stays reachable once the hero is gone. #}
Already set this up?
{% endif %} {% if onboarded %} {# Offboarding escape hatch shown only after the hero has disappeared. Lets the analyst (e.g. after wiping ~/FoundryAI) flip the users.onboarded boolean back to false so the full install hero renders again on next reload. Discrete by design — onboarded users land on /home expecting the nav hub, not a setup screen. #}
Workspace ready — wiped it and need the full setup view back?
{% endif %} {# Auto-mode card used to live here as a `
` reference block; moved into the install-hero as the new Step 2 so users enable it BEFORE Step 3's install runs ~20 commands. Gated by the same `home_automode.show` flag at the call site. #} {# Getting Started card — dismissible per-device via localStorage. Two clickable rows pointing at the install flow (/setup) and the deeper reference (/setup-advanced). Subsumes the legacy `.advanced-pointer` row that used to sit above the news section. #}

Getting Started

Two quick next steps to get the most out of {{ instance_brand }}.

Setup {{ instance_brand }} in your Claude Code One-time install: copies a setup script to your clipboard, paste into Claude Code, done in ~10 minutes.
Go deeper into your AI workspace VS Code layout, recommended plugins, multi-model second opinions, custom skills + rules + hooks, project workflows.
{# Overview section — operator-owned, opt-in. Body comes from the `instance.overview` yaml field via get_instance_overview() (`AGNES_INSTANCE_OVERVIEW` env override). Empty value hides the whole section, keeping the OSS vendor-neutral. #} {# Overview is operator-owned reference content, not per-user chrome — no dismiss button on purpose. A one-time per-device hide would mean returning users who wanted to re-read the privacy posture / telemetry policy can't get back to it without clearing localStorage. The whole section is opt-in at the operator level (empty yaml → section absent), which is the right axis of control. #} {% if config.INSTANCE_OVERVIEW %}

Overview

{{ config.INSTANCE_OVERVIEW | safe }}
{% endif %} {# Usage modes — Terminal / VS Code / Claude Desktop · claude.ai. Generic OSS-shipped copy linking to /setup and to /setup-advanced anchors. Helps onboarded users find the right surface once they know which workflow fits them. #}

Where you can use {{ instance_brand }}

Same workspace, three surfaces. Pick whichever fits your flow — all three share the same plugins, data access, and credentials.

{# Terminal tile is informational — the setup hero above already walks through the Claude Code CLI install, so a click-through here would round-trip back to content the user just scrolled past. Rendered as a non-anchor div; hover/cursor styles only apply to the anchor variants below. #}
Terminal Default. Run claude from any project under ~/{{ workspace_dir }}. Lowest overhead, fastest feedback loop.
VS Code Split-terminal layout — conversation on one side, diffs and tool output on the other. See Go deeper for the recommended layout. Claude Desktop / claude.ai Connect this {{ instance_brand }} instance's plugin marketplace to your Claude Desktop or claude.ai account — same plugins, no terminal required.

For the deepest integration, create every project under ~/{{ workspace_dir }}/Projects/ — existing or new. The bundled plugin keeps each project in sync with the central catalog automatically, and the session-analysis loop is scoped to that root.

Connect your tools (Asana / Google Workspace / Atlassian)
{# P0-3 — title row + time-badge + post-copy hint. The hint container is rendered hidden; the JS reveals it after the copy succeeds, then auto-hides after 8 s. #}
Asana ~5 min · self-serve
Read tasks and projects, comment, create updates — Claude works alongside your project boards without leaving the terminal.
✅ Copied. Now paste into Claude Code — run claude in your terminal, then paste & press Enter.
Show prompt {# Asana prompt body sourced from app/web/connector_prompts.py (`asana_prompt()`). Same string the main setup script inlines in step 9, so the two surfaces stay in lockstep. #}
{{ connector_prompts.asana }}
📚 {# P0-3 + P1-8 — Google Workspace tile. Time badge warns when the operator hasn't provisioned a shared OAuth app (forces the user to set up GCP themselves, which is a ~20-min clickops detour). The gating-note + email-admin button appear in that same un-configured branch so the user has a way out before copying. #}
Google Workspace {% if gws_oauth.configured %} ~5 min · self-serve {% else %} ~20 min · admin help likely {% endif %}
Drive, Calendar, Gmail, Docs, Sheets, Chat — Claude reads and acts across your work account via the official gws CLI.
{% if not gws_oauth.configured %}
Heads up: your {{ instance_brand }} admin hasn't provisioned a shared Google Cloud OAuth app yet, so this connector needs GCP project setup (creating an OAuth client, enabling APIs). It's fastest to ask your admin first — the button below pre-fills the email.
{% endif %}
{% if not gws_oauth.configured and instance_admin_email %} {% endif %}
✅ Copied. Now paste into Claude Code — run claude in your terminal, then paste & press Enter.
Show prompt
{{ connector_prompts.gws }}
🎟️
Atlassian (Jira / Confluence) ~7 min · self-serve
Read and write Jira issues, search Confluence pages — Claude pulls ticket context and posts updates without leaving the workspace.
✅ Copied. Now paste into Claude Code — run claude in your terminal, then paste & press Enter.
Show prompt
{{ connector_prompts.atlassian }}

You don't need {{ instance_brand }} installed locally to browse what's available. Anything you bookmark or subscribe to will be there waiting after you set {{ instance_brand }} up.

{# Legacy `.advanced-pointer` row removed — same link now lives in the Getting Started card at the top of /home. `.advanced-pointer` CSS (~line 721) is harmless dead style; left in place to keep this diff focused. #} {% if news_intro %}

What's new

Read more →
{{ news_intro | safe }}
{% endif %}
{# P0-2 — Post-CTA modal. Opens after the shared CTA include below has created the token + copied the script. _claude_setup_cta.jinja still owns the token request + clipboard write; this modal layers on top with a 3-step "where to paste" guide. Lives at body level so the home-mock styles don't bleed into it. #} {% if not onboarded %} {% endif %} {# Shared "Setup a new Claude Code" CTA behaviour — provides the JS that POSTs /auth/tokens, copies the rendered instructions to the clipboard, and falls back to a modal when the clipboard API is blocked. The button above (id="setupClaudeBtn") is the primary trigger. #} {% include "_claude_setup_cta.jinja" %} {% endblock %}