> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# Develop and test locally

:::info

**Takeaway**
Install a plugin from your filesystem with `tessl install file:./my-plugin`, test it with your agent, then edit and reinstall to iterate. Nothing is published until you choose to.

:::

You usually want to test a plugin before it reaches the registry. Tessl installs plugins directly from your filesystem, so you can iterate on the content and confirm it works with your agent first. This is also how you build context that stays with one codebase, or plugins for different parts of a monorepo.

:::info

This whole loop is also handled by your agent: `tessl install tessl/plugin-creator`

:::

## The loop

### 1. Create

Scaffold a plugin, seeding a first skill:

```bash
tessl plugin new --name engteam/my-plugin --workspace engteam --skill --skill-name my-skill --skill-description "When ..." --path ./my-plugin
```

`engteam` is a stand-in workspace; run `tessl workspace list` and use one of yours.

Add any further skills by authoring `my-plugin/skills/<name>/SKILL.md` directly. Use `tessl skill new` only for a standalone skill, not inside a plugin directory, where it would nest a separate package.

### 2. Install from the filesystem

```bash
tessl install file:./my-plugin
```

The plugin is now available to your agent, exactly as an installed one would be.

### 3. Test with your agent

- **Skills**: trigger the skill and confirm it runs and produces what you expect.
- **Rules**: ask the agent to write some code and check it follows the rule.
- **MCP servers**: confirm the server appears in the agent's tools.

### 4. Validate

Lint the structure, then pack it and inspect the archive to confirm every intended file ships. Lint alone can pass on a plugin that would drop content when packaged, so check both:

```bash
tessl plugin lint ./my-plugin
tessl plugin pack ./my-plugin --output /tmp/check.tgz
tar tzf /tmp/check.tgz
```

### 5. Iterate

Edit the content, reinstall, and test again. Repeat until it behaves.

## Plugin structure

```
<plugin-dir>/
├── .tessl-plugin/
│   └── plugin.json
├── skills/<skill-dir>/SKILL.md
├── rules/
│   └── standards.md
└── evals/
    └── scenario-1/
        ├── task.md
        ├── criteria.json
        └── scenario.json
```

- `.tessl-plugin/plugin.json` points at your content. If a skill sits at the plugin root use `"skills": ["."]`; if it sits under `skills/<name>` use `"skills": ["./skills/<name>"]`, or rely on the `./skills/` convention.
- `evals/` is present only once you have generated [scenarios](/improving-your-skills/overview-improving-skills-and-plugins.md).

The complete `.tessl-plugin/plugin.json` reference is in [Configuration files](/reference/configuration.md).

## Next

- [Publish and update](/creating-skills-and-plugins/publish-and-update.md) - share the plugin once it works locally.
- [Improving your skills](/improving-your-skills/overview-improving-skills-and-plugins.md) - prove and improve quality before you rely on it.
