# Quick start: package manager for context

This guide walks you through the core Tessl workflow: install the CLI, create or install a skill that teaches your agent a procedure, evaluate its quality, and publish it to your team to share.

**What you need:**

* An AI coding agent (Claude Code, Cursor, Gemini, Codex, Copilot CLI, Copilot in VSCode, etc.)

## Step 1: Install Tessl

{% tabs %}
{% tab title="Native Install" %}

```sh
curl -fsSL https://get.tessl.io | sh
```

{% endtab %}

{% tab title="Homebrew" %}

```sh
brew install tesslio/tap/tessl
```

{% endtab %}

{% tab title="npm (deprecated)" %}

```sh
npm install -g @tessl/cli
```

{% endtab %}
{% endtabs %}

See [detailed installation instructions](/introduction-to-tessl/installation.md) for more options.

Log in and initialize Tessl in your project:

```sh
$ tessl login
$ mkdir my-project && cd my-project
$ tessl init
```

If you don't already have a Tessl account ([sign up here](/introduction-to-tessl/sign-up-for-tessl.md)), you'll be prompted to create one at login.

`tessl init` creates a `tessl.json` manifest and configures your coding agent for MCP support (auto-detects Claude Code, Cursor, Gemini, Codex, Copilot CLI, Copilot in VSCode). See [custom agent setup](/reference/custom-agent-setup.md) for manual configuration.

## Step 2: Install or create a skill

Skills are procedural guides that teach your agent how to perform specific workflows. They activate automatically when relevant - your agent loads them when the task matches the skill's description.

### Option A: Install a skill from the registry

Browse available skills:

```sh
$ tessl search "database migration"
```

Or install a skill directly by name:

```sh
$ tessl install tessl-labs/api-design-patterns
```

Your agent now has access to the skill and will follow the skill procedure when the task matches.

### Option B: Create your own skill

Create a new skill with the interactive wizard:

```sh
$ tessl skill new
```

This creates a directory with a `SKILL.md` file:

```
my-skill/
├── tile.json
└── SKILL.md
```

Edit `SKILL.md` to define your skill:

```markdown
---
name: database-migration-helper
description: When you need to create and manage database migrations.
---

# Database Migration Helper

## Creating a Migration

When creating a new migration:

1. Always include both `up` and `down` migrations
2. Use transactions when possible
3. Test migrations on a copy of production data first

## Best Practices

- Never modify existing migrations that have been applied to production
- Always test rollbacks
- Keep migrations small and focused
```

**Key fields:**

* `name`: The skill identifier (lowercase, hyphens only)
* `description`: When the skill should activate — this is what agents use to decide when to load it, so make it specific

To test locally before publishing, install the skill from its local path:

```sh
$ tessl install file:./my-skill
```

Ask your agent to perform a task that matches the skill's description and verify it follows the procedure.

## Step 3: Evaluate the skill

Tessl provides two complementary ways to evaluate a skill: **reviews** check your skill against structural best practices, and **scenario evals** measure how much the skill improves agent performance on real tasks.

### Review: validate against best practices

Check the skill's format and structure:

```sh
$ tessl skill lint ./my-skill
```

For a scored quality review:

```sh
$ tessl skill review ./my-skill
```

The review produces three scores:

* **Validation** — structural checks: frontmatter, format, line count
* **Implementation** — quality of the skill body: conciseness, actionability, workflow clarity
* **Activation** — quality of the description: how likely agents are to load the skill at the right time

Example output:

```sh
$ tessl skill review ./my-skill

Validation Checks

  ✔ frontmatter_valid - YAML frontmatter is valid
  ✔ name_field - 'name' field is valid: 'database-migration-helper'
  ✔ description_field - 'description' field is valid
  ✔ body_present - SKILL.md body is present
  ✔ body_steps - Step-by-step structure detected

Overall: PASSED (0 errors, 0 warnings)

Judge Evaluation

  Description: 72%
  Content: 85%

Average Score: 78%
```

Aim for a score above 70% before publishing. Use the suggestions in the output to improve your skill. If you trust the suggestions and want to auto-apply them, run:

```sh
$ tessl skill review ./my-skill --optimize
```

To optimize your skill against the improvements.

### Scenario evals: measure agent performance

Scenario evals run your agent on tasks with and without the skill injected, so you can see exactly how much the skill improves performance.

**Generate scenarios from your skill:** First create a workspace, if you haven't already:

```sh
$ tessl workspace create <name>
```

Then generate scenarios from your skill. Scenarios are the tasks that agents are assessed against.

```sh
$ tessl scenario generate ./my-skill --count=5 --workspace=engteam
```

Generation runs server-side. Check progress and download when complete:

```sh
$ tessl scenario list --mine
$ tessl scenario download --last
$ mv ./evals/ ./my-skill/evals/
```

**Run the evaluation:**

```sh
$ tessl eval run ./my-skill
```

To run against a specific model:

```sh
$ tessl eval run ./my-skill --agent=claude:claude-sonnet-4-6
```

You'll receive a URL in the terminal to monitor progress and view results in the Tessl web UI.

**Review the results:**

```sh
$ tessl eval list
$ tessl eval view --last
```

Results show how the agent performed on each scenario with and without the skill. If a scenario fails, adjust the scenario or retry:

```sh
$ tessl eval retry <id>
```

{% hint style="info" %}
To compare your skill across Haiku, Sonnet, and Opus in one guided flow, install the model comparison skill:

```sh
$ tessl install tessl-labs/review-model-performance
```

Then ask your agent: `"Run model comparison evals"`
{% endhint %}

## Step 4: Publish the skill

Once your skill passes review and evals, publish it to your workspace:

```sh
$ tessl skill publish ./my-skill --workspace engteam
```

Skills are published as **private** by default — only members of your workspace can install them. To share with your team:

```sh
$ tessl workspace add-member --username <tessl-username> --role member --workspace engteam
```

Team members can then install the skill in any project:

```sh
$ tessl install engteam/my-skill
```

A review runs automatically on publish and the score appears in the Tessl Registry.

**Publishing updates:** When you update the skill, increment the version in `tile.json` (following [semver](https://semver.org/)) and republish:

```sh
$ tessl skill publish ./my-skill --workspace engteam
```

Team members get the latest version by running `tessl install engteam/my-skill` again.

## Explore more

<table data-view="cards"><thead><tr><th data-type="content-ref"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><a href="/pages/4d1qxFXPDzWDnh0yqk7O">/pages/4d1qxFXPDzWDnh0yqk7O</a></td><td></td></tr><tr><td><a href="/pages/6kmgxqS6hcJgQEvsKwnV">/pages/6kmgxqS6hcJgQEvsKwnV</a></td><td></td></tr><tr><td><a href="/pages/w4mCJWfNiA0DPJIGxaEJ">/pages/w4mCJWfNiA0DPJIGxaEJ</a></td><td></td></tr><tr><td><a href="/pages/XGvzDVsQyf8oVObFOg9G">/pages/XGvzDVsQyf8oVObFOg9G</a></td><td></td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tessl.io/introduction-to-tessl/quickstart-skills-docs-rules.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
