{% extends "base.html" %} {% block title %}Setup — {{ instance_name or "AI Data Analyst" }}{% endblock %} {% block content %} {% include "_page_chrome.html" %}
{# Value-first intro hero — explains *what* {{ instance_brand }} is before any install step. Renders for both onboarded and not-onboarded users: onboarded analysts get the same product narrative on every visit, just without the "Set up in ~15 min" CTA. Pillars row mirrors the four primary nav destinations (catalog / marketplace / corporate-memory / marketplace?skills) so the value proposition aligns with where the user can act on it. #} {% set display_name = (user.name or (user.email or "").split("@")[0] or "there") %}
Welcome, {{ display_name }}

{{ instance_brand }} is your team's AI workspace.

One place to reach {{ instance_brand }}'s curated data, plugins, skills, and shared memory — so your AI agent stops guessing and starts answering. Curated, versioned, kept current. The system learns from every session and extends coverage so the next question doesn't trip on the same gap.

Think of it as your AI Chief of Staff — it lives in a folder on your computer, gives you access to company data and curated skills, and lets you share your own skills and plugins back to the team.

{% if not onboarded %} Set up in ~15 min → {% endif %} Just browse — no install needed
Data packages

Tables, schema, metric definitions your team has registered — documented business rules.

Plugins

Asana, Jira, Google Workspace, Atlassian, GitHub. Curated & community-built.

Skills

Reusable workflow templates Claude follows — brainstorming, planning, review, debugging. Curated company-wide plus a flea market to share yours.

Memory

Shared analyst knowledge and prior solutions, fed back into Claude's context on demand.

{# Homepage status frame — five counters with 24h/7d toggle. Two gates: (a) operator flag instance.home.show_status_frame / AGNES_HOME_SHOW_STATUS_FRAME (default on, evaluated in router and passed as `status_frame_enabled`); (b) the user being onboarded — fresh users see a clean install-hero before zero-value stats. Router skips `compute_home_stats` (saves the DB hit) when either gate is closed, so `home_stats` is None in that branch. #} {% if status_frame_enabled and onboarded and home_stats %} {% include "_home_stats.html" %} {% endif %} {% 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 %}
First time here

Set up {{ instance_brand }} on your machine

~15 minutes, one time. You'll install one CLI tool, pick a folder, and paste a script we generate for you. After that you have a working AI workspace that knows your team's data. Everything lives in ~/Desktop/{{ workspace_dir }} and can be removed in one command.

{# Progress meta — visual hint that the wizard is bounded ("~15 min, one-time, reversible"). Six steps total when home_automode is enabled, five when it's disabled (the "Launch Claude with auto-approve" step hides via {% if home_automode.show %}). Pre-empt: when more steps land in future iterations, just bump the total_steps default; per-step numbering inside .install-block carries its own count already. #} {% set total_steps = 6 if home_automode.show else 5 %}
Step 1 of {{ total_steps }} ~15 min total One-time setup Reversible — remove with one command
Install Claude Code on your computer

Claude Code is the CLI tool that runs Claude on your machine. {{ instance_brand }} plugs into it. ~3 min.

curl -fsSL https://claude.ai/install.sh | bash
Don't have a terminal open yet? On macOS, press + Space, type Terminal, hit Enter. On Windows, press the key, type PowerShell, hit Enter.

Once it finishes, verify with claude --version, then sign in with claude (one-time OAuth in your browser). Don't have a Claude license yet? Here's how to get one (Pro / Max 5× / Max 20× / Enterprise — Enterprise is the option for Finance and Legal).

Pick a folder for {{ instance_brand }}

This is where {{ instance_brand }} — and all your AI projects — will live. ~1 min.

My recommendation: put it on your Desktop. Desktop is easy to see in Finder/Explorer and easy to find from anywhere (~/Desktop/{{ workspace_dir }} on macOS, %USERPROFILE%\Desktop\{{ workspace_dir }} on Windows). I keep mine there because I open it 10× a day. Your home folder is fine too — the install will work anywhere.
mkdir -p ~/Desktop/{{ workspace_dir }} && cd ~/Desktop/{{ workspace_dir }}
What does mkdir -p do? It creates a folder. The -p just means "don't complain if it already exists." After this command, you have an empty folder called {{ workspace_dir }} on your Desktop. You can verify by opening Finder/Explorer and looking on your Desktop — it'll be there.
{# Step 3 — open a terminal inside the workspace folder. No shell command here: this step is just the OS-level "you are now standing in the right directory" reassurance, mirroring the design spec's Step 3. Step 2's `cd` already lands the current shell here; this step covers the case where the analyst closes that terminal between steps. #}
Open a terminal inside that folder

The terminal is how you tell Claude what to do. You need to "be in" the {{ workspace_dir }} folder before you launch Claude. ~1 min.

Two ways to get there. Pick whichever feels easier.
  1. Drag-and-drop (easy). Open Terminal. Type cd followed by a space. Then drag the {{ workspace_dir }} folder from your file browser right onto the Terminal window — it pastes the path for you. Hit Enter.
  2. Type the path (faster). See the command below.
cd ~/Desktop/{{ workspace_dir }}
What does cd mean? "Change directory" — like double-clicking into a folder, but in the terminal. After this command, every command you type happens inside the {{ workspace_dir }} folder.
$ pwd /Users/yourname/Desktop/{{ workspace_dir }}

(Optional: run pwd to print the path you're currently in. If it ends in /Desktop/{{ workspace_dir }}, you're in the right place.)

{% if home_automode.show %}
Launch Claude with auto-approve on

The next step pastes a setup script that runs ~20 shell commands. Launching Claude with the permission-skip flag lets it complete without per-command Yes/No prompts.

claude --dangerously-skip-permissions
Session-scoped — drops on next plain claude. Safe here because the script you paste in the next step is generated by this server and ends after a fixed sequence; the flag does not weaken future Claude sessions. Prefer reviewing each command? Run plain claude and press Shift + Tab to cycle on auto-accept edits (default → auto-accept edits → plan mode; footer shows ⏵⏵). Covers file edits, not Bash — expect ~20 prompt clicks during the next step.

Persistent YOLO (allowlisted): see YOLO mode on /setup-advanced — pairs --dangerously-skip-permissions with a reviewed ~/.claude/settings.local.json allowlist.
Welcome to Claude Code! What can I help you with? >

When you see the > prompt, you're ready for the next step.

{% endif %}
Get the install script and paste it into Claude

Click the button below. {{ instance_brand }} generates a one-time install script (with a 90-day login token) and copies it to your clipboard. Then paste it into the Claude prompt from Step 4 (+V on macOS, Ctrl+V on Windows) and hit Enter. The script installs ~20 things (the marketplace, your team's plugins, data package definitions, hooks that keep everything in sync) into ~/Desktop/{{ workspace_dir }}. ~30 sec to copy; ~5 min to run.

Token valid 90 days · 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.
You're done when the script finishes and {{ instance_brand }} auto-detects your first agnes pull (~30 seconds after the script ends). This page will update on its own.
{# Step 6 — Optional one-word shortcut. Mirrors the design spec's final step: a shell alias that drops the analyst into the workspace folder and launches Claude with a single keyword. Pure quality-of-life polish, gated by an inline
so the wizard stays compact for analysts who just want the default `claude` invocation. #}
Optional: create a one-word shortcut for next time

So you can stop retyping the long flag and stop typing cd. Adds a shell function that both changes into your {{ workspace_dir }} folder and launches Claude — one word, anywhere on your machine. ~30 seconds.

Pick a permission level:

{# AUTO mode panel — `--permission-mode auto` is the right default. #}

--permission-mode auto — auto-approves edits and safe read-only commands; still asks before anything destructive. Right default for most people.

echo '{{ workspace_dir | lower }}() { cd ~/Desktop/{{ workspace_dir }} && claude --permission-mode auto "$@"; }' >> ~/.zshrc && source ~/.zshrc

Now typing {{ workspace_dir | lower }} from any terminal hops into the {{ workspace_dir }} folder and launches Claude in auto mode. Same on day 1 as day 100.

{# YOLO mode panel — `--dangerously-skip-permissions` skips every prompt. #}
Bash users: swap ~/.zshrc for ~/.bashrc. The shortcut is reversible — open the rc file and delete the function line to remove it.
The install bundled a curated security allowlist — review it before going further. {{ instance_brand }}'s setup script installed a reviewed ~/.claude/settings.local.json for you, with sensible defaults: read freely, run common dev tools, gate destructive ops. This is your actual safety net — the auto / YOLO mode is only safe because of it.

Open the file (open ~/.claude/settings.local.json on macOS, or in VS Code) and skim what's allowed and what's gated. Add or remove rules as you learn what you trust. More on the allowlist →
{# Setup-finish strip — flex row matching design spec: hourglass + "Waiting for first agnes pull" on the left, "Already set up? Mark me as onboarded →" link on the right. Auto-detect lands via agnes-init's POST to /api/me/onboarded; the right-aligned link is the manual fallback. JS hooks `self-mark-btn`. #}
Waiting for your first agnes pull — auto-detects within ~30 sec of the install script finishing. Already set up? Mark me as onboarded →
{% endif %} {% if onboarded %} {# Offboarding escape hatch shown only after the hero has disappeared. Lets the analyst (e.g. after wiping ~/{{ workspace_dir }}) 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 was previously rendered HERE (between the offboard strip and Overview) as a full-card
. Moved up to render BEFORE the install-hero as a collapsed-by-default
— see the block right after `{% if not onboarded %}` near line ~1357. #} {# First-session story — five-beat narrative showing what the analyst will actually see on their first run. Terminal frames design the real output. Renders for both onboarded (reference / refresher) and not-onboarded (preview of what's coming) so the visual language stays consistent across visits. #}
Your first session

What happens when you launch {{ instance_brand }}

A real session, end-to-end. You'll see exactly what appears on screen and what to type at each step. No prior terminal experience needed.

The whole loop is five beats: launch → pick a project → Claude loads its memory → ask anything → close when done. Every part of {{ instance_brand }} — plugins, data packages, skills, shared memory — quietly does its job inside this loop. You don't have to manage them.
1

Launch your workspace

Open a terminal — in VS Code, press +` (Mac) or Ctrl+` (Windows). On macOS you can also open the standalone Terminal app from Spotlight.

Type one word{{ workspace_dir | lower }} (or claude if you skipped Step 6) — and hit Enter.

~/Desktop/{{ workspace_dir }}  —  zsh
${{ workspace_dir | lower }}

That single word jumps into your ~/Desktop/{{ workspace_dir }} folder and launches Claude in one go — same on day 1 as day 100. No cd, no flags, no setup to remember. (The shortcut was installed in Step 6 of the setup above.)

2

{{ instance_brand }} greets you with today's menu

Claude reads your recent activity and shows the five projects you've touched most recently. Your screen looks something like this:

claude — {{ instance_brand }}
2026-05-20 What would you like to do? [1] Talk to {{ instance_brand }} — workspace questions, setup, admin [2] New project — scaffold a new project [3] Switch to recent project: a. RevenueAnalysis (2 hours ago) b. WeeklyReview (today) c. Onboarding (1 day ago) d. OpsDb (4 days ago) e. HRHandShake (5 days ago) [4] Switch to another project — browse the full registry >

The recent-projects list updates every session based on what you actually worked on. Pick a code (like 3a) or just type free text — "open the news project" or "keep working on the marketing plan" work the same way. Claude figures out the intent.

3

Pick a project — Claude loads its memory

Type your choice and hit Enter. Claude switches into that project's folder, reads its CLAUDE.md (the project's living briefing doc), checks for new inputs you've dropped in, and tells you the state of play.

claude — {{ instance_brand }}
>3a Switched to RevenueAnalysis — quarterly revenue review program. Loaded: CLAUDE.md, 8 knowledge files, 4 active decisions Last session: yesterday, 4:12 PM — "Q1 close review" One unprocessed input detected: inputs/Q1_close_DRAFT.pdf (3.4 MB) Want me to process it into knowledge/ now? >

Claude now has full project context loaded — past decisions, key numbers, ongoing work, who's involved. You don't have to re-explain anything every session. New files in inputs/ are auto-detected so nothing gets forgotten on your hard drive.

4

Ask anything — Claude is now scoped to that project

Plain English. No commands to memorise. Claude pulls from the project's files, your registered data packages, installed plugins, and the team's shared memory — quoting exact sources as it goes.

claude — {{ instance_brand }}
>what's the latest on the Q1 close? Give me the headline numbers and the open risks. Reading knowledge/q1-close-input.md Reading temp/v4/close.md Q1 close summary — v4, Apr 2026 • Revenue: $124.3M → $131.0M (+5.4% QoQ) • Gross margin: 62.1% → 63.4% • 4 markets above plan, 2 below • Customer churn flat at 6.1% Open risks • FX hedging assumption is 6 weeks old — needs refresh • No DRI yet on the EMEA segmentation prerequisite • Q2 forecast model still in review Want me to draft a 1-page brief, or dig into one of these? >

Cited sources are clickable paths — tap to open the actual file in your editor. If Claude needs data from a remote system, your registered plugins kick in silently. No copy-pasting between tabs.

5

When you're done, just close — everything's saved

Type /exit or close the terminal window. {{ instance_brand }} saves the session, captures any new knowledge into the project's memory, and puts today's project at the top of tomorrow's menu.

claude — {{ instance_brand }}
>/exit Session saved — 12 prompts, 4 files referenced. RevenueAnalysis will appear as "today" in your menu tomorrow. See you next time. $

Nothing to clean up, no "save your work" prompt, no version to remember. Next time you type {{ workspace_dir | lower }}, this project is right at the top of the recent list — and Claude remembers every decision, file, and follow-up from today.

What leaves your machine. Session telemetry — prompts, tool calls, and tool responses — flows back to the central catalog so the team can analyse failure patterns. Raw data rows you query locally stay on your machine; only the prompt/response transcript travels. Need a session off the record? Toggle Private in Claude Code (type /agnes-private) to disable telemetry for that chat — nothing from that session reaches the catalog.

That's the whole loop. One word to launch — pick a project — ask — close. Everything else (plugins, data packages, skills, shared memory) is Claude doing more for you inside the same five-beat rhythm. You learn it once on day 1 and never re-learn it.
{# 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 %} {# Surfaces — four places to use {{ instance_brand }}. Mirrors the design spec's "Where you can use it" section: VS Code (RECOMMENDED), Terminal, Claude Desktop, Cowork (claude.ai). Each card carries a short pitch + an uppercase eyebrow (DAILY USE / QUICK ACCESS / CONNECT IT) + a numbered step list + a one-liner "Best for". The .home-usage class is kept on the wrapper so existing test assertions and the legacy `.home-usage-grid` mobile media query still apply. #}
Where you can use it

Four places, one workspace

Same plugins, same data access, same credentials — pick whichever fits the moment. VS Code is the most comfortable for most people; the others are useful when the situation calls for it.

VS Code RECOMMENDED

The best place to live in {{ instance_brand }}. Multi-panel layout, built-in file editor, diff viewer, and a terminal Claude runs in — all in one window. Easier than a bare terminal for most people.

VS Code with terminal-centric layout
EXPLORER TERMINAL 1 TERMINAL 2 TERMINAL 3
Screenshot pending — drop at app/web/static/img/vscode-layout.png
Click to enlarge — recommended layout
DAILY USE
  1. Open VS Code → File → Open Folder → select your ~/Desktop/{{ workspace_dir }} folder.
  2. Open terminal: +` (macOS) or Ctrl+` (Windows).
  3. Right-click the terminal tab → "Move Terminal into Editor Area". Split with +\ — one panel for the conversation, one for diffs.
  4. Type claude (or {{ workspace_dir | lower }} if you set the Step 6 shortcut). The welcome menu fires — pick a project or describe what you want.
Full step-by-step guide: Open VS Code setup guide →

Terminal

Quick access — when you don't want a whole IDE open. Same Claude, same plugins, just bare. Best for short questions and one-off scripts.

QUICK ACCESS
  1. Open Terminal (macOS: +Space, type Terminal) or PowerShell (Windows: , type PowerShell).
  2. Go to your folder: cd ~/Desktop/{{ workspace_dir }}
  3. Type claude (or {{ workspace_dir | lower }}) and hit Enter.
  4. Welcome menu fires — same as in VS Code.
2026-05-20 What would you like to do? [1] Talk to {{ instance_brand }} — workspace questions [2] New project — scaffold a new project [3] Switch to recent project: a. RevenueAnalysis (2 hours ago) b. WeeklyReview (1 day ago) c. Onboarding (3 days ago) [4] Browse full registry
Best for: quick questions, scripts, when you already have a terminal open from something else.

Claude Code (Desktop app)

The Claude Code agent running inside the Claude Desktop app instead of in a terminal. You point it at your {{ workspace_dir }} folder and work from there with a native UI for diffs, file tree, and chat.

CONNECT IT
  1. Install Claude Desktop from claude.ai/download.
  2. Sign in with the same account you use for Claude Code.
  3. Open the {{ workspace_dir }} folder on your Desktop in Claude Code (File → Open Folder).
  4. Everything in the workspace — plugins, skills, data packages, memory — is available there automatically.
Best for: people who prefer a native UI to a terminal. Same Claude Code engine, same workspace.

Cowork (claude.ai) INSTRUCTIONS NEEDED

Claude Cowork — the collaborative workspace on claude.ai. Currently {{ instance_brand }} supports skills only here (no data packages or plugins yet).

⚠️ This section is missing detailed instructions. Add the step-by-step here:
  • How to enable {{ instance_brand }}'s skills in Cowork (URL, sign-in, where to paste config)
  • What does and doesn't sync (skills ✅, plugins ❌, data packages ❌, memory ❌)
  • When to use Cowork vs the other surfaces
  • Known limits / roadmap for plugin + data package support
Status: partial support — skills only. Full instructions to be written.

For the deepest integration, create every project under ~/Desktop/{{ 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. Anything outside {{ workspace_dir }}/ is invisible to the platform.

{# Connectors `
` block removed — the install-hero's Step 4 clipboard payload (rendered via `_claude_setup_instructions.jinja` inside the "Or paste manually" fallback) already inlines the same Asana / GWS / Atlassian prompts from app/web/connector_prompts.py via app/web/setup_instructions.py::_connectors_block. Showing them a second time as standalone cards duplicated UX without adding reach — the install script visits them all in sequence. Brief mention in the install-hero lead paragraph above covers the benefits ("third-party tools (Asana, Google Workspace, Atlassian)"); deep ops live in /setup-advanced. #}
{{ instance_brand }} workspace

Explore your workspace

Jump into any part of {{ instance_brand }} — what your team has registered, what's curated company-wide, and what's shared by your colleagues.

{# 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" %} {# VS Code screenshot lightbox — full-bleed overlay; click to close. #} {% endblock %}