AGENT SKILL

skill-library-voyager

暂无简介

License 许可
Apache-2.0
最近更新
2026-11-12
Stars
★ 13
Forks
2

03 SKILL.md 正文

/skill-library-voyager

When to Use

  • Agent keeps re-deriving the same capability on every session (token waste)
  • Building a lifelong-learning agent that accrues capability over time
  • Implementing Claude Agent SDK skill files backed by a retrieval store
  • Creating a composable capability library for a multi-agent system

Do NOT use for

  • One-shot tasks where skill reuse has no value
  • Tasks with highly unique, non-repeatable capabilities
  • Simple tool-use patterns where a tool registry ([[react-agent-loop]]) suffices

Voyager: three components

1. Automatic curriculum   — curiosity-driven task proposer (bottom-up exploration)
2. Skill library          — executable code keyed on description + embedding
3. Iterative prompting    — on failure: errors + environment feedback → refine skill

Why action space = code: Voyager emits function bodies, not primitive commands. A skill is composable: craftIronPickaxe() calls mineIron(), mineStick(), placeCraftingTable(), craft(). Stored keyed on description + embedding. Loaded as program, not prompt.


Skill store

from dataclasses import dataclass, field
import hashlib, json, re

@dataclass
class Skill:
    name: str
    description: str
    code: str
    version: int = 1
    success_count: int = 0
    failure_count: int = 0

    @property
    def id(self) -> str:
        return hashlib.sha256(self.name.encode()).hexdigest()[:8]

    def reliability(self) -> float:
        total = self.success_count + self.failure_count
        return self.success_count / total if total else 0.0

@dataclass
class SkillLibrary:
    skills: dict[str, Skill] = field(default_factory=dict)

    def register(self, name: str, description: str, code: str) -> Skill:
        skill = Skill(name=name, description=description, code=code)
        self.skills[name] = skill
        return skill

    def retrieve(self, query: str, top_k: int = 3) -> list[Skill]:
        """Toy keyword retrieval — replace with embedding cosine similarity."""
        q_words = set(query.lower().split())
        scored = []
        for skill in self.skills.values():
            desc_words = set(skill.description.lower().split())
            overlap = len(q_words & desc_words)
            scored.append((overlap, skill))
        scored.sort(key=lambda x: (-x[0], -x[1].reliability()))
        return [s for _, s in scored[:top_k]]

    def update(self, name: str, new_code: str) -> str:
        if name not in self.skills:
            return f"[error] skill '{name}' not found"
        self.skills[name].code = new_code
        self.skills[name].version += 1
        return f"skill '{name}' updated to v{self.skills[name].version}"

    def record_outcome(self, name: str, success: bool) -> None:
        if name in self.skills:
            if success:
                self.skills[name].success_count += 1
            else:
                self.skills[name].failure_count += 1

Iterative prompting — skill refinement on failure

def build_skill_refinement_prompt(
    task: str,
    current_code: str,
    error_output: str,
    env_feedback: str,
) -> str:
    return f"""The following skill failed. Rewrite it to fix the errors.

Task: {task}

Current code:
```python
{current_code}

Execution errors: {error_output}

Environment feedback: {env_feedback}

Write an improved version that handles the failure. Return only the code block."""


---

## Agent using skill library

```python
def agent_with_skills(task: str, library: SkillLibrary, llm, executor) -> str:
    # 1. Retrieve relevant skills
    candidates = library.retrieve(task, top_k=3)
    skill_context = "\n\n".join(
        f"# {s.name} (reliability={s.reliability():.0%})\n{s.description}\n```python\n{s.code}\n```"
        for s in candidates
    )

    # 2. Ask LLM to compose or extend
    prompt = f"""Task: {task}

Available skills:
{skill_context}

Write a solution that composes these skills (or a new skill if none apply).
Return Python code."""
    code = llm(prompt)

    # 3. Execute with iterative refinement (max 3 attempts)
    for attempt in range(3):
        result, error = executor(code)
        if not error:
            # Register as new skill if solution is novel
            skill_name = extract_function_name(code)
            if skill_name and skill_name not in library.skills:
                library.register(skill_name, task, code)
            return result

        # Refine on failure
        refinement_prompt = build_skill_refinement_prompt(task, code, error, result)
        code = llm(refinement_prompt)

    return f"[failed after 3 attempts] last error: {error}"

def extract_function_name(code: str) -> str | None:
    import re
    m = re.search(r'def (\w+)\s*\(', code)
    return m.group(1) if m else None

Claude Agent SDK mapping

Voyager skill        → Claude Agent SDK skill file (SKILL.md)
Library registration → /plugin install or skills/ directory scan
Retrieval            → agent reads SKILL.md trigger patterns → loads matching skill
Refinement           → /improve-skill command (human-gated in YAMTAM)
Reliability score    → YAMTAM skill confidence / review_status field

Anti-Fake-Pass Checklist

❌ Code skills with side effects stored without sandboxing → a bad skill deletes files
❌ No reliability score → agent uses a skill with 20% success rate as confidently as one with 95%
❌ Unbounded library growth → retrieval quality degrades; add a consolidation / GC pass
❌ Skill registered before testing → new skills must pass at least one successful execution first
❌ Single embedding for description → add code body embedding for retrieval by implementation pattern
❌ No version tracking → bug-fixed skill replaces original silently; can't audit regressions

04 同仓库更多 Skills

Horonomos-laps
Horonomos-laps/Yana-AI

openai--sentry--sentry

Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.

★ 13
Horonomos-laps
Horonomos-laps/Yana-AI

ito-basket-compare

Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.

★ 13
Horonomos-laps
Horonomos-laps/Yana-AI

implementing-network-traffic-baselining

Build network traffic baselines from NetFlow/IPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly/daily traffic pattern profiling

★ 13
Horonomos-laps
Horonomos-laps/Yana-AI

detecting-evasion-techniques-in-endpoint-logs

Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.

★ 13
Horonomos-laps
Horonomos-laps/Yana-AI

implementing-microsegmentation-with-guardicore

Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.

★ 13
Horonomos-laps
Horonomos-laps/Yana-AI

ramdisk-tmpfs-patterns

暂无简介

★ 13