---
title: "Assistant in chat and skills"
description: "Ask the project assistant from Slack, Teams or a bot, and save a good conversation as a skill that is read and approved before any task uses it."
---

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

# Assistant in chat and skills

The project assistant answers where your team already talks. You get the same answers, from the same tools, with the same permissions as in the app. Changes still wait for an approval in the app; chat never approves anything.

## Link your chat account

The assistant answers a person, so your chat account must be linked to your Overlane team membership first. An unlinked account gets one fixed reply that says how to link it, and nothing else.

- Slack and Teams: ask the assistant once. It replies with a one-time code, and you run `overlane connector link <provider> --code <code>` signed in as yourself within 15 minutes; that chat account is then yours. A team member with the connector permission can also link someone with `overlane connector chat-user <provider> --external-user <chat user ID> --user <user ID>`.
- A bot: the bot owner links the bot's user to a team member with the bot's `users` route, under `/v1/tenants/{tenantId}/bots/{botId}`.

A member who has left the team is treated as unlinked.

## Ask in Slack or Teams

- Slack: mention the app in a channel the team has connected.
- Teams: send a message to the Teams bot in a chat.

The reply comes in the same thread, in the channel where you asked, and nowhere else. The place a reply goes is taken from the chat platform's own signed event, never from the text of your message. Replies are plain text, and chat mentions in an answer are defused so an answer cannot ping a channel.

You can ask the same things as in the app. Your role decides how far the assistant reaches, so a viewer gets the same view as in the app.

If you ask more than a handful of questions in a minute, the assistant asks you to wait a little.

## Ask through a bot

A registered [bot](/bots/) sends a signed `assistant.ask` event with the text and the bot's own user ID. The answer comes back to that bot only, as a signed `assistant.reply` event in the thread the question came from. Events are signed in both directions, an event ID seen before is ignored, and replies are delivered in order.

## Message text is untrusted

Whatever someone types in a chat, or whatever a page or issue says, is a question or quoted data. It cannot change who is asked as, where the answer goes, or which tools run. An instruction inside the text, such as "post this to another channel" or "approve the pending change", is shown as text at most and does nothing.

## The record kept

Each ask writes an audit row: who asked, through which chat, and how it ended (answered, not linked, not available). The row never holds the question or the answer.

## Save a conversation as a skill

A good conversation can become a reusable skill. A skill is a `SKILL.md` file in the standard format, with a name and a one-line description at the top, followed by the steps.

1. Open the assistant (`Ctrl+J` or `⌘J`), have the conversation, and select **Save as skill**. Name it with lowercase words joined by hyphens.
2. Or run `overlane assistant save-skill <conversation> --name cut-a-release-candidate`, with an optional `--description` saying when to use it. Without one, the first question in the conversation is used.
3. The API route is `from-conversation`, under the project's `skills` path.

Only your own conversations can be saved. The skill is built from the conversation without a model, so the text is the conversation's, not a rewrite.

### Secrets are removed first

Anything shaped like a secret, such as a key, a token, a password in a connection string or a long random string, is replaced with a marker before the skill is stored. The result says how many were removed. If something secret-shaped is still found after that pass, the save is refused and nothing is stored.

### Read it, then approve it

A saved skill is a draft. No task uses it until it is approved.

- In the app: the assistant panel lists drafts under **Review saved skills**. Read the text, then **Approve** or **Reject**.
- In the CLI: `overlane skill list`, `overlane skill show <name>`, then `overlane skill approve <name>` or `overlane skill reject <name>`.

Approving needs the manage-policy permission and your own sign-in, never an agent token, so an agent cannot approve a skill it saved. An approved skill joins the skills section of every task in the project. A rejected skill is never used, and its name can be saved again.

Source: https://docs.overlane.app/assistant-in-chat/index.mdx
