Evolver

高风险
作者:autogame-17 | 审计时间:2026-02-26T09:59:20.936Z | 规则集:0.2.0

快速安装

将技能安装到你的 Agent

clawhub install evolver

技能介绍

AI agents 的自我进化引擎。分析运行时历史以识别改进,并应用受协议约束的进化。

使用场景

文档(原文)

来源:README.md
以下为作者原文(通常为英文)。安装请以页面顶部“快速安装”为准。

🧬 Capability Evolver

Capability Evolver Cover

Chinese Docs

"Evolution is not optional. Adapt or die."

Three lines

  • What it is: A protocol-constrained self-evolution engine for AI agents.
  • Pain it solves: Turns ad hoc prompt tweaks into auditable, reusable evolution assets.
  • Use in 30 seconds: node index.js to generate a GEP-guided evolution prompt.

Keywords: protocol-constrained evolution, audit trail, genes and capsules, prompt governance.

Try It Now (Minimal)

node index.js

What It Does

The Capability Evolver inspects runtime history, extracts signals, selects a Gene/Capsule, and emits a strict GEP protocol prompt to guide safe evolution.

Who This Is For / Not For

For

  • Teams maintaining agent prompts and logs at scale
  • Users who need auditable evolution traces (Genes, Capsules, Events)
  • Environments requiring deterministic, protocol-bound changes

Not For

  • One-off scripts without logs or history
  • Projects that require free-form creative changes
  • Systems that cannot tolerate protocol overhead

Features

  • Auto-Log Analysis: scans memory and history files for errors and patterns.
  • Self-Repair Guidance: emits repair-focused directives from signals.
  • GEP Protocol: standardized evolution with reusable assets.
  • Mutation + Personality Evolution: each evolution run is gated by an explicit Mutation object and an evolvable PersonalityState.
  • Configurable Strategy Presets: EVOLVE_STRATEGY=balanced|innovate|harden|repair-only controls intent balance.
  • Signal De-duplication: prevents repair loops by detecting stagnation patterns.
  • Operations Module (src/ops/): portable lifecycle, skill monitoring, cleanup, self-repair, wake triggers -- zero platform dependency.
  • Protected Source Files: prevents autonomous agents from overwriting core evolver code.
  • One-Command Evolution: node index.js to generate the prompt.

Typical Use Cases

  • Harden a flaky agent loop by enforcing validation before edits
  • Encode recurring fixes as reusable Genes and Capsules
  • Produce auditable evolution events for review or compliance

Anti-Examples

  • Rewriting entire subsystems without signals or constraints
  • Using the protocol as a generic task runner
  • Producing changes without recording EvolutionEvent

FAQ

Does this edit code automatically?
No. It generates a protocol-bound prompt and assets that guide evolution.

Do I need to use all GEP assets?
No. You can start with default Genes and extend over time.

Is this safe in production?
Use review mode and validation steps. Treat it as a safety-focused evolution tool, not a live patcher.

Roadmap

  • Add a one-minute demo workflow
  • Add a public changelog
  • Add a comparison table vs alternatives

GEP Protocol (Auditable Evolution)

This repo includes a protocol-constrained prompt mode based on GEP (Genome Evolution Protocol).

  • Structured assets live in assets/gep/:
    • assets/gep/genes.json
    • assets/gep/capsules.json
    • assets/gep/events.jsonl
  • Selector logic uses extracted signals to prefer existing Genes/Capsules and emits a JSON selector decision in the prompt.
  • Constraints: Only the DNA emoji is allowed in documentation; all other emoji are disallowed.

Usage

Standard Run (Automated)

node index.js

Review Mode (Human-in-the-Loop)

node index.js --review

Continuous Loop

node index.js --loop

With Strategy Preset

EVOLVE_STRATEGY=innovate node index.js --loop   # maximize new features
EVOLVE_STRATEGY=harden node index.js --loop     # focus on stability
EVOLVE_STRATEGY=repair-only node index.js --loop # emergency fix mode

Operations (Lifecycle Management)

node src/ops/lifecycle.js start    # start evolver loop in background
node src/ops/lifecycle.js stop     # graceful stop (SIGTERM -> SIGKILL)
node src/ops/lifecycle.js status   # show running state
node src/ops/lifecycle.js check    # health check + auto-restart if stagnant

Public Release

This repository is the public distribution.

  • Build public output: npm run build
  • Publish public output: npm run publish:public
  • Dry run: DRY_RUN=true npm run publish:public

Required env vars:

  • PUBLIC_REMOTE (default: public)
  • PUBLIC_REPO (e.g. autogame-17/evolver)
  • PUBLIC_OUT_DIR (default: dist-public)
  • PUBLIC_USE_BUILD_OUTPUT (default: true)

