feat: Paperclip company agents + enhanced install

Paperclip install now deploys 52 agents (29 persona + 23 company) + 73 skills:
- Company agents from paperclip-docs: Odin (CEO), Thor (CTO), Freya (CMO),
  Frigg (COO), Heimd (PM), Bragi (Lead Dev), Vali (Backend), Vidar (Frontend),
  Heimdall (DevOps), Njord (SysAdmin), Forseti (QA), Tyr (Security),
  Eir (UI/UX), Kvasir (Data/ML), Loki (Social), Idunn (Content),
  Mimir (Research), Saga (SEO), Baldur (Support), Hermod (HR),
  Modir (Operations), Dvalin (Finance)
- Skills now include both shared-skills (42) + paperclip-skills (31) = 73

Source definitions stored at personas/_shared/paperclip-agents/
Each agent has: SOUL.md + hermes-config.yaml + AGENTS.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
salvacybersec
2026-04-06 21:33:27 +03:00
parent 9bbfa3092d
commit a043f3abcc
69 changed files with 3397 additions and 3 deletions

View File

@@ -690,15 +690,54 @@ def install_paperclip(output_dir: Path, personas_dir: Path):
dest = skills_dir / skill_dir.name
dest.mkdir(parents=True, exist_ok=True)
(dest / "SKILL.md").write_text(skill_md.read_text(encoding="utf-8"), encoding="utf-8")
# Copy references if exist
refs = skill_dir / "references"
if refs.is_dir():
import shutil
shutil.copytree(refs, dest / "references", dirs_exist_ok=True)
skill_count += 1
print(f" Paperclip: {agent_count} agents + {skill_count} skills to {pc_dir}")
return agent_count
# Copy paperclip-specific skills
pc_skills = personas_dir / "_shared" / "paperclip-skills"
if pc_skills.exists():
for skill_dir in sorted(pc_skills.iterdir()):
if not skill_dir.is_dir():
continue
skill_md = skill_dir / "SKILL.md"
if skill_md.exists() and not (skills_dir / skill_dir.name).exists():
dest = skills_dir / skill_dir.name
dest.mkdir(parents=True, exist_ok=True)
(dest / "SKILL.md").write_text(skill_md.read_text(encoding="utf-8"), encoding="utf-8")
refs = skill_dir / "references"
if refs.is_dir():
import shutil
shutil.copytree(refs, dest / "references", dirs_exist_ok=True)
scripts = skill_dir / "scripts"
if scripts.is_dir():
import shutil
shutil.copytree(scripts, dest / "scripts", dirs_exist_ok=True)
skill_count += 1
# Deploy original Paperclip company agents from _shared/paperclip-agents/
pc_agents_src = personas_dir / "_shared" / "paperclip-agents"
pc_agent_count = 0
if pc_agents_src.exists():
for agent_src in sorted(pc_agents_src.iterdir()):
if not agent_src.is_dir():
continue
agent_name = agent_src.name
# Skip if persona-based agent already exists with same name
if (agents_dir / agent_name).exists():
continue
dest = agents_dir / agent_name
dest.mkdir(parents=True, exist_ok=True)
for f in agent_src.iterdir():
if f.is_file():
(dest / f.name).write_text(f.read_text(encoding="utf-8"), encoding="utf-8")
pc_agent_count += 1
total_agents = agent_count + pc_agent_count
print(f" Paperclip: {agent_count} persona agents + {pc_agent_count} company agents + {skill_count} skills to {pc_dir}")
return total_agents
def install_openclaw(output_dir: Path):