# KEY Agent Compiler CLI Documentation ═══════════════════════════════════════════════════════════════════════════════ ## Overview The KEY Agent Compiler (`agent_compiler.py`) compiles evolved brain agents into self-contained Python capsules. Each capsule is a "Glass Box AI" - fully transparent with embedded documentation and cryptographic provenance. ## Brain Types Supported | Type | Class | Quine Class | Description | |------------|------------------|----------------------|--------------------------------| | mlp | MLPBrain | QuineBrainMLP | Simple MLP baseline | | dreamer | DreamerBrain | QuineBrain | DreamerV3 world model + LoRA | | scarecrow | ScarecrowBrain | QuineScarecrowBrain | Universal model wrapper | | council | CouncilBrain | QuineCouncilBrain | Multi-agent consensus | | embedding | EmbeddingBrain | QuineEmbeddingBrain | Sentence transformer + head | | lora | LoraBrain | QuineBrain | LoRA-adapted transformer | ## Quick Start ### 1. Compile a Single Agent ```python from node import Node from brain import ScarecrowBrain from agent_compiler import NodeCompiler # Create and evolve a node brain = ScarecrowBrain() node = Node(brain=brain, fitness=0.85, generation=10) # Compile to capsule compiler = NodeCompiler(output_dir='children') path = compiler.compile(node, 'my_agent') print(f"Generated: {path}") ``` ### 2. Compile an Ensemble ```python from agent_compiler import NodeCompiler compiler = NodeCompiler() nodes = [node1, node2, node3] # Your evolved population path = compiler.compile_ensemble(nodes, 'my_ensemble') ``` ### 3. Use Compiled Capsule ```python import importlib.util # Load capsule spec = importlib.util.spec_from_file_location("agent", "children/my_agent.py") capsule = importlib.util.module_from_spec(spec) spec.loader.exec_module(capsule) # Get quine brain qb = capsule.get_quine_brain() # Run inference result = qb.forward({'input': np.random.randn(384)}) print(result['output']) # For Scarecrow: plug in external model qb.plug_model(lambda x: x * 2) # For Council: add specialist qb.add_specialist('expert', my_model) ``` ## Capsule Features ### Quine Brain Interface All quine brains implement a common interface: ```python class QuineBrain: def forward(self, inputs: dict) -> dict: """Run inference.""" ... def get_merkle_hash(self) -> str: """Return cryptographic hash for verification.""" ... ``` Additional methods vary by brain type: | Method | MLP | Dreamer | Scarecrow | Council | Embedding | |-----------------|-----|---------|-----------|---------|-----------| | forward() | ✓ | ✓ | ✓ | ✓ | ✓ | | get_merkle_hash | ✓ | ✓ | ✓ | ✓ | ✓ | | forward_minimal | ✓ | ✓ | - | - | - | | plug_model() | - | - | ✓ | - | - | | add_specialist()| - | - | - | ✓ | - | | embed() | - | - | - | - | ✓ | | get_params() | ✓ | - | ✓ | - | ✓ | ### Capsule Functions Every capsule includes these functions: ```python # Core get_quine_brain() # Get the self-contained brain get_quine_hash() # Get merkle hash verify_quine_integrity() # Verify brain hasn't been modified # Documentation show_readme() # Print embedded README get_node_docs() # Get per-node documentation export_all_docs() # Export all documentation artifacts # Export export_pt(path) # Export to PyTorch format export_onnx(path) # Export to ONNX format export_pdf(mode, path) # Export PDF factory report replicate_quine(path) # Create standalone quine file # FelixBag (Vector Memory) store(key, data) # Store with semantic key retrieve(key) # Exact retrieval recall(query, k=5) # Semantic search materialize(key, path) # Export to filesystem bag_stats() # Memory statistics ``` ## FelixBag (Capsule Memory) Every capsule includes FelixBag, a semantic vector storage system that uses the capsule's internal embedding model for similarity search. ```python agent = CapsuleAgent() # Store anything agent.store("project/readme", readme_text) agent.store("config/main", {"key": "value"}) agent.store("model/checkpoint", binary_data) # Semantic search (uses shared embedder) results = agent.recall("how to configure", k=5) for key, score in results: print(f"{key}: {score:.3f}") # Check embedder status print(agent.embedder_info()) # Shows which model + source print(agent.bag_stats()) # Count, embedder, shared status ``` The embedder is shared with CapsuleBrain - same model for inference and memory. ## PDF Factory Reports Generate professional PDF documentation (requires `pip install reportlab pygments`): ```python agent = CapsuleAgent() # Different modes agent.export_pdf(mode='full') # Entire source, syntax-highlighted agent.export_pdf(mode='report') # Diagnostic factory report agent.export_pdf(mode='provenance') # CASCADE lineage chain agent.export_pdf(mode='artifacts') # README, config, node docs agent.export_pdf(mode='summary') # One-page executive summary # Custom output path agent.export_pdf(mode='report', path='my_report.pdf') ``` ### PDF Modes | Mode | Content | |------------|------------------------------------------------------| | full | Complete .py source with line numbers, syntax colors | | report | Brain info, traits, CASCADE status, FelixBag stats | | provenance | Genesis root, merkle hashes, lineage verification | | artifacts | README, config JSON, node docs, FelixBag keys | | summary | One-page: generation, fitness, brain type, metrics | ## TUI (Interactive Mode) Compiled capsules include an interactive TUI for live experimentation: ```bash python children/my_agent.py ``` ### TUI Commands ``` BRAIN CONTROL: plug Load model into councilor slot council Show councilor roster debate Set debate rounds (for council) consensus Change consensus method MEMORY (FelixBag): store Store item in bag recall Semantic search bag List all stored keys embedder Show embedder status EXPORT: export pt PyTorch TorchScript (.pt) export onnx ONNX format (.onnx) export quine Self-replicating capsule (.py) export state JSON config (.json) export pdf PDF factory report modes: full, report, provenance, artifacts, summary PROVENANCE: cascade Show CASCADE lattice status provenance Full lineage chain genesis Verify genesis link INFERENCE: run Run forward pass imagine Imagination rollouts (Dreamer) hold Forward with HOLD yield points ``` ## Configuration ### CapsuleConfig ```python from agent_compiler import CapsuleConfig config = CapsuleConfig( name="my_agent", compress=True, # Gzip brain data include_requirements=True, # Generate requirements.txt max_organisms=10, # For ensemble: max agents lora_handling="embed_path", # For LoRA: "embed_path", "merge_weights", "download" base_model_path="...", # For LoRA: base model location ) ``` ## Artifact Registry The compiler uses an artifact registry to determine which artifacts each brain type requires. See `artifact_registry.py` for the complete mapping. ```python from artifact_registry import get_artifact_spec, get_requirements spec = get_artifact_spec('council') print(f"Required: {[a.value for a in spec.required]}") print(f"Optional: {[a.value for a in spec.optional]}") print(f"Packages: {get_requirements('council')}") ``` ## Testing Run the artifact audit to verify all brain types compile correctly: ```bash python artifact_audit.py ``` Expected output: ``` SUMMARY ============================================================ MLP: ✓ PASS Scarecrow: ✓ PASS Council: ✓ PASS Embedding: ✓ PASS Dreamer: ✓ PASS ``` ## Integration with HOLD Capsules support HOLD (Human-Oriented Learning and Development) when CASCADE-LATTICE is installed: ```python # Enable HOLD for human oversight result = capsule.forward_hold({'input': data}, blocking=True) # System pauses for human approval before continuing ``` ## Integration with Rerun For visual debugging, install rerun-sdk: ```bash pip install rerun-sdk ``` Capsules will automatically stream inference data to Rerun for visualization. ## Model Interface Server Generate an HTTP server interface for game integration: ```python from agent_compiler import generate_model_interface generate_model_interface( capsule_path="children/my_agent.py", output_dir="my_interface" ) ``` Then run: ```bash cd my_interface python server.py --port 8765 ``` Connect your game client to `http://127.0.0.1:8765/forward` ## Troubleshooting ### "No module named 'test_xxx'" Use `importlib.util.spec_from_file_location()` instead of `import_module()`. ### "matmul dimension mismatch" Ensure input dimensions match the brain's expected input_size. ### "get_quine_brain() returns None" The capsule doesn't have a quine class defined for that brain type. Check that the brain type is supported in the compiler. ### "verify_quine_integrity() returns False" The brain parameters have been modified since compilation. This is expected if you've mutated or trained the brain.