Skills¶
Skills สอนให้เอเจนต์ ใช้ tool ได้ดีขึ้นและปรับปรุงการให้เหตุผล มันคือชุด การประกอบ tool, sub-skill และคำสั่งเอเจนต์ที่นำกลับมาใช้ซ้ำได้ และแชร์ผ่าน registry สาธารณะได้
Skill ทุกตัวคือ tool Skills ปรากฏเป็นแคตตาล็อกแบบเบาใน system prompt ของ เอเจนต์ และเมื่อเอเจนต์เรียกใช้ตัวใดตัวหนึ่ง เนื้อหาของมัน (ผลลัพธ์ pipeline, คำสั่ง markdown หรือทั้งคู่) จะถูกแทรกเข้าไปในบริบทของบทสนทนา
ภาพรวม¶
| แนวคิด | คำอธิบาย |
|---|---|
| Skill | ไดเรกทอรีที่มี skill.toml (pipeline แบบมีโครงสร้าง), SKILL.md (คำสั่งแบบ markdown) หรือทั้งคู่ |
| SkillManager | ตัวประสานงานกลางสำหรับการค้นหา, resolve, สร้างแคตตาล็อก และห่อ tool |
| SkillTool | Adapter ที่ห่อ skill ใดๆ ให้เป็น BaseTool เพื่อให้เอเจนต์เรียกใช้ได้ |
| Overlay | ไฟล์เสริมที่ ~/.openjarvis/learning/skills/ เก็บคำอธิบายที่ปรับปรุงแล้วและตัวอย่าง few-shot |
| Source | ตัว resolver สำหรับนำเข้า skill จาก Hermes Agent, OpenClaw หรือ GitHub repo ใดๆ |
Quick Start¶
# List installed skills
jarvis skill list
# Install a skill from Hermes Agent
jarvis skill install hermes:apple-notes
# Bulk install a category
jarvis skill sync hermes --category research
# Run a skill directly
jarvis skill run math-solver -a expression="41 + 82"
# See skill details
jarvis skill info research-and-summarize
รูปแบบการกำหนด Skill¶
Skill คือไดเรกทอรีที่มี skill.toml, SKILL.md หรือทั้งคู่
โครงสร้างไดเรกทอรี¶
research-and-summarize/
├── SKILL.md # Markdown instructions (loaded on invocation)
├── skill.toml # Structured pipeline steps
├── templates/ # Optional Jinja2 templates
├── scripts/ # Optional executable helpers
├── references/ # Optional detailed docs
├── assets/ # Optional static resources
└── examples/ # Optional usage examples
skill.toml (Pipeline แบบมีโครงสร้าง)¶
Pipeline skill กำหนดลำดับการเรียก tool ที่รันแบบ deterministic:
[skill]
name = "research-and-summarize"
version = "0.1.0"
description = "Search the web and produce a structured summary"
author = "openjarvis"
tags = ["research", "summarization"]
required_capabilities = ["network:fetch"]
depends = ["summarize"]
[[skill.steps]]
tool_name = "web_search"
arguments_template = '{"query": "{query}"}'
output_key = "search_results"
[[skill.steps]]
skill_name = "summarize"
arguments_template = '{"text": "{search_results}"}'
output_key = "summary"
Step เรียก tool ได้ (tool_name) หรือเรียก skill อื่น (skill_name) placeholder
ในเทมเพลตอย่าง {query} จะกลายเป็นพารามิเตอร์ input ของ skill Output key
เชื่อมโยงกันระหว่าง step
SKILL.md (เนื้อหาเชิงคำสั่ง)¶
Instructional skill ให้คำแนะนำแบบ markdown ที่เอเจนต์ทำตามโดยใช้ tool อื่น ของมันเอง:
---
name: code-explainer
description: Explain code in plain language with examples
license: MIT
metadata:
openjarvis:
version: "0.1.0"
author: openjarvis
tags: [coding, explanation]
---
When asked to explain code, follow this approach:
1. Identify the programming language
2. Break the code into logical sections
3. Explain each section in plain language
4. Highlight any patterns, idioms, or potential issues
5. Provide a one-sentence summary at the end
YAML frontmatter ทำตามมาตรฐานเปิด agentskills.io ฟิลด์ที่จำเป็น: name, description ทางเลือกเสริม: license, compatibility, metadata, allowed-tools
สิ่งที่เกิดขึ้นตอนเรียกใช้งาน¶
| Skill มี | ตอนเรียกใช้งาน |
|---|---|
มีแค่ step ของ skill.toml |
รัน pipeline คืนผลลัพธ์ |
มีแค่ SKILL.md |
คืนคำสั่งแบบ markdown — เอเจนต์ทำตามในรอบถัดไป |
| มีทั้งคู่ | รัน pipeline step และคืนคำแนะนำแบบ markdown พร้อมกับผลลัพธ์ด้วย |
การติดตั้ง Skill¶
จาก Hermes Agent¶
# Single skill
jarvis skill install hermes:apple-notes
# Bulk install by category
jarvis skill sync hermes --category research
jarvis skill sync hermes --category coding
jarvis skill sync hermes # everything (~150 skills)
จาก OpenClaw¶
# Single skill (owner/slug format)
jarvis skill install openclaw:0xv4l3nt1n3/etherscan
# Bulk install with search filter
jarvis skill sync openclaw --search "web3|crypto"
จาก GitHub Repo ใดๆ¶
ตัวอย่างเช่น ติดตั้ง Hermes Tweet skill เมื่อคุณต้องการให้เอเจนต์ค้นหา Twitter/X, อ่านการตอบกลับทวีต, มอนิเตอร์ทวีต, export ผู้ติดตาม และรัน เวิร์กโฟลว์ post, reply หรือ DM ที่มีการควบคุม:
jarvis skill install github:Xquik-dev/hermes-tweet/skills/hermes-tweet --url https://github.com/Xquik-dev/hermes-tweet
นำเข้าอัตโนมัติแบบขับเคลื่อนด้วย Config¶
เพิ่มแหล่งข้อมูลลงใน ~/.openjarvis/config.toml เพื่อ sync อัตโนมัติ:
[skills]
enabled = true
auto_sync = true
[[skills.sources]]
source = "hermes"
filter = { category = ["research", "coding", "productivity"] }
auto_update = true
[[skills.sources]]
source = "openclaw"
filter = { search = "web3|crypto" }
เมื่อ auto_sync = true SkillManager จะตรวจความใหม่ของแหล่งข้อมูลทุกครั้ง
ที่เริ่ม session และดึงอัปเดตในพื้นหลัง
การจัดการแหล่งข้อมูล¶
เอเจนต์ใช้ Skill อย่างไร¶
แคตตาล็อก Skill ใน System Prompt¶
skill ที่มีทั้งหมดจะปรากฏเป็นแคตตาล็อก XML แบบเบาใน system prompt ของ เอเจนต์:
<available_skills>
<skill name="research-and-summarize" description="Search the web and produce a structured summary" />
<skill name="code-explainer" description="Explain code in plain language with examples" />
<skill name="math-solver" description="Solve a math problem step by step using the calculator" />
</available_skills>
เอเจนต์อ่านแคตตาล็อกนี้และตัดสินใจว่าจะเรียกใช้ skill ตัวไหน ตามคำขอของ ผู้ใช้
การควบคุมการเรียกใช้¶
Flag ต่อ skill ควบคุมการมองเห็น:
[skill]
user_invocable = true # expose as CLI command (default: true)
disable_model_invocation = false # hide from agent catalog (default: false)
user_invocable |
disable_model_invocation |
คำสั่ง CLI? | เอเจนต์ค้นพบไหม? |
|---|---|---|---|
| true (ค่าเริ่มต้น) | false (ค่าเริ่มต้น) | ใช่ | ใช่ |
| true | true | ใช่ | ไม่ |
| false | false | ไม่ | ใช่ |
| false | true | ไม่ | ไม่ (dormant) |
Pipeline Skill เทียบกับ Instructional Skill¶
เอเจนต์จัดการ skill ทั้งสองประเภทได้อย่างถูกต้อง:
- Pipeline skill (มี step ของ
skill.toml) รันแบบ deterministic และคืนผลลัพธ์ที่คำนวณแล้ว เอเจนต์ใช้ผลลัพธ์นั้นในคำตอบโดยตรง - Instructional skill (มีแค่
SKILL.md) คืนข้อความ markdown ที่อธิบายวิธีทำงานให้สำเร็จ เอเจนต์อ่านคำสั่งแล้วทำตามโดยใช้ tool อื่นของมัน (web_search, shell_exec, calculator ฯลฯ)
การค้นหา Skill จาก Trace¶
OpenJarvis ขุดประวัติ trace ของคุณหาลำดับการเรียกใช้ tool ที่เกิดซ้ำได้ โดยอัตโนมัติ และนำเสนอเป็น skill ผู้สมัคร:
# Preview discovered patterns without writing
jarvis skill discover --dry-run --min-frequency 3
# Write discovered skills to ~/.openjarvis/skills/discovered/
jarvis skill discover
skill ที่ค้นพบจะไปอยู่ที่ ~/.openjarvis/skills/discovered/ และปรากฏใน
jarvis skill list โดยอัตโนมัติในเซสชันถัดไป
การปรับปรุง Skill¶
ปรับปรุงด้วย DSPy หรือ GEPA¶
Learning loop ของ skill ใช้ประวัติ trace ของคุณเพื่อปรับปรุงคำอธิบาย skill และดึงตัวอย่าง few-shot:
# Preview what would be optimized
jarvis optimize skills --dry-run
# Run DSPy optimization
jarvis optimize skills --policy dspy --min-traces 3
# Run GEPA evolutionary optimization
jarvis optimize skills --policy gepa --min-traces 3
# Inspect what optimization produced
jarvis skill show-overlay research-and-summarize
ผลลัพธ์การปรับปรุงถูกเก็บเป็น overlay เสริมที่
~/.openjarvis/learning/skills/<skill-name>/optimized.toml มัน override
คำอธิบายของ skill และเพิ่มตัวอย่าง few-shot ลง system prompt ของเอเจนต์
ไฟล์ skill ต้นฉบับจะไม่ถูกแก้ไขเลย
การปรับปรุงอัตโนมัติ¶
เปิดใช้งานการปรับปรุงอัตโนมัติใน config:
[learning.skills]
auto_optimize = false # set to true to enable
optimizer = "dspy" # "dspy" or "gepa"
min_traces_per_skill = 20
เมื่อเปิดใช้งาน LearningOrchestrator จะรันการปรับปรุง skill หลังจากแต่ละ
รอบการเรียนรู้
การวัดผล Skill¶
วัดว่า skill ช่วยปรับปรุงประสิทธิภาพของเอเจนต์หรือไม่:
# Full sweep: 4 conditions × 3 seeds
jarvis bench skills
# Smoke test: 4 conditions × 1 seed × 5 tasks
jarvis bench skills --max-samples 5 --seeds 42
# Single condition
jarvis bench skills --condition skills_optimized_dspy
เงื่อนไข benchmark สี่แบบคือ:
| เงื่อนไข | สิ่งที่ทดสอบ |
|---|---|
no_skills |
ปิด skill (กลุ่มควบคุม) |
skills_on |
เปิด skill ไม่มีการปรับปรุง |
skills_optimized_dspy |
Overlay ที่ปรับปรุงด้วย DSPy |
skills_optimized_gepa |
Overlay ที่ปรับปรุงด้วย GEPA |
ผลลัพธ์ถูกเขียนไปที่ docs/superpowers/results/pinchbench-skills-eval-{date}.md
พร้อมตารางสรุป, รายละเอียดต่อ task, ผลต่าง และจำนวนการเรียกใช้ skill
ความปลอดภัยและความเชื่อถือได้¶
ระดับความเชื่อถือ (Trust Tiers)¶
| ระดับ | แหล่งที่มา | การตรวจสอบ | Runtime |
|---|---|---|---|
| Bundled | มาพร้อม OpenJarvis | เชื่อถือโดยนัย | เข้าถึงเต็มรูปแบบภายในความสามารถที่ประกาศไว้ |
| Indexed | อยู่ใน skill index ทางการ ลงลายเซ็นแล้ว | SHA256 + Ed25519 | จำกัดตาม capability |
| Unreviewed | URL GitHub ใดๆ | SHA256 เท่านั้น | จำกัดตาม capability + เตือนเรื่อง sandbox |
| Workspace | ไดเรกทอรี ./skills/ ในเครื่อง |
ไม่มี (โค้ดของผู้ใช้) | เชื่อถือได้ |
การบังคับใช้ Capability¶
Skill ประกาศ capability ที่จำเป็น ตอน runtime SkillExecutor ตรวจสอบว่าการ เรียก tool แต่ละครั้งอยู่ในขอบเขต capability ที่ skill ประกาศไว้:
network:fetch— คำขอ HTTP ขาออกfilesystem:read/filesystem:write— การเข้าถึงไฟล์shell:execute— รันคำสั่ง shell (อันตราย)memory:read/memory:write— การเข้าถึง memory backendengine:inference— การเรียก LLM
Skill ที่ประกาศ capability อันตราย (shell:execute, network:listen,
filesystem:write) จะ trigger คำเตือนตอนติดตั้งและคำแนะนำเรื่อง sandbox
Scripts¶
Skill ที่นำเข้ามาอาจมีไดเรกทอรี scripts/ ที่มีโค้ดที่รันได้ สิ่งเหล่านี้
ถูกข้ามเป็นค่าเริ่มต้น เพื่อความปลอดภัย ใช้ --with-scripts เพื่อเปิดใช้
งาน:
การประกอบ Skill¶
Skill เรียกใช้ skill อื่นเป็น sub-step ได้:
[[skill.steps]]
skill_name = "summarize"
arguments_template = '{"text": "{search_results}"}'
output_key = "summary"
SkillManager สร้าง dependency graph ตอนค้นพบ และตรวจสอบ:
- ไม่มี cycle —
A → B → C → Aจะถูกปฏิเสธพร้อม error ที่ชัดเจน - ความลึกสูงสุด — ค่าเริ่มต้น 5 ระดับ (ตั้งค่าได้)
- การรวม Capability — parent ต้องประกาศทุก capability ที่ children ต้องการ
เอกสารอ้างอิง Configuration¶
หมวด [skills]¶
[skills]
enabled = true # enable/disable the skill system
skills_dir = "~/.openjarvis/skills/" # where skills are installed
active = "*" # which skills to activate ("*" = all)
auto_discover = true # scan skills_dir on startup
auto_sync = false # pull from configured sources on startup
max_depth = 5 # max sub-skill nesting depth
sandbox_dangerous = true # warn about dangerous capabilities
หมวด [[skills.sources]]¶
[[skills.sources]]
source = "hermes" # "hermes", "openclaw", or "github"
url = "" # required when source = "github"
filter = { category = ["research", "coding"] }
auto_update = true # pull latest on sync
หมวด [learning.skills]¶
[learning.skills]
auto_optimize = false # opt-in automatic optimization
optimizer = "dspy" # "dspy" or "gepa"
min_traces_per_skill = 20 # minimum traces before optimizing
optimization_interval_seconds = 86400 # at most once per day
overlay_dir = "~/.openjarvis/learning/skills/"
ลำดับความสำคัญของชื่อ¶
เมื่อชื่อ skill เดียวกันมีอยู่ในหลายตำแหน่ง ขอบเขตที่ใกล้ที่สุดจะชนะ:
- Workspace
./skills/(ความสำคัญสูงสุด) - User
~/.openjarvis/skills/ - Bundled (มาพร้อม OpenJarvis)
เอกสารอ้างอิง CLI¶
| คำสั่ง | คำอธิบาย |
|---|---|
jarvis skill list |
แสดงรายการ skill ที่ติดตั้งไว้ |
jarvis skill info <name> |
แสดงข้อมูล skill แบบละเอียด |
jarvis skill run <name> [-a key=value] |
รัน skill โดยตรง |
jarvis skill install <source>:<name> |
ติดตั้งจาก Hermes, OpenClaw หรือ GitHub |
jarvis skill sync [<source>] [--category C] |
ติดตั้ง + อัปเดตจากแหล่งข้อมูลแบบ bulk |
jarvis skill sources |
แสดงรายการแหล่ง skill ที่ตั้งค่าไว้ |
jarvis skill update |
ดึงข้อมูลล่าสุดจากแหล่งที่ตั้งค่าไว้ |
jarvis skill remove <name> |
ลบ skill ที่ติดตั้งไว้ |
jarvis skill search <query> |
ค้นหา skill index |
jarvis skill discover [--dry-run] |
ขุด trace หารูปแบบ tool ที่เกิดซ้ำ |
jarvis skill show-overlay <name> |
ตรวจสอบผลลัพธ์การปรับปรุงของ skill |
jarvis optimize skills [--policy dspy\|gepa] |
ปรับปรุงคำอธิบาย skill + ตัวอย่าง few-shot |
jarvis bench skills [--condition C] |
รัน PinchBench skills benchmark |