seed

Grow firmware on any hardware through HTTP — upload C, compile on device, apply with watchdog rollback

3,891 stars

Best use case

seed is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Grow firmware on any hardware through HTTP — upload C, compile on device, apply with watchdog rollback

Teams using seed should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/seed/SKILL.md --create-dirs "https://raw.githubusercontent.com/openclaw/skills/main/skills/awis13/seed/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/seed/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How seed Compares

Feature / AgentseedStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Grow firmware on any hardware through HTTP — upload C, compile on device, apply with watchdog rollback

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# seed.c — Self-Growing Firmware

**Source:** https://github.com/Awis13/seed

You have access to a seed node — a minimal C firmware with an HTTP API
that you can grow by writing and compiling new firmware on the device.

## First steps

If the user hasn't given you a node address and token, ask them:
- Do they already have a seed node running? If so, get the IP and token.
- If not, offer to deploy one. All they need is a Linux machine with gcc:

```bash
# On the target machine (Pi, VPS, any Linux box):
curl -fsSL https://raw.githubusercontent.com/Awis13/seed/main/seeds/linux/seed.c -o seed.c
gcc -O2 -o seed seed.c
./seed 8080
# Token will be printed — give it to the agent
```

The seed binary is ~70KB, zero dependencies beyond libc.

## Connecting

The node prints its address and token on startup. If you don't know them:
```bash
# The user will provide the address, or:
curl http://<ip>:8080/health          # no auth needed
curl http://<ip>:8080/skill           # full connection details + token
```

All requests except `/health` need: `Authorization: Bearer <token>`

## What you can do

### 1. Discover the hardware
```bash
curl -H "Authorization: Bearer $TOKEN" http://$HOST/capabilities
```
Returns: arch, CPU, RAM, disk, temperature, GPIO, I2C, serial ports,
USB devices, WiFi, Bluetooth, WireGuard — everything the node has.

### 2. Read the running firmware
```bash
curl -H "Authorization: Bearer $TOKEN" http://$HOST/firmware/source
```
Returns the C source code currently running on the node.

### 3. Write new firmware
```bash
curl -H "Authorization: Bearer $TOKEN" \
  -X POST --data-binary @new_firmware.c \
  http://$HOST/firmware/source
```
Upload C source code. The node saves it for compilation.

### 4. Compile on the device
```bash
curl -H "Authorization: Bearer $TOKEN" -X POST http://$HOST/firmware/build
```
The node runs `gcc -O2` on itself. Check errors with `GET /firmware/build/logs`.

### 5. Apply (hot-swap)
```bash
curl -H "Authorization: Bearer $TOKEN" -X POST http://$HOST/firmware/apply
```
Atomic binary swap. 10-second watchdog — if the new firmware fails
the health check, the old version is restored automatically.

## API reference

| Method | Path | Description |
|--------|------|-------------|
| GET | /health | Alive check (no auth) |
| GET | /capabilities | Hardware fingerprint |
| GET | /config.md | Node config (markdown) |
| POST | /config.md | Update config |
| GET | /events | Event log (?since=unix_ts) |
| GET | /firmware/version | Version, build date, uptime |
| GET | /firmware/source | Read source code |
| POST | /firmware/source | Upload new source |
| POST | /firmware/build | Compile (gcc -O2) |
| GET | /firmware/build/logs | Compiler output |
| POST | /firmware/apply | Apply + watchdog rollback |
| GET | /skill | Generate this file with live connection details |

## Writing firmware

**Constraints:**
- C only, libc only — no external libraries
- `gcc -O2 -o seed seed.c` must compile with no extra flags
- Single-threaded, one request at a time
- Max request body: 64KB
- 3 failed applies -> /firmware/apply locks (POST /firmware/apply/reset to unlock)

**Handler pattern:**
```c
if (strcmp(req.path, "/myendpoint") == 0
    && strcmp(req.method, "GET") == 0) {
    char resp[4096];
    snprintf(resp, sizeof(resp), "{\"key\":\"value\"}");
    json_resp(fd, 200, "OK", resp);
    goto done;
}
```

