算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
memory-keeper【设计与创意】Distil accumulated experience records (experiences.jsonl) into updated domain knowledge summaries (knowledge.md) for any chip-design domain. Run after every 10 orchestrator sessions, or on demand when a domain has collected new issue/fix patterns.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
/chip-design-infrastructure:memory-keeper [--domain <name>] [--all] [--min-records <n>] [--init]
--domain <name> — distil a single domain (e.g. synthesis, sta, pd)--all — distil every domain that has an experiences.jsonl with enough records--min-records <n> — minimum record count to proceed (default: 5); skip domains below threshold--init — resolve and seed the central memory root, migrating any repo-local runtime data
(runs memory_root.py --init); no distillation. Use once after install or to inspect the location.If neither --domain nor --all nor --init is given, prompt the user to choose.
Memory does not live at a fixed relative memory/ path. The active root is resolved by
memory_root.py (the single source of truth that distill.py and tools/qor_trends.py import),
in this priority order:
--memory-root PATH argument$CHIP_DESIGN_MEMORY_ROOT environment variable${XDG_DATA_HOME:-$HOME/.local/share}/chip-design-agents/digital/memory
(Windows: %LOCALAPPDATA%\chip-design-agents\digital\memory)memory/ tree as a seed fallback (used only if the central root is unwritable)The in-repo memory/ tree is the version-controlled seed: on first resolution each
<domain>/knowledge.md is copied into the central root if absent (never overwriting accumulated
data; runtime experiences.jsonl/run_state.md are never seeded). Orchestrators resolve this same
root at session start and use it as <MEM> for every read/write. To print the resolved path:
python3 plugins/infrastructure/skills/memory-keeper/memory_root.py # prints the root
python3 plugins/infrastructure/skills/memory-keeper/memory_root.py --init # seed + migrate + report
Per-project scoping (opt-out of the central store): export CHIP_DESIGN_MEMORY_ROOT="$PWD/memory"
(or pass --memory-root ./memory to the scripts).
Orchestrators write one JSON record to memory/<domain>/experiences.jsonl after every run.
Over time those records accumulate issue descriptions, applied fixes, metric ranges, and
tool-flag observations. This skill reads that evidence and merges the new learnings into
memory/<domain>/knowledge.md — the Tier-2 summary that every orchestrator reads at session
start. Without periodic distillation, knowledge.md drifts stale while the evidence log grows.
Valid domain names match the subdirectories under memory/:
| Domain | JSONL path |
|---|---|
architecture | memory/architecture/experiences.jsonl |
compiler | memory/compiler/experiences.jsonl |
dft | memory/dft/experiences.jsonl |
firmware | memory/firmware/experiences.jsonl |
formal | memory/formal/experiences.jsonl |
fpga | memory/fpga/experiences.jsonl |
hls | memory/hls/experiences.jsonl |
infrastructure | memory/infrastructure/experiences.jsonl (opt-in; env-keyed) |
memory-ip | memory/memory-ip/experiences.jsonl |
pd | memory/pd/experiences.jsonl |
rtl-design | memory/rtl-design/experiences.jsonl |
soc | memory/soc/experiences.jsonl |
sta | memory/sta/experiences.jsonl |
synthesis | memory/synthesis/experiences.jsonl |
verification | memory/verification/experiences.jsonl |
memory/<domain>/experiences.jsonl (one JSON object per line).--min-records (default 5), print a skip notice and
stop — not enough signal to distil.issues_encountered and fixes_applied stringsnotes and fixes_applied for explicit flag/command patterns
(lines containing -, --, or backtick-quoted commands)key_metrics, collect the list of values
across all records; compute min, max, median, and the most recent valuerecords_read: total valid JSONL records parsed (target ≥ min-records threshold)records_skipped: malformed lines ignored (target: 0)signoff_rate: fraction of records where signoff_achieved: true (informational)Structured summary object (in-memory) passed to distil_knowledge:
{
"domain": "<domain>",
"record_count": "<n>",
"date_range": ["<oldest ISO-8601>", "<newest ISO-8601>"],
"signoff_rate": "<fraction>",
"issue_fix_pairs": [{"issue": "...", "fix": "...", "count": "<n>"}],
"tool_flag_candidates": ["<flag or command fragment>"],
"metric_ranges": {
"<metric_field>": {"min": "x", "max": "y", "median": "z", "latest": "w"}
},
"free_notes": ["<note string>"]
}
memory/<domain>/knowledge.md in full.load_experiences, identify new evidence that is
not already captured in the current knowledge.md:
## Notes section with a distillation timestamp:
_Last distilled: <ISO-8601 date> from <n> experience records._
Replace any previous such line.memory/<domain>/knowledge.md.| Scenario | Action |
|---|---|
| New issue/fix not in knowledge.md | Add under Known Failure Patterns |
| Existing entry confirmed by ≥ 3 records | Add (confirmed across N runs) annotation |
| Existing entry contradicted by ≥ 3 records | Strike through old text, add corrected entry |
| New tool flag observed in ≥ 2 records | Add under Successful Tool Flags |
| Single-record observation | Add only if signoff_achieved: true and notes are detailed |
new_failure_patterns: new entries added under Known Failure Patterns (target ≥ 1 if new issues exist)new_tool_flags: new entries added under Successful Tool Flags (target ≥ 1 if new flags observed)existing_entries_annotated: count of existing entries updated with confirmation or correction notescontradictions_flagged: entries where new evidence contradicts old — must never be silently overwrittenmemory/<domain>/knowledge.mdAfter writing knowledge.md, if mcp__plugin_ecc_memory__add_observations is available
in this session, emit each new issue/fix pair as an observation to entity
chip-design-<domain>-fixes. Skip this step silently if the tool is absent — knowledge.md
and experiences.jsonl are the canonical records. Do not hard-depend on claude-mem
availability.
Domain: <domain>
Records read: <n>
Date range: <oldest> → <newest>
Signoff rate: <pct>%
New entries: +<k> Known Failure Patterns, +<j> Successful Tool Flags, +<i> PDK Quirks
Annotations: <m> existing entries updated
knowledge.md: memory/<domain>/knowledge.md [updated]
--all was used, print a summary table across all processed domains.domains_processed: count of domains where knowledge.md was updated (target ≥ 1)domains_skipped: count of domains below the min-records threshold (informational)--all: printed summary table across all processed and skipped domainsexperiences.jsonl read; record count ≥ min-records thresholdknowledge.md read without modification during analysisknowledge.md written back to disk# Distil synthesis domain (must have ≥ 5 records)
/chip-design-infrastructure:memory-keeper --domain synthesis
# Distil all domains with ≥ 10 records
/chip-design-infrastructure:memory-keeper --all --min-records 10
# Force distillation even with 3 records (debugging or early feedback)
/chip-design-infrastructure:memory-keeper --domain sta --min-records 3