Skip to content

Project Chat

Project Chat is the mode used for any conversation tied to a specific Amplify project — a codebase you've opened, a starter template you've spun up, or a workspace you're actively building in. Unlike standalone chats, project chats always run in agent mode: the chat ↔ agent toggle is not available, because the agent system prompt is mandatory when working on real code.

Why project chat is always agent mode

A project chat needs everything chat mode strips out:

  • <project_context> — the project's file tree, open files, and runtime state. Without it the AI can't reason about your codebase.
  • The full tool setinject_template, sandbox read/write/exec, package install. Building requires mutation.
  • All skillsreact-best-practices, mobile-app-development, webapp-builder, etc. The right skill has to be discoverable or output quality collapses.
  • The planning engine — multi-step builds ("add auth, then a dashboard, then wire them up") need decomposition + sub-chat workers + FlowVerifier.

Removing any of these to save tokens would make project chats useless — you'd be talking about a project without the context or tools to act on it. So the toggle is hidden entirely in project chats; the full agent system prompt is always attached.

The toggle is hidden, not broken

If you've used the chat ↔ agent switch in a standalone chat and don't see it in a project chat, that's intentional. Project chats opt out of chat mode by design. To use chat mode, start a new (non-project) chat from the home screen.

What's in the project context

The <project_context> block injected into the system prompt includes:

FieldSourcePurpose
File treesandbox readdir walkLets the AI navigate the codebase without reading every file
Open fileseditor stateCurrently-focused code the AI should reason about
Runtime stateWebContainer / DockerInstalled packages, running dev server, env vars
.amplify/ignoreproject rootFiles excluded from context (secrets, build output)
.amplify/promptproject rootProject-specific instructions appended to the system prompt

The selectStarterTemplate flow (see Templates) bootstraps this context the moment you pick a template — it clones the repo, installs deps, and starts the dev server so the AI has a live, runnable project from turn one.

Per-project skill filtering

Not every skill is relevant to every project. A Vue project doesn't need the React skill; an API backend doesn't need react-native-component. Amplify filters skills per project via getProjectSkills(projectId) from the projectSkillsStore.

typescript
// Per-project skills: the project can toggle skills on/off in settings.
// Only enabled skills appear in <available_skills> for that project's chats.
const skills = getProjectSkills(projectId);
// → ["react-best-practices", "frontend-design", ...] (project's enabled subset)

You can toggle skills on or off per project in the project Settings panel. Disabling a skill for a project removes it from that project's <available_skills> block — it won't be discovered or loaded, saving tokens on every turn of that project's chats. Other projects are unaffected.

  • How per-project filtering interacts with the skill directories

    Skills are still loaded from the three directories (app/lib/skills/, design/skills/, user_skills/) globally by the SkillLoader. The per-project filter is applied after loading: getProjectSkills(projectId) returns the intersection of loaded skills and the project's enabled list. So:

    • A skill must be installed (in one of the 3 dirs) and enabled for the project to appear.
    • Uninstalling a skill removes it from all projects.
    • Disabling a skill for one project keeps it available everywhere else.

    See Built-in Skills → Skill directories for the loading process.

Memory & vector search per project

Project chats also have access to Amplify's Vector Database for long-term memory scoped to that project. This lets the AI recall decisions, file relationships, and prior fixes across sessions — even after the WebContainer resets.

  • Context persistence: BM25 + embeddings over the project's files and past chat turns, stored in IndexedDB.
  • Project-scoped: memories are keyed by projectId, so switching projects swaps the memory store.
  • Budget-aware: a 70% context-budget threshold controls how much memory is injected per turn (see AI Workflow).

This is why project chats are heavier on tokens than standalone chats — but also why they're dramatically more useful for real engineering work.

When to use project chat

For quick questions that don't need the codebase, start a standalone chat (which defaults to Chat Mode) instead — it'll be cheaper and just as accurate for pure Q&A.

Next: Rate Limiting