examples/nexau_building_team/skills/nexau-agent/SKILL.md
Guide for building NexAU agents from scratch. This skill should be used when implementing a new NexAU agent — including YAML configuration, system prompt, tool definitions, tool bindings, entry point scripts.
npx skillsauth add nex-agi/nexau nexau-agentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides the procedural knowledge and reference material needed to implement NexAU agents correctly and efficiently.
NexAU Documentation: The
docs/directory contains the full user-facing documentation for NexAU. Start withdocs/index.mdfor an overview,docs/getting-started.mdfor setup,docs/core-concepts/for fundamentals (agents, tools, LLMs), anddocs/advanced-guides/for topics like skills, hooks, MCP, sandbox, transports, and session management.
Before writing any code, read the RFC or requirements document thoroughly. Identify:
A standalone agent follows this layout:
agent_name/
├── agent_name.yaml # Agent configuration
├── systemprompt.md # System prompt (Jinja2 or plain string)
├── start.py # Entry point script
├── tools/ # Tool definitions
│ ├── read_file.tool.yaml
│ ├── write_file.tool.yaml
│ └── custom_tool.tool.yaml
├── skills/ # Optional skills
│ └── skill-name/
│ └── SKILL.md
└── custom_tools/ # Custom tool implementations (if any)
└── custom_tool.py
Refer to references/agent-yaml-reference.md for the complete field reference. Key points:
${env.VAR_NAME} for environment variable substitution (LLM keys, sandbox paths)system_prompt_type: jinja when using template variables like {{ date }}system_prompt_type: string for plain text promptstool_call_mode: structured for provider-native structured tool calling./tools/tool.tool.yaml./systemprompt.mdTemplate available at: assets/templates/agent.yaml
For each tool the agent needs:
references/builtin-tools-reference.md.tool.yaml definition and a Python implementationRefer to references/tool-yaml-reference.md for the tool YAML schema.
Template available at: assets/templates/tool.tool.yaml
Follow the conventions in references/system-prompt-guide.md:
{{ date }}, {{ username }}, {{ working_directory }}Template available at: assets/templates/systemprompt.md
For standalone agents, use Agent.from_yaml().
Template available at: assets/templates/start.py (standalone)
python {THIS_SKILL_FOLDER}/scripts/validate_agent.py path/to/agent.yaml
--recursive to also validate sub-agent configs--json for machine-readable outputpython -c "import ast; ast.parse(open('start.py').read())"python -c "from nexau import Agent"llm_config:
model: ${env.LLM_MODEL}
base_url: ${env.LLM_BASE_URL}
api_key: ${env.LLM_API_KEY}
tools:
- name: read_file
yaml_path: ./tools/read_file.tool.yaml
binding: nexau.archs.tool.builtin.file_tools:read_file
skills:
- ./skills/skill-name
Use stop_tools to define tools that halt the agent loop when called:
stop_tools: [complete_task] # For task-based agents
stop_tools: [ask_user] # For interactive agents
tracers:
- import: nexau.archs.tracer.adapters.in_memory:InMemoryTracer
All builtin tool YAML configs are located under builtin_tools/tools/ in this skill folder. When adding a builtin tool to an agent, copy the YAML to your agent's tools/ directory and set the binding path accordingly.
| Tool | Binding | Config YAML |
|------|---------|-------------|
| read_file | nexau.archs.tool.builtin.file_tools:read_file | builtin_tools/tools/read_file.tool.yaml |
| write_file | nexau.archs.tool.builtin.file_tools:write_file | builtin_tools/tools/write_file.tool.yaml |
| replace | nexau.archs.tool.builtin.file_tools:replace | builtin_tools/tools/replace.tool.yaml |
| search_file_content | nexau.archs.tool.builtin.file_tools:search_file_content | builtin_tools/tools/search_file_content.tool.yaml |
| glob | nexau.archs.tool.builtin.file_tools:glob | builtin_tools/tools/Glob.tool.yaml |
| list_directory | nexau.archs.tool.builtin.file_tools:list_directory | builtin_tools/tools/list_directory.tool.yaml |
| Tool | Binding | Config YAML |
|------|---------|-------------|
| google_web_search | nexau.archs.tool.builtin.web_tools:google_web_search | builtin_tools/tools/WebSearch.tool.yaml |
| web_fetch | nexau.archs.tool.builtin.web_tools:web_fetch | builtin_tools/tools/WebFetch.tool.yaml |
| Tool | Binding | Config YAML |
|------|---------|-------------|
| run_shell_command (sync) | nexau.archs.tool.builtin.shell_tools:run_shell_command | builtin_tools/tools/run_shell_command_sync.tool.yaml |
| Tool | Binding | Config YAML |
|------|---------|-------------|
| write_todos | nexau.archs.tool.builtin.session_tools:write_todos | builtin_tools/tools/write_todos.tool.yaml |
| complete_task | nexau.archs.tool.builtin.session_tools:complete_task | builtin_tools/tools/complete_task.tool.yaml |
| ask_user | nexau.archs.tool.builtin.session_tools:ask_user | builtin_tools/tools/ask_user.tool.yaml |
For detailed parameter descriptions of each tool, see
references/builtin-tools-reference.md.
| Path | Purpose |
|------|---------|
| references/agent-yaml-reference.md | Complete agent YAML config field reference |
| references/tool-yaml-reference.md | Tool YAML definition schema and examples |
| references/builtin-tools-reference.md | Catalog of all builtin tools with binding paths |
| references/system-prompt-guide.md | System prompt writing conventions and patterns |
| assets/templates/agent.yaml | Starter agent YAML config template |
| assets/templates/tool.tool.yaml | Starter tool YAML definition template |
| assets/templates/systemprompt.md | Starter system prompt template |
| assets/templates/start.py | Standalone agent entry point template |
| scripts/validate_agent.py | Agent YAML validator (schema + file reference checks) |
| docs/index.md | NexAU documentation index — entry point for all user-facing docs |
| docs/getting-started.md | Installation, setup, and first agent walkthrough |
| docs/core-concepts/agents.md | Agent architecture, lifecycle, and configuration |
| docs/core-concepts/tools.md | Tool system — definition, binding, execution |
| docs/core-concepts/llms.md | LLM provider configuration and aggregator usage |
| docs/advanced-guides/skills.md | Skill system — folder-based and tool-based skills |
| docs/advanced-guides/hooks.md | Hook system for lifecycle event handling |
| docs/advanced-guides/mcp.md | Model Context Protocol integration |
| docs/advanced-guides/sandbox.md | Sandbox configuration and isolation |
| docs/advanced-guides/session-management.md | Session persistence and history management |
| docs/advanced-guides/streaming-events.md | Streaming event types and handling |
| docs/advanced-guides/transports.md | Transport layer — HTTP, stdio, WebSocket, gRPC |
| docs/advanced-guides/templating.md | Jinja2 templating in system prompts and configs |
| docs/advanced-guides/context_compaction.md | Context compaction middleware for long conversations |
| docs/advanced-guides/global-storage.md | Global storage for cross-turn agent state |
| docs/advanced-guides/tracer.md | Tracing and observability setup |
| docs/advanced-guides/image.md | Image input handling |
Skills are reusable capabilities that extend an agent's knowledge and workflows. NexAU supports two types: folder-based skills and tool-based skills. Both are automatically registered and discoverable via the LoadSkill tool at runtime.
A folder-based skill is a self-contained directory with a SKILL.md file. To add one to an agent:
skills/ folder:skills/
└── my-skill/
├── SKILL.md # Required — metadata + instructions
├── scripts/ # Optional — executable code
├── references/ # Optional — context docs loaded on demand
└── assets/ # Optional — templates, images, output files
skills:
- ./skills/my-skill
The agent will see a brief description of the skill in its system prompt and can call LoadSkill to read the full SKILL.md content when needed.
A tool-based skill is a regular tool marked with as_skill: true in its YAML definition. This is useful for simple, well-defined capabilities that do not need extensive documentation.
# tools/generate_code.tool.yaml
type: tool
name: generate_code
description: Generates code based on specifications
as_skill: true
skill_description: Code generation skill for multiple programming languages
input_schema:
type: object
properties:
language:
type: string
specification:
type: string
required: [language, specification]
The skill_description field is required when as_skill: true. It provides the brief text shown in the skill registry.
Both skill types can coexist in the same agent:
# Agent YAML
skills:
- ./skills/data-analysis # Folder-based skill
- ./skills/report-writing # Folder-based skill
tools:
- name: web_search
yaml_path: ./tools/web_search.tool.yaml # Tool-based skill (as_skill: true)
binding: nexau.archs.tool.builtin.web_tools:google_web_search
skill_registry during initializationLoadSkill tool is automatically added to the agentLoadSkill with the skill nameSKILL.md content (and skill folder path) is returned to the agentA well-crafted skill transforms a general-purpose agent into a specialized one. Follow these principles to maximize effectiveness.
Every SKILL.md must start with YAML frontmatter containing name and description:
---
name: my-skill
description: Brief description of what this skill does. This skill should be used when [trigger conditions].
---
# Skill Title
[Purpose — what this skill provides, in 1-2 sentences]
## When to Use
[Concrete trigger conditions — when should the agent load this skill]
## Workflow / Instructions
[Step-by-step procedural knowledge]
## Bundled Resources
[Table of scripts, references, and assets with their purposes]
The name and description in the frontmatter determine when the agent will load the skill. Write them carefully:
my-skill, not MySkill or my_skill)Skills use a three-level loading system to manage context efficiently:
LoadSkill (target: <5k words)Keep SKILL.md lean by moving detailed reference material to references/ files. Only include essential procedural instructions and workflow guidance in the main body.
| Type | Directory | When to Include | Example |
|------|-----------|-----------------|---------|
| Scripts | scripts/ | Same code is rewritten repeatedly or deterministic reliability is needed | scripts/validate_config.py |
| References | references/ | Documentation the agent should consult while working | references/api_schema.md |
| Assets | assets/ | Files used in the output (templates, images, boilerplate) | assets/templates/starter.yaml |
Avoid duplication: Information should live in either SKILL.md or reference files, not both. For large reference files (>10k words), include grep search patterns in SKILL.md to help the agent locate relevant sections.
| Criteria | Folder-Based | Tool-Based | |----------|-------------|------------| | Needs extensive documentation | ✓ | | | Includes multiple files (scripts, templates) | ✓ | | | Single, well-defined capability | | ✓ | | Tool description is sufficient documentation | | ✓ | | Will be shared across projects | ✓ | |
SKILL.md instead of references/ — bloats context on every loadSKILL.md and reference filesdevelopment
Use when a failing test or runtime error needs a tight reproduce, diagnose, patch, and rerun loop.
development
Use for multi-step implementation work that needs exploration, edits, and verification.
testing
Use when a coding task needs default agent behavior: inspect first, keep edits scoped, and verify before reporting done.
tools
Replace with description of the skill and when Claude should use it.