Nodal-Agents
Concepts

Skills

How skills add guidance and unlock tools for an agent.

A skill is a reusable capability you assign to an agent. Each skill has two effects that fire together at job time:

  1. Prompt injection — the skill's Markdown body is appended to the agent's system prompt, giving it instructions, discipline rules, or domain knowledge.
  2. Tool gating — a skill's requiredBuiltins list unlocks specific built-in tools for any agent that holds it. An agent without the skill never sees those tools, regardless of what's registered in the runner.

These two effects are always coupled: you can't get the tools without the guidance, and you can't get the guidance without the assignment.

Kinds of skills

KindCreated byNotes
SystemShips with the product27 skills seeded at boot from the catalog (e.g. office-editing, command-execution, code-task).
CustomYou, in the dashboardFreeform Markdown; you control the content and requiredBuiltins.
CommunityInstalled at runtimeFetched from any open SKILL.md on GitHub, skills.sh, or ClawHub. Stored under this workspace's file tree.
LearnedAn agent, after a substantial jobCreated by the opt-in reflection loop; created_by = 'agent' in the DB.

System skills

The system skills ship in @nodal-agents/catalog and are upserted into every install at boot: 27 skills (packages/catalog/src/index.ts). Each carries a kind field that decides where it's injected and whether you manage it:

KindCountIn your library?Skills
capability15Yes, you assign itcitation-discipline, claude-html-design, code-review, code-task, command-execution, dev, document-editing, obsidian, office-editing, presentation-editing, request-review, research-scope-discipline, results-delivery, spreadsheet-editing, task-planning
baseline4No, auto-injectedlanguage-mirror, safe-tool-use, verify-before-done, workspace-hygiene. Part of every agent's base prompt by default.
agent-internal8No, hiddenmarkdown-output, telegram-responder, tool-attach-connector, tool-attach-mcp, tool-create-agent, tool-create-mcp, tool-schedules, tool-update-agent. Guides loaded on demand via skill_view.

Only capability skills show up in the dashboard's Skills library for you to assign. The other two kinds are managed by the runner: they're either always on, or loaded silently on demand.

A messaging channel injects no skill. What an agent needs to know about the channel it replies on is one line of its job context, built from the channel's adapter: the tool that reaches the user, which formatting marks render there, and that a long text is split automatically.

See the Skills reference for the full content of each system skill.

Community skills

Install any project that publishes a SKILL.md (the open Agent Skills format) from the Skills → Community tab in the dashboard. You paste a GitHub URL, an owner/repo shorthand, or a skills.sh path. The runner fetches and extracts the repository, locates the SKILL.md, validates its frontmatter, and writes the skill into the database with is_community = true and the source URL recorded. The bundle itself lands under this workspace's own file tree (~/.nodalai/workspaces/<workspace-id>/skills/<slug>/), so two workspaces installing the same slug never collide on disk.

If the skill bundle includes script files (.py, .sh, .js, .mjs, or .cjs), the install flow flags them, but a bundled script does not run on its own. The workspace owner must first turn on Allow scripts for that agent and skill pair in Skills settings. Once enabled, the agent can run the script with the run_skill_script tool (packages/tools/src/builtin/run-skill-script.ts), which still requires per-run approval unless an auto-approve rule exists for the agent.

Community skills automatically receive skill_file_read and skill_file_list so the agent can inspect the skill's own bundled files.

The learning loop

When the reflection loop is enabled (opt-in per entity in the dashboard), the runner runs a Tier-1 reflection pass after any qualifying completed job — one that used at least 10 tool calls and did not come from a chat or reflection channel. The reflection agent reads the transcript and either creates a new skill or patches an existing one. These learned skills carry created_by = 'agent' and are visible on the dashboard's Learned Skills page, which is also where you switch reflection on or off.

A weekly curator pass (Tier-2) consolidates and prunes learned skills across the entity.

Assigning skills

Assign a skill to an agent from the agent's Skills tab in the dashboard. The change takes effect on the next job — no restart required.

On this page