# Give instructions (/ai-teammates/give-instructions)



Instructing a teammate isn't one thing — it's four separate levers, each suited to a different kind of change. Pick the right one and you stop re-explaining yourself every time.

<LivePreview component="AssistantProfile" />

## What shapes how a teammate behaves? [#what-shapes-how-a-teammate-behaves]

* **Template** — the role, tone, and working style set when you hire them. See [Hire an AI teammate](/ai-teammates/hire-an-ai-teammate).
* **Skills** — what they can actually touch beyond the conversation: a repo, the web, an API.
* **Profile** — the name and bio that describe this specific teammate to your team and to itself.
* **Memory** — facts and preferences they pick up automatically as you work together. See [How AI teammate memory works](/ai-teammates/memory).

A template gets you most of the way for a generic role. It stops being enough in two situations: the job needs to reach something outside the conversation — a real codebase, a real ticketing system — which no amount of wording fixes, only a skill does; or the job is generic but this specific teammate isn't — your payments reviewer needs to know it's payments, not just "code reviewer." That's what Skills, Profile, and Memory are for, and what the rest of this page covers.

## How to shape a teammate's behavior [#how-to-shape-a-teammates-behavior]

<Steps>
  <Step>
    ### Step 1: Install skills for what the template doesn't cover [#step-1-install-skills-for-what-the-template-doesnt-cover]

    A teammate without skills can read and write messages and reason about text, but it can't touch anything outside the conversation — it can't check today's exchange rate, open a real PR, or send the email it just drafted. A skill closes exactly one of those gaps at a time, scoped to the teammate you install it on.

    Open the teammate's DM, click the gear icon, then **Skills**, and install from the marketplace, a GitHub URL, or a local file. A code-reviewer template doesn't ship GitHub access by default — install a GitHub skill so it can read the actual diff instead of the pasted snippet you'd otherwise have to keep copying in.

    <LivePreview component="AssistantSkills" />

    See [Skills & Plugins](/connect/skills-and-plugins) for the full install flow and how to read a skill's permissions before adding it.
  </Step>

  <Step>
    ### Step 2: Write a bio that earns its keep [#step-2-write-a-bio-that-earns-its-keep]

    Open **Teammate Settings → Profile**. The bio is the teammate's self-introduction — it's what your team sees when deciding whether to bring this teammate in, and what the teammate itself reads as a reminder of its job. A bio that just restates the template's role tells nobody anything new:

    **Vague:**

    > Helps with engineering stuff.

    **Specific:**

    > Reviews PRs on the payments service for correctness and idempotency before merge. Bring me in early on anything touching webhook retries or Stripe events.

    The second version does two jobs a template can't: it names the actual system, and it tells a teammate *when* to loop this teammate in, not just what they're generically good at.

    <LivePreview component="CreateAssistantPage" scenario="{ focus: &#x22;profile&#x22;, initialState: { start: &#x22;template&#x22;, templateRef: &#x22;@helio/code-reviewer&#x22;, name: &#x22;Payments Reviewer&#x22;, bio: &#x22;Reviews PRs on the payments service for correctness and idempotency before merge. Bring me in early on anything touching webhook retries or Stripe events.&#x22; } }" />

    See [Edit an AI teammate's settings](/ai-teammates/edit-settings) for where every Profile field lives.
  </Step>

  <Step>
    ### Step 3: Steer day-to-day work in messages [#step-3-steer-day-to-day-work-in-messages]

    For anything task-specific, just say it in the message where you're asking for help — your teammate reads the full thread before acting, so it doesn't need to be repeated elsewhere. Be specific about what they're working on, not just the task itself:

    **Vague:**

    > Review this code.

    **Specific:**

    > Review this PR for correctness and test coverage first, readability second. We're on a TypeScript + React frontend with a Go backend — flag anything that isn't idiomatic.

    <LivePreview
      component="AssistantChat"
      assistantName="Alex"
      scenario="{ messages: [
    { author: &#x22;user&#x22;, text: &#x22;Review this PR for correctness and test coverage first, readability second. We're on a TypeScript + React frontend with a Go backend — flag anything that isn't idiomatic.&#x22; },
    { author: &#x22;assistant&#x22;, text: &#x22;On it — correctness and test coverage first, readability as a separate pass. I'll flag anything that doesn't match TypeScript/React or Go conventions and call out test gaps by file.&#x22; }
  ] }"
    />
  </Step>

  <Step>
    ### Step 4: Let memory carry forward what shouldn't need repeating [#step-4-let-memory-carry-forward-what-shouldnt-need-repeating]

    A message only steers the task in front of you. If something should hold for every future task — your stack, a team convention, a standing preference — tell your teammate once and it becomes memory instead of a one-off instruction you'll type again next week.

    See [How AI teammate memory works](/ai-teammates/memory) for how memory is built, viewed, and corrected.
  </Step>
</Steps>

<Callout type="info">
  Messages and memory work together, on top of the baseline the template, skills, and profile set: a message steers one task, memory makes a fact stick for every task after it.
</Callout>

<Cards>
  <Card title="Share context" href="/ai-teammates/share-context" description="Give your teammate files, docs, and background knowledge." />

  <Card title="How AI teammate memory works" href="/ai-teammates/memory" description="How your teammate remembers and uses context over time." />

  <Card title="Skills & Plugins" href="/connect/skills-and-plugins" description="Install real capabilities on a teammate." />
</Cards>
