# Harness-agnostic agent management utilities # # This module provides functions to load canonical agent definitions and # render them for different AI coding tools (OpenCode, Claude Code, Pi). # # Usage in your configuration: # # # In your flake or configuration: # let # m3taLib = inputs.m3ta-nixpkgs.lib.${system}; # # # Load canonical agents from the AGENTS flake input # canonical = m3taLib.agents.loadCanonical { agentsInput = inputs.agents; }; # # # Render for a specific tool # agentFiles = m3taLib.agents.renderForTool { # inherit pkgs; # agentsInput = inputs.agents; # tool = "opencode"; # }; # in { ... } # # Renderers are stubs for now (Tasks 9-11 will provide real implementations). {lib}: let agentsLib = { # Load canonical agent definitions from the AGENTS flake input. # agentsInput: the AGENTS flake (e.g., inputs.agents in a consuming flake) # Returns the canonical attrset from lib.loadAgents (keyed by slug). loadCanonical = {agentsInput}: agentsInput.lib.loadAgents; # Stub: OpenCode renderer — produces .opencode/agents/*.md files. # To be implemented in Task 9. renderForOpencode = { pkgs, canonical, modelOverrides ? {}, }: pkgs.runCommand "opencode-agents" {} "echo stub > $out"; # Stub: Claude Code renderer — produces .claude/agents/*.md files. # To be implemented in Task 10. renderForClaudeCode = { pkgs, canonical, modelOverrides ? {}, }: pkgs.runCommand "claude-code-agents" {} "echo stub > $out"; # Stub: Pi renderer — produces AGENTS.md + SYSTEM.md. # To be implemented in Task 11. renderForPi = { pkgs, canonical, }: pkgs.runCommand "pi-agents" {} "echo stub > $out"; # Dispatch renderer by tool name. # tool: "opencode" | "claude-code" | "pi" renderForTool = { pkgs, agentsInput, tool, modelOverrides ? {}, }: let canonical = agentsInput.lib.loadAgents; in if tool == "opencode" then agentsLib.renderForOpencode { inherit pkgs canonical modelOverrides; } else if tool == "claude-code" then agentsLib.renderForClaudeCode { inherit pkgs canonical modelOverrides; } else if tool == "pi" then agentsLib.renderForPi {inherit pkgs canonical;} else throw "lib.agents.renderForTool: unknown tool '${tool}'. Must be opencode, claude-code, or pi."; }; in agentsLib