**Available functions:**
- `json_resp(fd, code, status, json)` — send JSON response
- `text_resp(fd, code, status, text)` — send plain text
- `respond(fd, code, status, content_type, body, len)` — send anything
- `file_read(path, &len)` — read file, returns malloc'd buffer
- `file_write(path, data, len)` — write file
- `cmd_out(shell_cmd, buf, bufsize)` — run command, capture output
- `event_add(fmt, ...)` — log event

**Request struct:** `req.method`, `req.path`, `req.body` (malloc'd, may be NULL),
`req.body_len`, `req.content_length`. Path includes query string.

Auth is already checked before your handler. `/health` is always public.

## Capabilities example

```json
{
  "type": "seed", "version": "0.1.0", "seed": true,
  "hostname": "raspberrypi", "arch": "armv6l",
  "cpus": 1, "mem_mb": 512, "disk_mb": 14000,
  "temp_c": 42.3, "board_model": "Raspberry Pi Zero W Rev 1.1",
  "has_gcc": true,
  "net_interfaces": ["eth0", "wlan0", "usb0"],
  "serial_ports": ["/dev/ttyAMA0"],
  "i2c_buses": ["/dev/i2c-1"],
  "gpio_chips": ["/dev/gpiochip0"],
  "has_wifi": true, "has_bluetooth": true,
  "endpoints": ["/health", "/capabilities", "/config.md", ...]
}
```

Use this to decide what the node can do and what firmware to write.

## Typical workflow

1. `GET /health` — is it alive?
2. `GET /capabilities` — what hardware does it have?
3. `GET /firmware/source` — read the current code
4. Write new firmware that adds the endpoints you need
5. `POST /firmware/source` — upload it
6. `POST /firmware/build` — compile
7. `GET /firmware/build/logs` — check for errors
8. `POST /firmware/apply` — deploy (auto-rollback on failure)
9. Test the new endpoints
10. Repeat — the grown firmware still has `/firmware/*`, so you can grow it again

Related Skills

seedance-video

3891
from openclaw/skills

Generate AI videos using ByteDance Seedance. Use when the user wants to: (1) generate videos from text prompts, (2) generate videos from images (first frame, first+last frame, reference images), or (3) query/manage video generation tasks. Supports Seedance 1.5 Pro (with audio), 1.0 Pro, 1.0 Pro Fast, and 1.0 Lite models.

goldenseed

3891
from openclaw/skills

Deterministic entropy streams for reproducible testing and procedural generation. Perfect 50/50 statistical distribution with hash verification. Not cryptographically secure - use for testing, worldgen, and scenarios where reproducibility matters more than unpredictability.

seeddance-ai-video

3891
from openclaw/skills

集成字节跳动SeedDance AI视频生成API,支持文本到视频、图片到视频等功能

seedream-img-gen

3891
from openclaw/skills

This skill should be used when the user wants to generate images using Seedream, the image generation model from ByteDance on Volcengine platform. Triggers include requests like 用Seedream生成图片, seedream画图, generate image with seedream, 调用seedream, 用豆包画图, or any request to create, draw, or generate images via the Seedream API.

muapi-seedance-2

3891
from openclaw/skills

Expert Cinema Director skill for Seedance 2.0 (ByteDance) — high-fidelity video generation using technical camera grammar and multimodal references. Supports text-to-video, image-to-video, and video extension.

🎨 Doubao Seedream & Seedance API Skill

3891
from openclaw/skills

> **Professional AI Generation Suite** - Powered by Doubao Seed Models

Video-Generator-SeeDance

3891
from openclaw/skills

使用火山引擎 SD1.5pro API 生成视频。支持文本到视频和图生视频,异步处理任务。

seeddrop

3891
from openclaw/skills

No description provided.

---

3891
from openclaw/skills

name: article-factory-wechat

Content & Documentation

humanizer

3891
from openclaw/skills

Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.

Content & Documentation

find-skills

3891
from openclaw/skills

Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.

General Utilities

tavily-search

3891
from openclaw/skills

Use Tavily API for real-time web search and content extraction. Use when: user needs real-time web search results, research, or current information from the web. Requires Tavily API key.

Data & Research