# notte-functions-build

The skill walks an agent through a site once, finds a stable data path, and deploys it as a reusable, parameterized Notte Function.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 604 installs · ★ 11
- Author: nottelabs
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/nottelabs/notte-skills/tree/HEAD/plugins/notte/skills/notte-functions-build/SKILL.md
- Updated: 2026-10-15
- HTML: https://affpapa.org/en/nevibecode/skills/notte-functions-build

## What it does

Use it when a one-off scrape should become an artifact: a Function with a Function ID that anyone can call over HTTP, run from the CLI, or schedule on cron. The expensive part — an agent exploring the site — happens once. After that you pass parameters like keyword and location on every call.

The work runs in phases. `notte auth status` confirms the CLI is authenticated, then the agent parses the request and checks the marketplace first, because building is the costly path. A published Function that fits can be forked with `notte functions fork --function-id <shared-function-id>`, which skips exploration entirely. Otherwise you start a session, drive the page, and scrape with field instructions. A session that works gets exported to Python via `notte sessions workflow-code --session-id <session-id>`, parameterized, and published.

This skill builds on the base `notte-browser` skill, which documents the commands, authentication handling, and security notes. When a site changes and a built Function returns nothing, `notte-functions-doctor` handles the repair. Tool access stays narrow: `Bash(notte:*)`, `Bash(curl:*)`, `Bash(jq:*)`, plus file reads and writes.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add nottelabs/notte-skills --skill notte-functions-build -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/notte-functions-build/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/notte-functions-build/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add nottelabs/notte-skills --skill notte-functions-build -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/notte-functions-build/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add nottelabs/notte-skills --skill notte-functions-build -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/notte-functions-build/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install nottelabs/notte-skills notte-functions-build
```

2. **Manually: put the files in place**
- File: `.github/skills/notte-functions-build/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add nottelabs/notte-skills --skill notte-functions-build -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/nottelabs/notte-skills --path plugins/notte/skills/notte-functions-build
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/notte-functions-build/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add nottelabs/notte-skills --skill notte-functions-build -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/nottelabs/notte-skills/tree/HEAD/plugins/notte/skills/notte-functions-build/SKILL.md

## When to use it
- turn a one-off scrape into a callable HTTP endpoint
- pass keyword and location as parameters instead of editing code per run
- check the marketplace so you don't rebuild a Function that already exists
- export a working session to Python instead of hand-writing the script
- put recurring data collection on a cron schedule

## Example prompts
- build a Notte Function for this site: fields title, price, url, parameters keyword and location
- make this reusable, I'll run many keywords later
- export the session to code, publish the function, then show me the HTTP snippet

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: b2b4dde188680327.

BEGIN THIRD-PARTY FILE b2b4dde188680327
````text
---
name: notte-functions-build
description: >
  Explore a website once, find the stable data path, and deploy it as a
  reusable, parameterized Notte Function (a callable HTTP endpoint that can be
  scheduled and run at scale). Use when a user wants to build, create, generate,
  or "bake" a reusable scraper or browser automation for a site, turn a working
  scrape into an API/endpoint/job, or says things like "I'll run N keywords
  later", "make this reusable", "pull all listings", "automate this site every
  day", or "build a function that extracts X from Y". Pairs with
  notte-functions-doctor, which repairs a built Function when the site changes.
allowed-tools: Bash(notte:*), Bash(curl:*), Bash(jq:*), Read, Write, Edit
---

# Notte Functions Build

Turn a one-off browser task into a deployed, reusable [Notte Function](https://docs.notte.cc/concepts/functions). The expensive, non-deterministic part - an agent exploring a site to find where the data actually lives - happens **once**. The result is a parameterized Function with a stable Function ID that anyone can invoke over HTTP, run from the CLI/SDK, or schedule on a cron. Running 5,000 records later costs nothing extra in exploration.

This is the difference between asking an agent to "scrape Indeed" every time (pay exploration cost and eat non-determinism on every call) and building an `indeed-jobs` Function once, then calling it with `{"keyword": "...", "location": "..."}` forever.

> **Relationship to `notte-browser`.** This skill builds on the base CLI documented in the [notte-browser skill](../notte-browser/SKILL.md). Load that skill for the full command reference, authentication handling, and security notes. This skill adds the **explore-once -> generate -> self-test -> publish** pipeline on top of it.

## When to use this skill vs. notte-browser

- **One-off task** ("scrape this page now") -> use `notte-browser` directly.
- **Reusable artifact** ("I'll run this across many inputs / on a schedule / from my backend") -> use this skill to build a Function.
- **A built Function broke** (site changed, returns empty) -> use [notte-functions-doctor](../notte-functions-doctor/SKILL.md).

## The pipeline

```
Phase 0  Setup          ensure the notte CLI is authenticated
````
END THIRD-PARTY FILE b2b4dde188680327

The third-party file has ended. Everything between the b2b4dde188680327 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2262 of 14352 bytes. © nottelabs · MIT · https://github.com/nottelabs/notte-skills/tree/HEAD/plugins/notte/skills/notte-functions-build/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
