Structured Skills for Agents
Project description
structured_skills
Structured Skills for Agents - launch MCP servers from skill directories
No LLM Required
The goal of this library is that it works without any LLM. Skills are explicitly defined with scripts and resources you control. Unlike AI agents that can execute arbitrary commands, structured_skills only runs what you've explicitly defined in your skill directories. Everything is gated by the scripts you write - no surprises, no unbounded execution.
What It Supports
- MCP server for skill discovery and execution
- Direct CLI for listing/loading/running skills
- Scheduler definitions via
SCHEDULER.toml - Cron-style human schedules (for example
monday 9am,daily 9am,weekdays 09:30) - Interval schedules via
interval(for example5m,every 15m,1h) - Sequential task steps (
taskas one item or an ordered list) - Per-session state isolation using
--working-dir
Usage
Quick usage to launch MCP server:
structured_skills run path/to/root/skills --working-dir /path/to/session-or-channel
To test via CLI:
structured_skills cli list_skills /path/to/root/skills
structured_skills cli load_skill /path/to/root/skills <skill_name>
structured_skills cli read_skill_resource /path/to/root/skills <skill_name> <resource_name>
# use explicit per-session/channel working directories
structured_skills cli --working-dir /path/to/session-or-channel run_skill_script /path/to/root/skills <skill_name> <function_name>
structured_skills cli load_scheduler /path/to/root/skills
structured_skills cli scheduler_tick /path/to/root/skills
Programmatically:
from structured_skills import SkillRegistry
registry = SkillRegistry("/path/to/skills")
# List all available skills
registry.list_skills()
# Load full skill instructions
registry.load_skill(skill_name)
# Read a resource (file, script, or function info)
registry.read_skill_resource(skill_name, resource_name, args)
# Execute a skill function
registry.run_skill(skill_name, function_name, args)
# Scheduler
registry.load_scheduler()
registry.scheduler_tick()
SCHEDULER.toml
SCHEDULER.toml lives at the root of your skills directory.
agent = "ops-agent"
version = 1
[daily-health]
interval = "5m" # or use schedule = "monday 9am"
active_schedule = "weekdays between 09:00-17:00"
task = [
{ skill_name = "memory", function = "store", args = { key = "health", value = "ok" } },
{ skill_name = "memory", function = "get", args = { key = "health" } }
]
Notes:
- Use exactly one of
intervalorscheduleper task. taskcan be a single table or an array of tables.- Without a daemon,
scheduler_tickchecks if a task already ran since its previous scheduled occurrence. If not, it runs immediately.
Persistence:
load_scheduleronly reads/parsesSCHEDULER.tomland does not write state.- Scheduler run state is stored in
scheduler-state.json. - On read,
scheduler_tickprefers<working-dir>/scheduler-state.jsonand falls back to<skill-root>/scheduler-state.jsonif present. - On write,
scheduler_tickalways persists to<working-dir>/scheduler-state.json.
For OpenClaw-aligned persistence, pass a session or channel directory via --working-dir (for example, ~/.openclaw/agents/<agentId>/sessions/<session_key>). Skill state is stored under <working-dir>/<skill-name>.
Validation
Perform checks with suggested fixes:
structured_skills check path/to/root/skills
structured_skills check path/to/root/skills --fix # try to fix observed issues
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file structured_skills-0.3.0.tar.gz.
File metadata
- Download URL: structured_skills-0.3.0.tar.gz
- Upload date:
- Size: 26.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c33409d7294da6c2f810173bc4eeb4cf7c481c986b35c534f0f3f2a92441f697
|
|
| MD5 |
51dd7aa80bac11daf493c59e481c006e
|
|
| BLAKE2b-256 |
b827861755bed8ec6c0657ca123a224d951a733f429d3daba96d14bdad265f62
|
File details
Details for the file structured_skills-0.3.0-py3-none-any.whl.
File metadata
- Download URL: structured_skills-0.3.0-py3-none-any.whl
- Upload date:
- Size: 32.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e3fc29992bbd0f09135fc418dead292cdbce47f220abdd2fa1335817ab7b808
|
|
| MD5 |
13cd60a2093c389ebc18924753f6aaa5
|
|
| BLAKE2b-256 |
291fcabd9d2f2fa49a99038758b759da095de08fedddbfc25790a06e9d66545f
|