Optional env vars:

  • SOURCE_BRANCH (default: main)
  • PUBLIC_BRANCH (default: main)
  • RELEASE_TAG (e.g. v1.0.41)
  • RELEASE_TITLE (e.g. v1.0.41 - GEP protocol)
  • RELEASE_NOTES or RELEASE_NOTES_FILE
  • GITHUB_TOKEN (or GH_TOKEN / GITHUB_PAT) for GitHub Release creation
  • RELEASE_SKIP (true to skip creating a GitHub Release; default is to create)
  • RELEASE_USE_GH (true to use gh CLI instead of GitHub API)
  • PUBLIC_RELEASE_ONLY (true to only create a Release for an existing tag; no publish)

Versioning (SemVer)

MAJOR.MINOR.PATCH

  • MAJOR: incompatible changes
  • MINOR: backward-compatible features
  • PATCH: backward-compatible bug fixes

Changelog

v1.10.3

  • Configurable Blast Radius Policy: computeBlastRadius() now separates runtime artifacts (logs, memory, capsules, events) from functional code. Only code/config files count toward max_files constraints. Policy is configurable via openclaw.json at evolver.constraints.countedFilePolicy.
  • Structured Status Output: solidify() now generates a structured status payload (result, en, zh, meta) and writes it to a cycle status file, providing downstream reporters with rich evolution context (intent, gene, signals, blast radius, validation results).
  • Solidify CLI Observability: index.js solidify prints [SOLIDIFY_STATUS] and [SOLIDIFY_STATUS_FILE] lines for wrapper integration.

v1.10.1

  • Innovation Cooldown: Track recent innovation targets in analyzeRecentHistory() and inject Context [Innovation Cooldown] into GEP prompt, preventing the Hand Agent from repeatedly innovating on the same skill/module across consecutive cycles.
  • Signal Enhancement: analyzeRecentHistory() now returns recentInnovationTargets (map of target path to count in last 10 events).

v1.10.0

  • Operations Module (src/ops/): 6 portable modules extracted from environment-specific wrapper:
    • lifecycle.js -- process start/stop/restart/status/health check
    • skills_monitor.js -- skill health audit with auto-heal (npm install, SKILL.md stub)
    • cleanup.js -- GEP artifact disk cleanup
    • trigger.js -- wake signal mechanism
    • commentary.js -- persona-based cycle commentary
    • self_repair.js -- git emergency repair (abort rebase, remove stale locks)
  • Configurable Evolution Strategy (EVOLVE_STRATEGY env var):
    • 4 presets: balanced (default 50/30/20), innovate (80/15/5), harden (20/40/40), repair-only (0/20/80)
    • Strategy-aware signal filtering with per-preset repair loop thresholds
    • Backward compatible: FORCE_INNOVATION=true maps to innovate
  • Signal De-duplication: repair ratio check forces innovation when >= 50% of last 8 cycles are repairs (threshold varies by strategy).
  • Tool Usage Analytics: detects high-frequency tool usage patterns in logs (auto-evolved by Hand Agent).
  • Protected Source Files (GEP Section IX): evolver core .js files listed as immutable to prevent Hand Agent overwrites.
  • Forbidden Innovation Zones (GEP Section X): prevents creation of skills that duplicate existing infrastructure (process management, health monitoring, scheduling).
  • Known Issues List (GEP Section VII.6): tells the LLM to skip already-fixed errors.
  • Resilience: replaced process.exit(2) with throw Error() for MemoryGraph failures (loop survives transient errors).
  • Gene Limits Relaxed: repair max_files 12->20, innovate max_files 8->25.
  • paths.js: added getWorkspaceRoot(), getSkillsDir(), getLogsDir().

v1.9.2

  • Intermediate release with strategy presets and protected files.

v1.9.1

  • Signal de-duplication (repair ratio check).
  • Singleton Guard (PID lock file).
  • Environment fingerprint in GEP prompt.

v1.6.0

  • Add innovation/opportunity signal detection: user_feature_request, user_improvement_suggestion, perf_bottleneck, capability_gap, stable_success_plateau, external_opportunity.
  • Add innovate Gene (gene_gep_innovate_from_opportunity) for proactive feature development.
  • Auto-innovate mutation when opportunity signals are present (no longer requires --drift flag).
  • Personality evolution now responds to opportunity signals by increasing creativity.
  • Safety: repair still takes priority over innovate when errors are present.

