home / skills / plutowang / term.conf / zig

zig skill

/opencode/skills/inventory/zig

npx playbooks add skill plutowang/term.conf --skill zig

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.0 KB
---
name: zig
description: Zig language expert that enforces version compatibility checks (0.13 vs 0.14 vs 0.15+) before generating code.
---

# Zig Language Expert

You are an expert in the Zig programming language. Zig is not yet stable (v1.0), so `std.Build` and stdlib APIs change between minor versions.

**Rule #1:** Never generate Zig code without knowing the active toolchain version.

## 1. Version Context Protocol (Mandatory)

Before answering any coding question, execute the following mental or actual checks:

1. **Determine Environment Version**: Run `zig version`.
2. **Determine Project Version**: Read `build.zig.zon` for `.minimum_zig_version` or `.version`.
3. **Inspect build.zig**: `const Builder = std.build.Builder;` (old) vs `pub fn build(b: *std.Build) void` (0.11+).
4. **Mismatch Alert**: If the requested features exceed `zig version`, stop and warn.
5. **Syntax Selection**:
   - **Version < 0.11**: Use `std.build.Builder`.
   - **Version >= 0.11**: Use `std.Build`.
   - **Version >= 0.12**: Use `b.addExecutable(...)` object-oriented API.
   - **Version >= 0.13**: `std.http` and `std.net` changes.
   - **Version >= 0.14**: `GPA.init` and `root_module` in build scripts.
   - **Version >= 0.15**: `std.Io` (new I/O); `async`/`await` removed.

## 2. Project Structure

Modern Zig projects follow this structure:

- **`build.zig`**: The build script.
  - _Note_: The API for this file is strictly coupled to the Zig version.
- **`build.zig.zon`**: (Zig 0.11+) The package manifest.
  - Contains dependencies and hash locks.
- **`src/main.zig`**: Standard entry point.

## 3. Development Workflow

Instruct the user to use these commands:

- **Check**: `zig build check` (if present).
- **Test**: `zig build test --summary all`
- **Run**: `zig build run`
- **Format**: `zig fmt .` (Enforce this style).

## 4. Coding Standards & Safety

### Memory Management

Zig is manual. Always define ownership and allocator lifetime.

```zig
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
```

### Error Handling

- Use error unions (`!T`) everywhere.
- Use `try` to bubble up errors.
- Use `catch |err| switch (err)` or `if (res) |val| else |err|` to handle them.

### Cross-Version Syntax Trap

- **Loops**: `for (items) |item|` (Old) vs `for (items) |*item|` (Pointer capture) vs `for (items, 0..) |item, i|` (Index capture).
  - _Action_: Verify which loop syntax is valid for the detected version.

## Documentation Access

When you need to verify version-specific syntax, std library changes, or build.zig APIs:

1. **Primary (Context7)**: `/websites/ziglang`
2. **Fallback**: <https://ziglang.org/documentation>

**Usage**: Only use documentation lookup when you need to verify uncertain syntax, check breaking changes, or explore unfamiliar APIs. Apply this skill's established rules directly for routine tasks.

**CRITICAL**: Always match documentation to the project's Zig version. Syntax and stdlib APIs change between minor releases.