Capability Evolver
About This Skill
A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.
Use Cases
Documentation (Original)
Source: README.md🧬 Capability Evolver

"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.jsto 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-onlycontrols 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.jsto 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.jsonassets/gep/capsules.jsonassets/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_NOTESorRELEASE_NOTES_FILEGITHUB_TOKEN(orGH_TOKEN/GITHUB_PAT) for GitHub Release creationRELEASE_SKIP(trueto skip creating a GitHub Release; default is to create)RELEASE_USE_GH(trueto useghCLI instead of GitHub API)PUBLIC_RELEASE_ONLY(trueto 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 towardmax_filesconstraints. Policy is configurable viaopenclaw.jsonatevolver.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 solidifyprints[SOLIDIFY_STATUS]and[SOLIDIFY_STATUS_FILE]lines for wrapper integration.
v1.10.1
- Innovation Cooldown: Track recent innovation targets in
analyzeRecentHistory()and injectContext [Innovation Cooldown]into GEP prompt, preventing the Hand Agent from repeatedly innovating on the same skill/module across consecutive cycles. - Signal Enhancement:
analyzeRecentHistory()now returnsrecentInnovationTargets(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 checkskills_monitor.js-- skill health audit with auto-heal (npm install, SKILL.md stub)cleanup.js-- GEP artifact disk cleanuptrigger.js-- wake signal mechanismcommentary.js-- persona-based cycle commentaryself_repair.js-- git emergency repair (abort rebase, remove stale locks)
- Configurable Evolution Strategy (
EVOLVE_STRATEGYenv 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=truemaps toinnovate
- 4 presets:
- 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)withthrow Error()for MemoryGraph failures (loop survives transient errors). - Gene Limits Relaxed: repair max_files 12->20, innovate max_files 8->25.
paths.js: addedgetWorkspaceRoot(),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_solidifywhen 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_idandpersonality_state; record both into Memory Graph events. - Add
scripts/gep_personality_report.jsto 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):
- Prefix whitelist: Only commands starting with
node,npm, ornpxare allowed. - No command substitution: Backticks and
$(...)are rejected anywhere in the command string. - No shell operators: After stripping quoted content,
;,&,|,>,<are rejected. - Timeout: Each command is limited to 180 seconds.
- Scoped execution: Commands run with
cwdset 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:
- Explicit
--validatedflag (operator must verify the asset first). - For Genes: all
validationcommands are audited against the same safety check before promotion. Unsafe commands cause the promotion to be rejected. - 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
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
Security Audit
Summary
A self-evolution engine for AI agents. Analyzes runtime history to identify improvements and applies protocol-constrained evolution.
ToxicSkills Analysis
Toxic Flags
No Toxic signals detected by current static checks.
Key Risks 0 items
Deterministic Findings (Evidence)
| Rule | Severity | File | Snippet |
|---|---|---|---|
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 87 | process.env.EVOLVE_LOOP = 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 88 | process.env.EVOLVE_BRIDGE = 'false'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 93 | const minSleepMs = parseMs(process.env.EVOLVER_MIN_SLEEP_MS, 2000); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 94 | const maxSleepMs = parseMs(process.env.EVOLVER_MAX_SLEEP_MS, 300000); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 95 | const idleThresholdMs = parseMs(process.env.EVOLVER_IDLE_THRESHOLD_MS, 500); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 97 | process.env.EVOLVE_PENDING_SLEEP_MS || |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 98 | process.env.EVOLVE_MIN_INTERVAL || |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 99 | process.env.FEISHU_EVOLVER_INTERVAL, |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 103 | const maxCyclesPerProcess = parseMs(process.env.EVOLVER_MAX_CYCLES_PER_PROCESS, 100) || 100; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 104 | const maxRssMb = parseMs(process.env.EVOLVER_MAX_RSS_MB, 500) || 500; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 105 | const suicideEnabled = String(process.env.EVOLVER_SUICIDE || '').toLowerCase() !== 'false'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/index.js Line 147 | env: process.env, |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/scripts/a2a_export.js Line 24 | var eligibleEvents = (Array.isArray(events) ? events : []).filter(function (e) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/a2a_ingest.js Line 13 | var raw = process.env.A2A_SIGNALS || ''; |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/scripts/a2a_ingest.js Line 19 | return String(raw).split(',').map(function (s) { return s.trim(); }).filter(Boolean); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/a2a_ingest.js Line 28 | var source = process.env.A2A_SOURCE || 'external'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/a2a_ingest.js Line 29 | var factor = Number.isFinite(Number(process.env.A2A_EXTERNAL_CONFIDENCE_FACTOR)) |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/a2a_ingest.js Line 30 | ? Number(process.env.A2A_EXTERNAL_CONFIDENCE_FACTOR) : 0.6; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/a2a_ingest.js Line 38 | var emitDecisions = process.env.A2A_EMIT_DECISIONS === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/a2a_promote.js Line 63 | var emitDecisions = process.env.A2A_EMIT_DECISIONS === 'true'; |
| KILL_SWITCH_FS_DELETE | critical | skills/autogame-17/capability-evolver/scripts/build_public.js Line 17 | fs.rmSync(dir, { recursive: true, force: true }); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/build_public.js Line 326 | const releaseVersion = process.env.RELEASE_VERSION || semver.suggestedVersion; |
| KILL_SWITCH_FS_DELETE | critical | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 192 | fs.rmSync(dir, { recursive: true, force: true }); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 248 | return process.env.GITHUB_TOKEN || process.env.GH_TOKEN || process.env.GITHUB_PAT || ''; |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 283 | const req = https.request(opts, res => { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 352 | const dryRun = String(process.env.DRY_RUN || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 354 | const sourceBranch = process.env.SOURCE_BRANCH || 'main'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 355 | const publicRemote = process.env.PUBLIC_REMOTE || 'public'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 356 | const publicBranch = process.env.PUBLIC_BRANCH || 'main'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 357 | const publicRepo = process.env.PUBLIC_REPO || ''; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 358 | const outDir = process.env.PUBLIC_OUT_DIR || 'dist-public'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 359 | const useBuildOutput = String(process.env.PUBLIC_USE_BUILD_OUTPUT || 'true').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 360 | const releaseOnly = String(process.env.PUBLIC_RELEASE_ONLY || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 362 | const clawhubSkip = String(process.env.CLAWHUB_SKIP || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 363 | const clawhubPublish = String(process.env.CLAWHUB_PUBLISH || '').toLowerCase() === 'false' ? false : !clawhubSkip; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 365 | const clawhubRegistry = process.env.CLAWHUB_REGISTRY || 'https://www.clawhub.ai'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 372 | let releaseTag = process.env.RELEASE_TAG || ''; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 373 | let releaseTitle = process.env.RELEASE_TITLE || ''; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 374 | const releaseNotes = process.env.RELEASE_NOTES || ''; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 375 | const releaseNotesFile = process.env.RELEASE_NOTES_FILE || ''; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 376 | const releaseSkip = String(process.env.RELEASE_SKIP || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 380 | const releaseCreate = String(process.env.RELEASE_CREATE || '').toLowerCase() === 'true' ? true : !releaseSkip; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 381 | const releaseUseGh = String(process.env.RELEASE_USE_GH || '').toLowerCase() === 'true'; |
| KILL_SWITCH_FS_DELETE | critical | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 451 | fs.rmSync(path.join(tmpRepoDir, ent.name), { recursive: true, force: true }); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/publish_public.js Line 527 | process.env.CLAWHUB_REGISTRY = clawhubRegistry; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/scripts/recover_loop.js Line 40 | const waitMs = parseInt(String(process.env.EVOLVER_RECOVER_WAIT_MS || '10000'), 10); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 50 | const IS_RANDOM_DRIFT = ARGS.includes('--drift') || String(process.env.RANDOM_DRIFT || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 54 | const AGENT_NAME = process.env.AGENT_NAME || 'main'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 294 | if (!process.env.GEMINI_API_KEY) issues.push('Gemini Key Missing'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 297 | if (process.env.INTEGRATION_STATUS_CMD) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 299 | const status = execSync(process.env.INTEGRATION_STATUS_CMD, { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 336 | const WORKSPACE_ROOT = process.env.OPENCLAW_WORKSPACE || path.resolve(REPO_ROOT, '../..'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 573 | const bridgeEnabled = String(process.env.EVOLVE_BRIDGE || '').toLowerCase() !== 'false'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 574 | const loopMode = ARGS.includes('--loop') || ARGS.includes('--mad-dog') || String(process.env.EVOLVE_LOOP || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 594 | const QUEUE_MAX = Number.parseInt(process.env.EVOLVE_AGENT_QUEUE_MAX || '10', 10); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 595 | const QUEUE_BACKOFF_MS = Number.parseInt(process.env.EVOLVE_AGENT_QUEUE_BACKOFF_MS || '60000', 10); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 607 | const LOAD_MAX = parseFloat(process.env.EVOLVE_LOAD_MAX || '2.0'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 626 | const raw = process.env.EVOLVE_PENDING_SLEEP_MS || process.env.EVOLVE_MIN_INTERVAL || '120000'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 639 | // In --loop mode, process.env persists across cycles. The circuit breaker |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 658 | delete process.env.FORCE_INNOVATION; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 691 | process.env.FORCE_INNOVATION = 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 712 | // Default Reporting: Use generic `message` tool or `process.env.EVOLVE_REPORT_CMD` if set. |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 721 | if (process.env.EVOLVE_REPORT_DIRECTIVE) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 722 | reportingDirective = process.env.EVOLVE_REPORT_DIRECTIVE.replace('__CYCLE_ID__', cycleId); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 723 | } else if (process.env.EVOLVE_REPORT_CMD) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 727 | ${process.env.EVOLVE_REPORT_CMD.replace('__CYCLE_ID__', cycleId)} |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 1070 | String(process.env.FORCE_INNOVATION || process.env.EVOLVE_FORCE_INNOVATION || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 1321 | const emitThought = String(process.env.EVOLVE_EMIT_THOUGHT_PROCESS || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/evolve.js Line 1338 | const printPrompt = String(process.env.EVOLVE_PRINT_PROMPT || '').toLowerCase() === 'true'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2a.js Line 21 | var maxFiles = safeNumber(process.env.A2A_MAX_FILES, 5); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2a.js Line 22 | var maxLines = safeNumber(process.env.A2A_MAX_LINES, 200); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2a.js Line 65 | return Array.isArray(events) ? events.filter(function (e) { return e && e.type === 'EvolutionEvent'; }) : []; |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2a.js Line 106 | var eligible = list.filter(function (c) { return isCapsuleBroadcastEligible(c, { events: evs }); }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2a.js Line 126 | var eligible = list.filter(function (g) { return isGeneBroadcastEligible(g); }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2a.js Line 141 | return maybe.map(function (item) { return unwrapAssetFromMessage(item) || item; }).filter(Boolean); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2a.js Line 148 | var lines = raw.split('\n').map(function (l) { return l.trim(); }).filter(Boolean); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 35 | if (process.env.A2A_NODE_ID) return String(process.env.A2A_NODE_ID); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 37 | const agentName = process.env.AGENT_NAME || 'default'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 88 | var nodeSecret = process.env.A2A_NODE_SECRET || getNodeId(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 118 | var nodeSecret = process.env.A2A_NODE_SECRET || getNodeId(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 231 | return process.env.A2A_DIR || path.join(getGepAssetsDir(), 'a2a'); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 247 | var files = fs.readdirSync(subdir).filter(function (f) { return f.endsWith('.jsonl'); }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 252 | var lines = raw.split('\n').map(function (l) { return l.trim(); }).filter(Boolean); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 268 | return fs.readdirSync(subdir).filter(function (f) { return f.endsWith('.jsonl'); }); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 274 | var hubUrl = (opts && opts.hubUrl) || process.env.A2A_HUB_URL; |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 278 | // Use dynamic import for fetch (available in Node 18+) |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 279 | return fetch(endpoint, { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 284 | .then(function (res) { return res.json(); }) |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 285 | .then(function (data) { return { ok: true, response: data }; }) |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 286 | .catch(function (err) { return { ok: false, error: err.message }; }); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 290 | var hubUrl = (opts && opts.hubUrl) || process.env.A2A_HUB_URL; |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 295 | return fetch(endpoint, { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 300 | .then(function (res) { return res.json(); }) |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 301 | .then(function (data) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 307 | .catch(function () { return []; }); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/a2aProtocol.js Line 330 | var n = String(name || process.env.A2A_TRANSPORT || 'file').toLowerCase(); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/analyzer.js Line 17 | while ((match = failureRegex.exec(content)) !== null) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/deviceId.js Line 176 | if (process.env.EVOMAP_DEVICE_ID) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/deviceId.js Line 177 | const envId = String(process.env.EVOMAP_DEVICE_ID).trim().toLowerCase(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/deviceId.js Line 197 | if (inContainer && !process.env.EVOMAP_DEVICE_ID) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/hubSearch.js Line 12 | return (process.env.A2A_HUB_URL || '').replace(/\/+$/, ''); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/hubSearch.js Line 16 | const m = String(process.env.EVOLVER_REUSE_MODE || DEFAULT_REUSE_MODE).toLowerCase(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/hubSearch.js Line 21 | const n = Number(process.env.EVOLVER_MIN_REUSE_SCORE); |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/hubSearch.js Line 91 | const res = await fetch(url, { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/memoryGraph.js Line 82 | return process.env.MEMORY_GRAPH_PATH || path.join(evoDir, 'memory_graph.jsonl'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/memoryGraphAdapter.js Line 77 | const remoteUrl = process.env.MEMORY_GRAPH_REMOTE_URL || ''; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/memoryGraphAdapter.js Line 78 | const remoteKey = process.env.MEMORY_GRAPH_REMOTE_KEY || ''; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/memoryGraphAdapter.js Line 79 | const timeoutMs = Number(process.env.MEMORY_GRAPH_REMOTE_TIMEOUT_MS) || 5000; |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/memoryGraphAdapter.js Line 87 | const res = await fetch(url, { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/memoryGraphAdapter.js Line 107 | return async function (...args) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/memoryGraphAdapter.js Line 194 | const provider = (process.env.MEMORY_GRAPH_PROVIDER || 'local').toLowerCase().trim(); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/mutation.js Line 46 | var list = Array.isArray(signals) ? signals.map(function (s) { return String(s || ''); }) : []; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/paths.js Line 14 | return process.env.EVOLVER_LOGS_DIR || path.join(getWorkspaceRoot(), 'logs'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/paths.js Line 18 | return process.env.MEMORY_DIR || path.join(getWorkspaceRoot(), 'memory'); |
| EXFIL_WEBHOOK | critical | skills/autogame-17/capability-evolver/src/gep/paths.js Line 22 | // When EVOLVER_SESSION_SCOPE is set (e.g., to a Discord channel ID or project name), |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/paths.js Line 27 | const raw = String(process.env.EVOLVER_SESSION_SCOPE || '').trim(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/paths.js Line 35 | const baseDir = process.env.EVOLUTION_DIR || path.join(getMemoryDir(), 'evolution'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/paths.js Line 45 | const baseDir = process.env.GEP_ASSETS_DIR || path.join(repoRoot, 'assets', 'gep'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/paths.js Line 54 | return process.env.SKILLS_DIR || path.join(getWorkspaceRoot(), 'skills'); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/prompt.js Line 350 | Use process.env or .env references. Hardcoded App ID, App Secret, Bearer tokens = FAILED. |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/prompt.js Line 391 | ${process.env.EVOLVE_HINT ? process.env.EVOLVE_HINT : '(none)'} |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/prompt.js Line 424 | cat > ${process.env.WORKSPACE_DIR || '.'}/logs/status_${cycleId}.json << 'STATUSEOF' |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/prompt.js Line 442 | const maxChars = Number.isFinite(Number(process.env.GEP_PROMPT_MAX_CHARS)) ? Number(process.env.GEP_PROMPT_MAX_CHARS) : 50000; |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/selector.js Line 118 | alternatives: filtered.filter(function(_, i) { return i !== selectedIdx; }).slice(0, 4).map(x => x.gene), |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 71 | var recentIntents = recent.map(function(e) { return e.intent || 'unknown'; }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 155 | .map(function (l) { return String(l || '').trim(); }) |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 159 | lines.find(function (l) { return /\b(typeerror|referenceerror|syntaxerror)\b\s*:|error\s*:|exception\s*:|\[error/i.test(l); }) || |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 188 | var recurringErrors = Object.entries(errorCounts).filter(function (e) { return e[1] >= 3; }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 192 | var topErr = recurringErrors.sort(function (a, b) { return b[1] - a[1]; })[0]; |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 251 | Object.keys(toolUsage).forEach(function(tool) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 263 | var actionable = signals.filter(function (s) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 274 | signals = signals.filter(function (s) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 290 | signals = signals.filter(function (s) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/signals.js Line 305 | signals = signals.filter(function (s) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 279 | console.error(`[Solidify] Top contributing directories: ${breakdown.map(function (d) { return d.dir + ' (' + d.files + ')'; }).join(', ')}`); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 304 | var allowSelfModify = String(process.env.EVOLVE_ALLOW_SELF_MODIFY || '').toLowerCase() === 'true'; |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 331 | newSkillDirs.forEach(function (skillName) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 334 | var entries = fs.readdirSync(skillDir).filter(function (e) { return !e.startsWith('.'); }); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 375 | const BLAST_RADIUS_HARD_CAP_FILES = Number(process.env.EVOLVER_HARD_CAP_FILES) || 60; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 376 | const BLAST_RADIUS_HARD_CAP_LINES = Number(process.env.EVOLVER_HARD_CAP_LINES) || 20000; |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 439 | .sort(function (a, b) { return b[1] - a[1]; }) |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 441 | .map(function (e) { return { dir: e[0], files: e[1] }; }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 646 | var sortedDirs = Array.from(dirsToCheck).sort(function (a, b) { return b.length - a.length; }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 921 | commands: validation.results.map(function (r) { return r.cmd; }), |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1080 | const autoPublish = String(process.env.EVOLVER_AUTO_PUBLISH || 'true').toLowerCase() !== 'false'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1081 | const visibility = String(process.env.EVOLVER_DEFAULT_VISIBILITY || 'public').toLowerCase(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1082 | const minPublishScore = Number(process.env.EVOLVER_MIN_PUBLISH_SCORE) || 0.78; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1090 | const hubUrl = (process.env.A2A_HUB_URL || '').replace(/\/+$/, ''); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1127 | .then(function (res) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1134 | .catch(function (err) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1170 | .then(function (ok) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/solidify.js Line 1177 | .catch(function (err) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/strategy.js Line 87 | var name = String(process.env.EVOLVE_STRATEGY || 'balanced').toLowerCase().trim(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/strategy.js Line 90 | if (!process.env.EVOLVE_STRATEGY) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/strategy.js Line 91 | var fi = String(process.env.FORCE_INNOVATION || process.env.EVOLVE_FORCE_INNOVATION || '').toLowerCase(); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/strategy.js Line 97 | var isDefault = !process.env.EVOLVE_STRATEGY || name === 'balanced' || name === 'auto'; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/gep/taskReceiver.js Line 8 | const HUB_URL = process.env.A2A_HUB_URL || process.env.EVOMAP_HUB_URL || 'https://evomap.ai'; |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/taskReceiver.js Line 36 | const res = await fetch(url, { |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/taskReceiver.js Line 102 | const res = await fetch(url, { |
| NET_HTTP_REQUEST | medium | skills/autogame-17/capability-evolver/src/gep/taskReceiver.js Line 131 | const res = await fetch(url, { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/validationReport.js Line 12 | const cmdsList = Array.isArray(commands) ? commands : resultsList.map(function (r) { return r && r.cmd ? String(r.cmd) : ''; }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/validationReport.js Line 13 | const overallOk = resultsList.length > 0 && resultsList.every(function (r) { return r && r.ok; }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/gep/validationReport.js Line 24 | commands: cmdsList.map(function (cmd, i) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 17 | .filter(function(f) { return /^gep_prompt_.*\.(json|txt)$/.test(f); }) |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 18 | .map(function(f) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 23 | .sort(function(a, b) { return b.mtime - a.mtime; }); // newest first |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 45 | const args = batch.map(function(p) { return '"' + p + '"'; }).join(' '); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 50 | batch.forEach(function(p) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 61 | .filter(function(f) { return /^gep_prompt_.*\.(json|txt)$/.test(f); }) |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 62 | .map(function(f) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 67 | .sort(function(a, b) { return b.mtime - a.mtime; }); // newest first |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 72 | const toDelete = remainingFiles.slice(MAX_FILES).map(function(f) { return f.path; }); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 82 | const args = batch.map(function(p) { return '"' + p + '"'; }).join(' '); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/cleanup.js Line 87 | batch.forEach(function(p) { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/ops/health_check.js Line 38 | if (!process.env[key] || process.env[key].trim() === '') { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/ops/health_check.js Line 48 | if (!process.env[key] || process.env[key].trim() === '') { |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/ops/lifecycle.js Line 17 | if (process.env.EVOLVER_LOOP_SCRIPT) return process.env.EVOLVER_LOOP_SCRIPT; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/ops/lifecycle.js Line 73 | var env = Object.assign({}, process.env); |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/ops/lifecycle.js Line 74 | var npmGlobal = path.join(process.env.HOME || '', '.npm-global/bin'); |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/lifecycle.js Line 124 | return { running: true, pids: pids.map(function(p) { return { pid: p, cmd: getCmdLine(p) }; }), log: path.relative(WORKSPACE_ROOT, LOG_FILE) }; |
| SENSITIVE_ENV | medium | skills/autogame-17/capability-evolver/src/ops/self_repair.js Line 45 | if (process.env.EVOLVE_GIT_RESET === 'true') { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/skills_monitor.js Line 22 | fs.readFileSync(ignoreFile, 'utf8').split('\n').forEach(function(l) { |
| DYNAMIC_EVAL | high | skills/autogame-17/capability-evolver/src/ops/skills_monitor.js Line 128 | result.issues = result.issues.filter(function(issue) { return !healed.includes(issue); }); |
| QUALITY_README_PRESENT | low | README Line n/a | README detected |
Scoring Criteria
Each skill is scored across 5 dimensions. The weighted total determines the star rating.
Star Rating Scale
Why This Score?
Kill switch triggered: a critical vulnerability was detected that overrides the score to High risk regardless of dimensions.