v1.5.1

  • Add containerized vibe testing framework (Docker + node:22-bookworm, OpenClaw-compatible environment).
  • 7 end-to-end tests: module load, dry-run solidify, schema compliance, A2A round-trip, full evolve+solidify, loop gating, env fingerprint.
  • Add internal daemon loop with suicide guard for memory leak protection.
  • One-command test: npm run test:vibe.

v1.5.0

  • Add content-addressable asset IDs (SHA-256 canonical hashing) for deduplication, tamper detection, and cross-node consistency.
  • Add environment fingerprint capture (node version, platform, arch, evolver version) embedded in EvolutionEvents, Capsules, and ValidationReports.
  • Add standardized ValidationReport type with machine-readable schema, full command results, and env fingerprint.
  • Add GEP A2A protocol layer with 6 message types (hello/publish/fetch/report/decision/revoke) and pluggable transport interface.
  • Add FileTransport as default A2A transport (JSONL outbox/inbox).
  • Add asset_id integrity verification on A2A ingest; reject tampered assets.
  • Add schema_version field to all GEP asset types (Gene, Capsule, EvolutionEvent, ValidationReport).
  • Fix: dry-run mode no longer triggers rollback.
  • Merge backport/online-fixes: self-contained crash recovery with recover_loop.js.

v1.4.4

  • Add validation command safety check: Gene validation commands are gated by prefix whitelist (node/npm/npx) and shell operator blocking.
  • Add validation audit on A2A Gene promotion: external Genes with unsafe validation commands are rejected before promotion.
  • Add Security Model documentation to README.

v1.4.3

  • Release preparation for v1.4.3.

v1.4.2

  • Add loop gating: do not start a new cycle until the previous run is solidified (prevents fast empty cycles).
  • Preserve last_solidify when writing solidify state (merge instead of overwrite).

v1.4.1

  • Add execute-by-default bridge: after generating the GEP prompt, emit sessions_spawn(...) to spawn an executor agent.
  • Write prompt artifacts to memory/ for reliable handoff and auditing.

v1.4.0

  • Add explicit Mutation protocol (repair/optimize/innovate) and require Mutation per evolution run.
  • Add evolvable PersonalityState with small PersonalityMutation steps and natural selection statistics.
  • Extend EvolutionEvent with mutation_id and personality_state; record both into Memory Graph events.
  • Add scripts/gep_personality_report.js to observe personality success rates and convergence.

v1.3.1

  • Release preparation for v1.3.1.

v1.3.0

  • Release preparation for v1.3.0.

v1.2.0

  • Memory Graph v2 and A2A exchange protocol integration.

v1.1.0

  • Public build/publish pipeline, prompt budget enforcement, and structured GEP asset storage.

Security Model

This section describes the execution boundaries and trust model of the Capability Evolver.

What Executes and What Does Not

Component Behavior Executes Shell Commands?
src/evolve.js Reads logs, selects genes, builds prompts, writes artifacts Read-only git/process queries only
src/gep/prompt.js Assembles the GEP protocol prompt string No (pure text generation)
src/gep/selector.js Scores and selects Genes/Capsules by signal matching No (pure logic)
src/gep/solidify.js Validates patches via Gene validation commands Yes (see below)
index.js (loop recovery) Prints sessions_spawn(...) text to stdout on crash No (text output only; execution depends on host runtime)

Gene Validation Command Safety

solidify.js executes commands listed in a Gene's validation array. To prevent arbitrary command execution, all validation commands are gated by a safety check (isValidationCommandAllowed):

  1. Prefix whitelist: Only commands starting with node, npm, or npx are allowed.
  2. No command substitution: Backticks and $(...) are rejected anywhere in the command string.
  3. No shell operators: After stripping quoted content, ;, &, |, >, < are rejected.
  4. Timeout: Each command is limited to 180 seconds.
  5. Scoped execution: Commands run with cwd set to the repository root.

A2A External Asset Ingestion

External Gene/Capsule assets ingested via scripts/a2a_ingest.js are staged in an isolated candidate zone. Promotion to local stores (scripts/a2a_promote.js) requires:

  1. Explicit --validated flag (operator must verify the asset first).
  2. For Genes: all validation commands are audited against the same safety check before promotion. Unsafe commands cause the promotion to be rejected.
  3. Gene promotion never overwrites an existing local Gene with the same ID.

sessions_spawn Output

The sessions_spawn(...) strings in index.js and evolve.js are text output to stdout, not direct function calls. Whether they are interpreted depends on the host runtime (e.g., OpenClaw platform). The evolver itself does not invoke sessions_spawn as executable code.

Configuration & Decoupling

This skill is designed to be environment-agnostic. It uses standard OpenClaw tools by default.

Local Overrides (Injection)

You can inject local preferences (e.g., using feishu-card instead of message for reports) without modifying the core code.

