metaclaw-evolving-agent by aradotso/trending-skills
npx skills add https://github.com/aradotso/trending-skills --skill metaclaw-evolving-agent技能来自 ara.so — Daily 2026 技能合集
MetaClaw 是一个 OpenAI 兼容的代理智能体,它能拦截对话、注入已学习的技能,并通过真实世界交互持续自我改进。它支持三种模式:轻量级技能注入、即时 RL 训练,以及一个智能的 "madmax" 调度器,可将权重更新推迟到空闲/睡眠窗口期。
# 最小化安装 — 仅技能注入,无需 GPU
pip install -e .
# 完整 RL 训练支持 (torch, transformers, tinker)
pip install -e ".[rl]"
# 通过 LLM 摘要进行技能进化
pip install -e ".[evolve]"
# madmax 模式的 Google Calendar 调度器
pip install -e ".[scheduler]"
# 推荐:安装所有功能
pip install -e ".[rl,evolve,scheduler]"
# 一次性交互式配置向导
metaclaw setup
# 以默认的 madmax 模式启动(技能 + RL + 智能调度器)
metaclaw start
# 仅技能模式 — 无需 GPU,无需 Tinker
metaclaw start --mode skills_only
# RL 模式 — 批次填满时立即训练
metaclaw start --mode rl
# 无调度器的 RL 模式(同上,显式指定)
metaclaw start --mode rl
运行 metaclaw start 后,一个本地的 OpenAI 兼容代理即开始运行。将你的客户端(OpenClaw 或任何 OpenAI SDK 消费者)指向 http://localhost:<端口>,而不是上游的 LLM 端点。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
metaclaw setup 会写入一个配置文件(默认:~/.metaclaw/config.yaml)。你也可以直接编辑它:
# ~/.metaclaw/config.yaml
proxy:
host: 0.0.0.0
port: 8080
llm:
provider: kimi # kimi | qwen | claude | minimax | openai | gemini
base_url: https://api.moonshot.cn/v1
model: moonshot-v1-8k
# api_key 从环境变量加载: METACLAW_LLM_API_KEY
skills:
enabled: true
max_injected: 5 # 每轮对话最多注入的技能数
summarize_after_session: true
rl:
enabled: true
backend: auto # auto | tinker | mint
batch_size: 32
algorithm: grpo
opd_teacher: false # 可选的教师蒸馏
scheduler: # 仅 madmax 模式
enabled: true
sleep_hours: [22, 7] # 本地时间 22:00–07:00
idle_timeout_minutes: 15
google_calendar: false # 设为 true 并配置 OAuth 以检测会议
logging:
level: info
log_dir: ~/.metaclaw/logs
export METACLAW_LLM_API_KEY="your-llm-api-key"
export METACLAW_TINKER_API_KEY="your-tinker-api-key" # rl 模式
export METACLAW_MINT_API_KEY="your-mint-api-key" # 如果 backend=mint
export GOOGLE_CALENDAR_CREDENTIALS_PATH="path/to/creds.json" # 调度器
| 模式 | 命令 | 需要 GPU | 描述 |
|---|---|---|---|
skills_only | metaclaw start --mode skills_only | 否 | 代理 + 技能注入 + 自动摘要 |
rl | metaclaw start --mode rl | 通过 API | 技能 + 批次填满时进行 GRPO 训练 |
madmax | metaclaw start | 通过 API | 技能 + RL + 调度器(仅在空闲/睡眠/会议期间训练) |
import asyncio
from metaclaw import MetaClawAgent, AgentConfig, Mode
async def main():
config = AgentConfig.from_yaml("~/.metaclaw/config.yaml")
agent = MetaClawAgent(config, mode=Mode.MADMAX)
await agent.start()
asyncio.run(main())
from metaclaw.skills import SkillStore, SkillInjector
store = SkillStore(path="~/.metaclaw/skills")
# 手动添加技能
store.add(
name="code-review-checklist",
content="Always check for: 1) error handling, 2) type hints, 3) docstrings.",
tags=["code", "review"]
)
# 为查询检索 top-k 相关技能
injector = SkillInjector(store)
relevant = injector.retrieve(query="review my Python function", top_k=3)
for skill in relevant:
print(skill.name, skill.score)
from metaclaw.proxy import ConversationInterceptor
from metaclaw.memory import ExperienceBuffer
buffer = ExperienceBuffer(max_size=1000)
interceptor = ConversationInterceptor(
upstream_url="https://api.moonshot.cn/v1",
on_complete=buffer.record # 每轮对话后调用,参数为 (messages, response)
)
# buffer.record 签名:
async def on_complete(messages: list[dict], response: dict) -> None:
...
from metaclaw.training import RLTrainer, TrainingConfig
trainer = RLTrainer(
config=TrainingConfig(
backend="tinker", # 或 "mint"
algorithm="grpo",
batch_size=32,
lora_rank=16,
)
)
# 从经验缓冲区收集批次并训练
async def run_training(buffer):
batch = buffer.sample(n=32, split="support") # 支持集/查询集分离
result = await trainer.train(batch)
print(f"Training complete. Loss: {result.loss:.4f}, Steps: {result.steps}")
from metaclaw.rewards import RewardModel
reward_model = RewardModel(provider="llm") # 使用配置的 LLM 进行评分
async def score_turn(prompt: str, response: str) -> float:
score = await reward_model.score(prompt=prompt, response=response)
return score # 范围在 [-1.0, 1.0] 的浮点数
Conversation turn
│
▼
SkillInjector.retrieve() ← 对 SkillStore 进行向量搜索
│ 将 top-k 技能注入系统提示词
▼
LLM responds
│
▼
ExperienceBuffer.record() ← 存储 (context, response, metadata)
│
▼ (会话结束)
SkillSummarizer.run() ← LLM 提取可复用模式
│
▼
SkillStore.upsert() ← 新的/更新的技能持久化到磁盘
将任何 OpenAI SDK 客户端指向 MetaClaw 代理:
from openai import OpenAI
# MetaClaw 代理运行在 localhost:8080
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-used-but-required-by-sdk"
)
response = client.chat.completions.create(
model="moonshot-v1-8k", # 透传给上游
messages=[
{"role": "user", "content": "Review my pull request strategy."}
]
)
print(response.choices[0].message.content)
技能被透明地注入 — 客户端代码无需更改。
调度器确保 RL 权重更新永远不会中断活跃使用:
from metaclaw.scheduler import MadMaxScheduler, SchedulerConfig
scheduler = MadMaxScheduler(
config=SchedulerConfig(
sleep_hours=(22, 7), # 在本地时间 22:00–07:00 之间训练
idle_timeout_minutes=15, # 无对话 15 分钟后训练
google_calendar=True, # 在日历会议期间也训练
credentials_path="creds.json"
)
)
# 检查现在是否适合安全地训练
if await scheduler.is_training_window():
await trainer.train(batch)
# 1. 在 Google Cloud Console 中启用 Google Calendar API
# 2. 下载 OAuth2 凭证为 creds.json
# 3. 在配置或环境变量中设置路径
export GOOGLE_CALENDAR_CREDENTIALS_PATH="/path/to/creds.json"
# 4. 首次运行将打开浏览器进行 OAuth 授权
metaclaw start
MetaClaw 将经验分离为支持集和查询集,以防止过时的奖励污染更新:
from metaclaw.memory import ExperienceBuffer
buffer = ExperienceBuffer(
max_size=2000,
support_ratio=0.5 # 50% 支持集,50% 查询集
)
# 训练期间:
support_batch = buffer.sample(n=16, split="support") # 用于计算奖励信号
query_batch = buffer.sample(n=16, split="query") # 用于梯度更新
await trainer.train_meta(support=support_batch, query=query_batch)
rl:
backend: tinker
tinker_project: my-metaclaw-project
lora_rank: 16
learning_rate: 1e-4
# 单独安装 MinT 兼容层
pip install metaclaw-mint
rl:
backend: mint
mint_endpoint: https://your-mint-endpoint
rl:
backend: auto # 先尝试 tinker,回退到 mint,如果两者都不可用则报错
运行 metaclaw start 后代理无法访问
lsof -i :8080proxy.port 并重启rl 模式:"No training backend available"
pip install -e ".[rl]" 成功完成METACLAW_TINKER_API_KEY 或 METACLAW_MINT_API_KEY 已设置rl.backend: tinker 而不是 auto技能在会话之间未持久化
skills.summarize_after_session: true~/.metaclaw/skills/ 的写入权限metaclaw skills list 检查存储的技能Madmax 模式从不训练
scheduler.sleep_hours 覆盖了你所在时区的夜间时段scheduler.idle_timeout_minutes(例如 1)~/.metaclaw/logs/scheduler.logGoogle Calendar 集成失败
~/.metaclaw/token.json 并重启OPD 教师蒸馏错误
仅支持 rl.backend: tinker
需要在配置中指定单独的教师模型端点:
rl:
opd_teacher: true
teacher_base_url: https://api.openai.com/v1
teacher_model: gpt-4o
metaclaw setup # 交互式配置向导
metaclaw start # 以 madmax 模式启动
metaclaw start --mode skills_only
metaclaw start --mode rl
metaclaw start --config path/to/config.yaml
metaclaw skills list # 显示所有存储的技能
metaclaw skills delete <name> # 移除一个技能
metaclaw skills export skills.json
metaclaw status # 显示代理、调度器、训练状态
metaclaw logs # 跟踪所有日志
metaclaw logs --component scheduler
每周安装量
360
代码仓库
GitHub 星标数
10
首次出现
9 天前
安全审计
安装于
gemini-cli355
github-copilot355
codex355
amp355
cline355
kimi-cli355
Skill by ara.so — Daily 2026 Skills collection
MetaClaw is an OpenAI-compatible proxy agent that intercepts conversations, injects learned skills, and continuously improves itself through real-world interactions. It supports three modes: lightweight skills injection, immediate RL training, and a smart "madmax" scheduler that defers weight updates to idle/sleep windows.
# Minimal — skills injection only, no GPU required
pip install -e .
# Full RL training support (torch, transformers, tinker)
pip install -e ".[rl]"
# Skill evolution via LLM summarization
pip install -e ".[evolve]"
# Google Calendar scheduler for madmax mode
pip install -e ".[scheduler]"
# Recommended: everything
pip install -e ".[rl,evolve,scheduler]"
# One-time interactive config wizard
metaclaw setup
# Start in default madmax mode (skills + RL + smart scheduler)
metaclaw start
# Skills only — no GPU, no Tinker needed
metaclaw start --mode skills_only
# RL mode — trains immediately when batch is full
metaclaw start --mode rl
# RL without scheduler (same as above, explicit)
metaclaw start --mode rl
After metaclaw start, a local OpenAI-compatible proxy is running. Point your client (OpenClaw or any OpenAI SDK consumer) at http://localhost:<port> instead of the upstream LLM endpoint.
metaclaw setup writes a config file (default: ~/.metaclaw/config.yaml). You can also edit it directly:
# ~/.metaclaw/config.yaml
proxy:
host: 0.0.0.0
port: 8080
llm:
provider: kimi # kimi | qwen | claude | minimax | openai | gemini
base_url: https://api.moonshot.cn/v1
model: moonshot-v1-8k
# api_key loaded from env: METACLAW_LLM_API_KEY
skills:
enabled: true
max_injected: 5 # max skills injected per turn
summarize_after_session: true
rl:
enabled: true
backend: auto # auto | tinker | mint
batch_size: 32
algorithm: grpo
opd_teacher: false # optional teacher distillation
scheduler: # madmax mode only
enabled: true
sleep_hours: [22, 7] # local 22:00–07:00
idle_timeout_minutes: 15
google_calendar: false # set true + configure OAuth for meeting detection
logging:
level: info
log_dir: ~/.metaclaw/logs
export METACLAW_LLM_API_KEY="your-llm-api-key"
export METACLAW_TINKER_API_KEY="your-tinker-api-key" # rl mode
export METACLAW_MINT_API_KEY="your-mint-api-key" # if backend=mint
export GOOGLE_CALENDAR_CREDENTIALS_PATH="path/to/creds.json" # scheduler
| Mode | Command | GPU Required | Description |
|---|---|---|---|
skills_only | metaclaw start --mode skills_only | No | Proxy + skills injection + auto-summarization |
rl | metaclaw start --mode rl | Via API | Skills + GRPO training when batch fills |
madmax | metaclaw start |
import asyncio
from metaclaw import MetaClawAgent, AgentConfig, Mode
async def main():
config = AgentConfig.from_yaml("~/.metaclaw/config.yaml")
agent = MetaClawAgent(config, mode=Mode.MADMAX)
await agent.start()
asyncio.run(main())
from metaclaw.skills import SkillStore, SkillInjector
store = SkillStore(path="~/.metaclaw/skills")
# Add a skill manually
store.add(
name="code-review-checklist",
content="Always check for: 1) error handling, 2) type hints, 3) docstrings.",
tags=["code", "review"]
)
# Retrieve top-k relevant skills for a query
injector = SkillInjector(store)
relevant = injector.retrieve(query="review my Python function", top_k=3)
for skill in relevant:
print(skill.name, skill.score)
from metaclaw.proxy import ConversationInterceptor
from metaclaw.memory import ExperienceBuffer
buffer = ExperienceBuffer(max_size=1000)
interceptor = ConversationInterceptor(
upstream_url="https://api.moonshot.cn/v1",
on_complete=buffer.record # called after each turn with (messages, response)
)
# buffer.record signature:
async def on_complete(messages: list[dict], response: dict) -> None:
...
from metaclaw.training import RLTrainer, TrainingConfig
trainer = RLTrainer(
config=TrainingConfig(
backend="tinker", # or "mint"
algorithm="grpo",
batch_size=32,
lora_rank=16,
)
)
# Collect a batch from the experience buffer and train
async def run_training(buffer):
batch = buffer.sample(n=32, split="support") # support/query separation
result = await trainer.train(batch)
print(f"Training complete. Loss: {result.loss:.4f}, Steps: {result.steps}")
from metaclaw.rewards import RewardModel
reward_model = RewardModel(provider="llm") # uses configured LLM for scoring
async def score_turn(prompt: str, response: str) -> float:
score = await reward_model.score(prompt=prompt, response=response)
return score # float in [-1.0, 1.0]
Conversation turn
│
▼
SkillInjector.retrieve() ← vector search over SkillStore
│ injects top-k skills into system prompt
▼
LLM responds
│
▼
ExperienceBuffer.record() ← stores (context, response, metadata)
│
▼ (end of session)
SkillSummarizer.run() ← LLM extracts reusable patterns
│
▼
SkillStore.upsert() ← new/updated skills persisted to disk
Point any OpenAI SDK client at the MetaClaw proxy:
from openai import OpenAI
# MetaClaw proxy is running on localhost:8080
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-used-but-required-by-sdk"
)
response = client.chat.completions.create(
model="moonshot-v1-8k", # passed through to upstream
messages=[
{"role": "user", "content": "Review my pull request strategy."}
]
)
print(response.choices[0].message.content)
Skills are injected transparently — the client code does not change.
The scheduler ensures RL weight updates never interrupt active use:
from metaclaw.scheduler import MadMaxScheduler, SchedulerConfig
scheduler = MadMaxScheduler(
config=SchedulerConfig(
sleep_hours=(22, 7), # train between 22:00–07:00 local time
idle_timeout_minutes=15, # train after 15 min of no conversations
google_calendar=True, # also train during calendar meetings
credentials_path="creds.json"
)
)
# Check if it's safe to train right now
if await scheduler.is_training_window():
await trainer.train(batch)
# 1. Enable Google Calendar API in Google Cloud Console
# 2. Download OAuth2 credentials as creds.json
# 3. Set path in config or env
export GOOGLE_CALENDAR_CREDENTIALS_PATH="/path/to/creds.json"
# 4. First run will open browser for OAuth consent
metaclaw start
MetaClaw separates experience into support and query sets to prevent stale rewards from polluting updates:
from metaclaw.memory import ExperienceBuffer
buffer = ExperienceBuffer(
max_size=2000,
support_ratio=0.5 # 50% support, 50% query
)
# During training:
support_batch = buffer.sample(n=16, split="support") # used to compute reward signal
query_batch = buffer.sample(n=16, split="query") # used for gradient update
await trainer.train_meta(support=support_batch, query=query_batch)
rl:
backend: tinker
tinker_project: my-metaclaw-project
lora_rank: 16
learning_rate: 1e-4
# Install MinT compatibility layer separately
pip install metaclaw-mint
rl:
backend: mint
mint_endpoint: https://your-mint-endpoint
rl:
backend: auto # tries tinker first, falls back to mint, errors if neither available
Proxy not reachable aftermetaclaw start
lsof -i :8080proxy.port in config and restartrl mode: "No training backend available"
pip install -e ".[rl]" completed successfullyMETACLAW_TINKER_API_KEY or METACLAW_MINT_API_KEY is setrl.backend: tinker explicitly instead of autoSkills not persisting between sessions
skills.summarize_after_session: true in config~/.metaclaw/skills/metaclaw skills list to inspect stored skillsMadmax mode never trains
scheduler.sleep_hours covers your timezone's nightscheduler.idle_timeout_minutes for testing (e.g., 1)~/.metaclaw/logs/scheduler.logGoogle Calendar integration fails
~/.metaclaw/token.json and restartOPD teacher distillation errors
Only supported with rl.backend: tinker
Requires a separate teacher model endpoint in config:
rl:
opd_teacher: true
teacher_base_url: https://api.openai.com/v1
teacher_model: gpt-4o
metaclaw setup # interactive config wizard
metaclaw start # start in madmax mode
metaclaw start --mode skills_only
metaclaw start --mode rl
metaclaw start --config path/to/config.yaml
metaclaw skills list # show all stored skills
metaclaw skills delete <name> # remove a skill
metaclaw skills export skills.json
metaclaw status # show proxy, scheduler, training status
metaclaw logs # tail all logs
metaclaw logs --component scheduler
Weekly Installs
360
Repository
GitHub Stars
10
First Seen
9 days ago
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
gemini-cli355
github-copilot355
codex355
amp355
cline355
kimi-cli355
AI 代码实施计划编写技能 | 自动化开发任务分解与 TDD 流程规划工具
41,400 周安装
| Via API |
| Skills + RL + scheduler (trains only during idle/sleep/meetings) |