Method 1: Environment Variables
Set EVOLVE_REPORT_TOOL in your .env file:

EVOLVE_REPORT_TOOL=feishu-card

Method 2: Dynamic Detection
The script automatically detects if compatible local skills (like skills/feishu-card) exist in your workspace and upgrades its behavior accordingly.

Star History

Star History Chart

Acknowledgments

  • onthebigtree -- Inspired the creation of evomap evolution network.
  • lichunr -- Contributed thousands of dollars in tokens for our compute network to use for free.
  • shinjiyu -- Submitted numerous bug reports for evolver and evomap.
  • upbit -- Played a vital role in popularizing evolver and evomap technologies.
  • More contributors to be added.

License

MIT

安全审计

高风险 触发一票否决

摘要

AI agents 的自我进化引擎。分析运行时历史以识别改进,并应用受协议约束的进化。

风险画像 危险 隐私 范围 声誉 质量

ToxicSkills 分析

黑名单
未命中
提示词注入
未检测到

Toxic 标签

credential-accessobfuscationmalwareexfiltration

当前静态检测未发现 Toxic 信号。

关键风险 0 项

暂无 LLM 风险要点(LLM 未启用或无缓存)。

确定性发现(证据)

规则 严重性 文件 片段
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 87
process.env.EVOLVE_LOOP = 'true';
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 88
process.env.EVOLVE_BRIDGE = 'false';
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 93
const minSleepMs = parseMs(process.env.EVOLVER_MIN_SLEEP_MS, 2000);
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 94
const maxSleepMs = parseMs(process.env.EVOLVER_MAX_SLEEP_MS, 300000);
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 95
const idleThresholdMs = parseMs(process.env.EVOLVER_IDLE_THRESHOLD_MS, 500);
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 97
process.env.EVOLVE_PENDING_SLEEP_MS ||
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 98
process.env.EVOLVE_MIN_INTERVAL ||
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 99
process.env.FEISHU_EVOLVER_INTERVAL,
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 103
const maxCyclesPerProcess = parseMs(process.env.EVOLVER_MAX_CYCLES_PER_PROCESS, 100) || 100;
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 104
const maxRssMb = parseMs(process.env.EVOLVER_MAX_RSS_MB, 500) || 500;
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 105
const suicideEnabled = String(process.env.EVOLVER_SUICIDE || '').toLowerCase() !== 'false';
SENSITIVE_ENV skills/autogame-17/evolver/index.js 行 147
env: process.env,
DYNAMIC_EVAL skills/autogame-17/evolver/scripts/a2a_export.js 行 24
var eligibleEvents = (Array.isArray(events) ? events : []).filter(function (e) {
SENSITIVE_ENV skills/autogame-17/evolver/scripts/a2a_ingest.js 行 13
var raw = process.env.A2A_SIGNALS || '';
DYNAMIC_EVAL skills/autogame-17/evolver/scripts/a2a_ingest.js 行 19
return String(raw).split(',').map(function (s) { return s.trim(); }).filter(Boolean);
SENSITIVE_ENV skills/autogame-17/evolver/scripts/a2a_ingest.js 行 28
var source = process.env.A2A_SOURCE || 'external';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/a2a_ingest.js 行 29
var factor = Number.isFinite(Number(process.env.A2A_EXTERNAL_CONFIDENCE_FACTOR))
SENSITIVE_ENV skills/autogame-17/evolver/scripts/a2a_ingest.js 行 30
? Number(process.env.A2A_EXTERNAL_CONFIDENCE_FACTOR) : 0.6;
SENSITIVE_ENV skills/autogame-17/evolver/scripts/a2a_ingest.js 行 38
var emitDecisions = process.env.A2A_EMIT_DECISIONS === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/a2a_promote.js 行 63
var emitDecisions = process.env.A2A_EMIT_DECISIONS === 'true';
KILL_SWITCH_FS_DELETE 严重 skills/autogame-17/evolver/scripts/build_public.js 行 17
fs.rmSync(dir, { recursive: true, force: true });
SENSITIVE_ENV skills/autogame-17/evolver/scripts/build_public.js 行 326
const releaseVersion = process.env.RELEASE_VERSION || semver.suggestedVersion;
KILL_SWITCH_FS_DELETE 严重 skills/autogame-17/evolver/scripts/publish_public.js 行 192
fs.rmSync(dir, { recursive: true, force: true });
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 248
return process.env.GITHUB_TOKEN || process.env.GH_TOKEN || process.env.GITHUB_PAT || '';
NET_HTTP_REQUEST skills/autogame-17/evolver/scripts/publish_public.js 行 283
const req = https.request(opts, res => {
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 352
const dryRun = String(process.env.DRY_RUN || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 354
const sourceBranch = process.env.SOURCE_BRANCH || 'main';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 355
const publicRemote = process.env.PUBLIC_REMOTE || 'public';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 356
const publicBranch = process.env.PUBLIC_BRANCH || 'main';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 357
const publicRepo = process.env.PUBLIC_REPO || '';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 358
const outDir = process.env.PUBLIC_OUT_DIR || 'dist-public';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 359
const useBuildOutput = String(process.env.PUBLIC_USE_BUILD_OUTPUT || 'true').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 360
const releaseOnly = String(process.env.PUBLIC_RELEASE_ONLY || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 362
const clawhubSkip = String(process.env.CLAWHUB_SKIP || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 363
const clawhubPublish = String(process.env.CLAWHUB_PUBLISH || '').toLowerCase() === 'false' ? false : !clawhubSkip;
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 365
const clawhubRegistry = process.env.CLAWHUB_REGISTRY || 'https://www.clawhub.ai';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 372
let releaseTag = process.env.RELEASE_TAG || '';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 373
let releaseTitle = process.env.RELEASE_TITLE || '';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 374
const releaseNotes = process.env.RELEASE_NOTES || '';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 375
const releaseNotesFile = process.env.RELEASE_NOTES_FILE || '';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 376
const releaseSkip = String(process.env.RELEASE_SKIP || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 380
const releaseCreate = String(process.env.RELEASE_CREATE || '').toLowerCase() === 'true' ? true : !releaseSkip;
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 381
const releaseUseGh = String(process.env.RELEASE_USE_GH || '').toLowerCase() === 'true';
KILL_SWITCH_FS_DELETE 严重 skills/autogame-17/evolver/scripts/publish_public.js 行 451
fs.rmSync(path.join(tmpRepoDir, ent.name), { recursive: true, force: true });
SENSITIVE_ENV skills/autogame-17/evolver/scripts/publish_public.js 行 527
process.env.CLAWHUB_REGISTRY = clawhubRegistry;
SENSITIVE_ENV skills/autogame-17/evolver/scripts/recover_loop.js 行 40
const waitMs = parseInt(String(process.env.EVOLVER_RECOVER_WAIT_MS || '10000'), 10);
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 50
const IS_RANDOM_DRIFT = ARGS.includes('--drift') || String(process.env.RANDOM_DRIFT || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 54
const AGENT_NAME = process.env.AGENT_NAME || 'main';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 294
if (!process.env.GEMINI_API_KEY) issues.push('Gemini Key Missing');
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 297
if (process.env.INTEGRATION_STATUS_CMD) {
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 299
const status = execSync(process.env.INTEGRATION_STATUS_CMD, {
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 336
const WORKSPACE_ROOT = process.env.OPENCLAW_WORKSPACE || path.resolve(REPO_ROOT, '../..');
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 573
const bridgeEnabled = String(process.env.EVOLVE_BRIDGE || '').toLowerCase() !== 'false';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 574
const loopMode = ARGS.includes('--loop') || ARGS.includes('--mad-dog') || String(process.env.EVOLVE_LOOP || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 594
const QUEUE_MAX = Number.parseInt(process.env.EVOLVE_AGENT_QUEUE_MAX || '10', 10);
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 595
const QUEUE_BACKOFF_MS = Number.parseInt(process.env.EVOLVE_AGENT_QUEUE_BACKOFF_MS || '60000', 10);
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 607
const LOAD_MAX = parseFloat(process.env.EVOLVE_LOAD_MAX || '2.0');
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 626
const raw = process.env.EVOLVE_PENDING_SLEEP_MS || process.env.EVOLVE_MIN_INTERVAL || '120000';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 639
// In --loop mode, process.env persists across cycles. The circuit breaker
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 658
delete process.env.FORCE_INNOVATION;
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 691
process.env.FORCE_INNOVATION = 'true';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 712
// Default Reporting: Use generic `message` tool or `process.env.EVOLVE_REPORT_CMD` if set.
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 721
if (process.env.EVOLVE_REPORT_DIRECTIVE) {
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 722
reportingDirective = process.env.EVOLVE_REPORT_DIRECTIVE.replace('__CYCLE_ID__', cycleId);
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 723
} else if (process.env.EVOLVE_REPORT_CMD) {
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 727
${process.env.EVOLVE_REPORT_CMD.replace('__CYCLE_ID__', cycleId)}
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 1070
String(process.env.FORCE_INNOVATION || process.env.EVOLVE_FORCE_INNOVATION || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 1321
const emitThought = String(process.env.EVOLVE_EMIT_THOUGHT_PROCESS || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/src/evolve.js 行 1338
const printPrompt = String(process.env.EVOLVE_PRINT_PROMPT || '').toLowerCase() === 'true';
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2a.js 行 21
var maxFiles = safeNumber(process.env.A2A_MAX_FILES, 5);
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2a.js 行 22
var maxLines = safeNumber(process.env.A2A_MAX_LINES, 200);
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2a.js 行 65
return Array.isArray(events) ? events.filter(function (e) { return e && e.type === 'EvolutionEvent'; }) : [];
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2a.js 行 106
var eligible = list.filter(function (c) { return isCapsuleBroadcastEligible(c, { events: evs }); });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2a.js 行 126
var eligible = list.filter(function (g) { return isGeneBroadcastEligible(g); });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2a.js 行 141
return maybe.map(function (item) { return unwrapAssetFromMessage(item) || item; }).filter(Boolean);
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2a.js 行 148
var lines = raw.split('\n').map(function (l) { return l.trim(); }).filter(Boolean);
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 35
if (process.env.A2A_NODE_ID) return String(process.env.A2A_NODE_ID);
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 37
const agentName = process.env.AGENT_NAME || 'default';
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 88
var nodeSecret = process.env.A2A_NODE_SECRET || getNodeId();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 118
var nodeSecret = process.env.A2A_NODE_SECRET || getNodeId();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 231
return process.env.A2A_DIR || path.join(getGepAssetsDir(), 'a2a');
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 247
var files = fs.readdirSync(subdir).filter(function (f) { return f.endsWith('.jsonl'); });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 252
var lines = raw.split('\n').map(function (l) { return l.trim(); }).filter(Boolean);
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 268
return fs.readdirSync(subdir).filter(function (f) { return f.endsWith('.jsonl'); });
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 274
var hubUrl = (opts && opts.hubUrl) || process.env.A2A_HUB_URL;
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 278
// Use dynamic import for fetch (available in Node 18+)
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 279
return fetch(endpoint, {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 284
.then(function (res) { return res.json(); })
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 285
.then(function (data) { return { ok: true, response: data }; })
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 286
.catch(function (err) { return { ok: false, error: err.message }; });
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 290
var hubUrl = (opts && opts.hubUrl) || process.env.A2A_HUB_URL;
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 295
return fetch(endpoint, {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 300
.then(function (res) { return res.json(); })
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 301
.then(function (data) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 307
.catch(function () { return []; });
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/a2aProtocol.js 行 330
var n = String(name || process.env.A2A_TRANSPORT || 'file').toLowerCase();
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/analyzer.js 行 17
while ((match = failureRegex.exec(content)) !== null) {
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/deviceId.js 行 176
if (process.env.EVOMAP_DEVICE_ID) {
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/deviceId.js 行 177
const envId = String(process.env.EVOMAP_DEVICE_ID).trim().toLowerCase();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/deviceId.js 行 197
if (inContainer && !process.env.EVOMAP_DEVICE_ID) {
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/hubSearch.js 行 12
return (process.env.A2A_HUB_URL || '').replace(/\/+$/, '');
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/hubSearch.js 行 16
const m = String(process.env.EVOLVER_REUSE_MODE || DEFAULT_REUSE_MODE).toLowerCase();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/hubSearch.js 行 21
const n = Number(process.env.EVOLVER_MIN_REUSE_SCORE);
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/hubSearch.js 行 91
const res = await fetch(url, {
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/memoryGraph.js 行 82
return process.env.MEMORY_GRAPH_PATH || path.join(evoDir, 'memory_graph.jsonl');
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/memoryGraphAdapter.js 行 77
const remoteUrl = process.env.MEMORY_GRAPH_REMOTE_URL || '';
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/memoryGraphAdapter.js 行 78
const remoteKey = process.env.MEMORY_GRAPH_REMOTE_KEY || '';
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/memoryGraphAdapter.js 行 79
const timeoutMs = Number(process.env.MEMORY_GRAPH_REMOTE_TIMEOUT_MS) || 5000;
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/memoryGraphAdapter.js 行 87
const res = await fetch(url, {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/memoryGraphAdapter.js 行 107
return async function (...args) {
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/memoryGraphAdapter.js 行 194
const provider = (process.env.MEMORY_GRAPH_PROVIDER || 'local').toLowerCase().trim();
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/mutation.js 行 46
var list = Array.isArray(signals) ? signals.map(function (s) { return String(s || ''); }) : [];
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/paths.js 行 14
return process.env.EVOLVER_LOGS_DIR || path.join(getWorkspaceRoot(), 'logs');
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/paths.js 行 18
return process.env.MEMORY_DIR || path.join(getWorkspaceRoot(), 'memory');
EXFIL_WEBHOOK 严重 skills/autogame-17/evolver/src/gep/paths.js 行 22
// When EVOLVER_SESSION_SCOPE is set (e.g., to a Discord channel ID or project name),
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/paths.js 行 27
const raw = String(process.env.EVOLVER_SESSION_SCOPE || '').trim();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/paths.js 行 35
const baseDir = process.env.EVOLUTION_DIR || path.join(getMemoryDir(), 'evolution');
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/paths.js 行 45
const baseDir = process.env.GEP_ASSETS_DIR || path.join(repoRoot, 'assets', 'gep');
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/paths.js 行 54
return process.env.SKILLS_DIR || path.join(getWorkspaceRoot(), 'skills');
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/prompt.js 行 350
Use process.env or .env references. Hardcoded App ID, App Secret, Bearer tokens = FAILED.
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/prompt.js 行 391
${process.env.EVOLVE_HINT ? process.env.EVOLVE_HINT : '(none)'}
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/prompt.js 行 424
cat > ${process.env.WORKSPACE_DIR || '.'}/logs/status_${cycleId}.json << 'STATUSEOF'
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/prompt.js 行 442
const maxChars = Number.isFinite(Number(process.env.GEP_PROMPT_MAX_CHARS)) ? Number(process.env.GEP_PROMPT_MAX_CHARS) : 50000;
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/selector.js 行 118
alternatives: filtered.filter(function(_, i) { return i !== selectedIdx; }).slice(0, 4).map(x => x.gene),
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 71
var recentIntents = recent.map(function(e) { return e.intent || 'unknown'; });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 155
.map(function (l) { return String(l || '').trim(); })
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 159
lines.find(function (l) { return /\b(typeerror|referenceerror|syntaxerror)\b\s*:|error\s*:|exception\s*:|\[error/i.test(l); }) ||
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 188
var recurringErrors = Object.entries(errorCounts).filter(function (e) { return e[1] >= 3; });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 192
var topErr = recurringErrors.sort(function (a, b) { return b[1] - a[1]; })[0];
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 251
Object.keys(toolUsage).forEach(function(tool) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 263
var actionable = signals.filter(function (s) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 274
signals = signals.filter(function (s) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 290
signals = signals.filter(function (s) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/signals.js 行 305
signals = signals.filter(function (s) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 279
console.error(`[Solidify] Top contributing directories: ${breakdown.map(function (d) { return d.dir + ' (' + d.files + ')'; }).join(', ')}`);
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/solidify.js 行 304
var allowSelfModify = String(process.env.EVOLVE_ALLOW_SELF_MODIFY || '').toLowerCase() === 'true';
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 331
newSkillDirs.forEach(function (skillName) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 334
var entries = fs.readdirSync(skillDir).filter(function (e) { return !e.startsWith('.'); });
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/solidify.js 行 375
const BLAST_RADIUS_HARD_CAP_FILES = Number(process.env.EVOLVER_HARD_CAP_FILES) || 60;
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/solidify.js 行 376
const BLAST_RADIUS_HARD_CAP_LINES = Number(process.env.EVOLVER_HARD_CAP_LINES) || 20000;
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 439
.sort(function (a, b) { return b[1] - a[1]; })
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 441
.map(function (e) { return { dir: e[0], files: e[1] }; });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 646
var sortedDirs = Array.from(dirsToCheck).sort(function (a, b) { return b.length - a.length; });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 921
commands: validation.results.map(function (r) { return r.cmd; }),
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/solidify.js 行 1080
const autoPublish = String(process.env.EVOLVER_AUTO_PUBLISH || 'true').toLowerCase() !== 'false';
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/solidify.js 行 1081
const visibility = String(process.env.EVOLVER_DEFAULT_VISIBILITY || 'public').toLowerCase();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/solidify.js 行 1082
const minPublishScore = Number(process.env.EVOLVER_MIN_PUBLISH_SCORE) || 0.78;
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/solidify.js 行 1090
const hubUrl = (process.env.A2A_HUB_URL || '').replace(/\/+$/, '');
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 1127
.then(function (res) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 1134
.catch(function (err) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 1170
.then(function (ok) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/solidify.js 行 1177
.catch(function (err) {
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/strategy.js 行 87
var name = String(process.env.EVOLVE_STRATEGY || 'balanced').toLowerCase().trim();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/strategy.js 行 90
if (!process.env.EVOLVE_STRATEGY) {
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/strategy.js 行 91
var fi = String(process.env.FORCE_INNOVATION || process.env.EVOLVE_FORCE_INNOVATION || '').toLowerCase();
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/strategy.js 行 97
var isDefault = !process.env.EVOLVE_STRATEGY || name === 'balanced' || name === 'auto';
SENSITIVE_ENV skills/autogame-17/evolver/src/gep/taskReceiver.js 行 8
const HUB_URL = process.env.A2A_HUB_URL || process.env.EVOMAP_HUB_URL || 'https://evomap.ai';
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/taskReceiver.js 行 36
const res = await fetch(url, {
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/taskReceiver.js 行 102
const res = await fetch(url, {
NET_HTTP_REQUEST skills/autogame-17/evolver/src/gep/taskReceiver.js 行 131
const res = await fetch(url, {
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/validationReport.js 行 12
const cmdsList = Array.isArray(commands) ? commands : resultsList.map(function (r) { return r && r.cmd ? String(r.cmd) : ''; });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/validationReport.js 行 13
const overallOk = resultsList.length > 0 && resultsList.every(function (r) { return r && r.ok; });
DYNAMIC_EVAL skills/autogame-17/evolver/src/gep/validationReport.js 行 24
commands: cmdsList.map(function (cmd, i) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 17
.filter(function(f) { return /^gep_prompt_.*\.(json|txt)$/.test(f); })
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 18
.map(function(f) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 23
.sort(function(a, b) { return b.mtime - a.mtime; }); // newest first
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 45
const args = batch.map(function(p) { return '"' + p + '"'; }).join(' ');
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 50
batch.forEach(function(p) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 61
.filter(function(f) { return /^gep_prompt_.*\.(json|txt)$/.test(f); })
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 62
.map(function(f) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 67
.sort(function(a, b) { return b.mtime - a.mtime; }); // newest first
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 72
const toDelete = remainingFiles.slice(MAX_FILES).map(function(f) { return f.path; });
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 82
const args = batch.map(function(p) { return '"' + p + '"'; }).join(' ');
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/cleanup.js 行 87
batch.forEach(function(p) {
SENSITIVE_ENV skills/autogame-17/evolver/src/ops/health_check.js 行 38
if (!process.env[key] || process.env[key].trim() === '') {
SENSITIVE_ENV skills/autogame-17/evolver/src/ops/health_check.js 行 48
if (!process.env[key] || process.env[key].trim() === '') {
SENSITIVE_ENV skills/autogame-17/evolver/src/ops/lifecycle.js 行 17
if (process.env.EVOLVER_LOOP_SCRIPT) return process.env.EVOLVER_LOOP_SCRIPT;
SENSITIVE_ENV skills/autogame-17/evolver/src/ops/lifecycle.js 行 73
var env = Object.assign({}, process.env);
SENSITIVE_ENV skills/autogame-17/evolver/src/ops/lifecycle.js 行 74
var npmGlobal = path.join(process.env.HOME || '', '.npm-global/bin');
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/lifecycle.js 行 124
return { running: true, pids: pids.map(function(p) { return { pid: p, cmd: getCmdLine(p) }; }), log: path.relative(WORKSPACE_ROOT, LOG_FILE) };
SENSITIVE_ENV skills/autogame-17/evolver/src/ops/self_repair.js 行 45
if (process.env.EVOLVE_GIT_RESET === 'true') {
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/skills_monitor.js 行 22
fs.readFileSync(ignoreFile, 'utf8').split('\n').forEach(function(l) {
DYNAMIC_EVAL skills/autogame-17/evolver/src/ops/skills_monitor.js 行 128
result.issues = result.issues.filter(function(issue) { return !healed.includes(issue); });
QUALITY_README_PRESENT README 行 无
README detected

评分标准

每个技能从 5 个维度评分,加权总分决定星级。

代码毒性 0/100 (权重 30%)
隐私风险 0/100 (权重 25%)
权限范围 60/100 (权重 20%)
作者声誉 75/100 (权重 15%)
代码质量 78/100 (权重 10%)

星级说明

5★ 安全 — 总分 ≥ 80
4★ 良好 — 总分 70–79
3★ 注意 — 总分 60–69
2★ 有风险 — 总分 40–59
1★ 危险 — 总分 < 40

为何是这个评分?

触发一票否决:检测到关键安全漏洞,无论各维度得分如何,风险等级直接判定为"高风险"。

更多技能

VettedSkillsHub

从 ClawHub(ClawdBot / OpenClaw 官方市场)精选下载量前 100 的技能,进行独立 5 维度安全审计。证据透明可查,评分可复现,一键安装。

关于

本站评分为 best-effort 静态分析,分数可复现、证据可追溯。在敏感环境中仍应进行人工审计与隔离部署。

© 2026 VettedSkillsHub。ClawdBot 和 OpenClaw 为社区项目。