Files
personas/config.example.yaml
salvacybersec cbb28903fb feat(build): user-agnostic personalized variant routing
Personalized variants (default trigger: salva.md) compile to a separate
top-level folder so generated/<persona>/ stays clean of per-user content.
Both the trigger variant filename(s) and the output folder name are
config-driven via config.user — the build is truly user-agnostic.

Build changes:
- Module-level _RUNTIME dict cached by configure_runtime(config) at startup
- resolve_personalized_variants(config) — config.user.personalized_variants
- resolve_personalized_output_dirname(config) — slug-derives from
  user.name (e.g. "Salva" → "salva-personas") with explicit override key
- resolve_personalized_source_dirname(config) — defaults to literal
  "personalized" (gitignorable, user-name-independent)
- iter_persona_output_dirs() — single helper used by all install_*()
  functions to transparently iterate both layouts
- build_persona() routes salva variants based on _RUNTIME at write time
- build_skills_index() also scans <repo>/personalized/skills/ so personal
  skills (with user-private data) merge into the shared skill index
- main() picks up persona dirs from BOTH personas/ and personalized/

New config keys (all optional):
- user.personalized_variants
- user.personalized_output_folder
- user.personalized_source_folder

Output layout (e.g. for user.name="Salva"):
- generated/<persona>/general.{json,yaml,prompt.md}     (shared)
- generated/<persona>/<spec>.{json,yaml,prompt.md}      (shared)
- generated/salva-personas/<persona>/salva.{json,yaml,prompt.md}  (private)

Source layout:
- personas/<persona>/general.md, <spec>.md              (committed)
- personalized/<persona>/salva.md                       (gitignored)
- personalized/skills/<skill>/SKILL.md                  (gitignored)
- personalized/_user_context.md                         (gitignored)

Adds /personalized/ to .gitignore. Documents the new layout in CLAUDE.md
and README.md. Maps linkedin-content-strategy → herald/forge/frodo/ghost
in the default skill persona map.
2026-05-07 16:49:01 +03:00

175 lines
6.5 KiB
YAML

# Persona Library Configuration
# Copy this file to config.yaml and customize for your setup.
# Build system reads this file and injects values into persona templates.
# ─── User Profile ───────────────────────────────────────────────
user:
name: "Your Name"
handle: "your-handle"
location: "Country (GMT+X)"
role: "Your role/title"
languages:
native: "en"
fluent: ["en"]
learning: []
communication:
style: "direct" # direct | verbose | academic
primary_interface: "cli" # cli | telegram | discord | slack
casual_language: "en"
technical_language: "en"
# Personalized variant routing (optional). Variants matched here are
# written to generated/<personalized_output_folder>/<persona>/ instead
# of generated/<persona>/, keeping the main persona folders clean of
# per-user content.
#
# Defaults if both are omitted:
# personalized_variants: ["salva"] (existing convention)
# personalized_output_folder: slugify(user.name) + "-personas"
# e.g. "Alice Smith" → "alice-smith-personas"
# (or "personalized-personas" if name unset)
personalized_variants: ["salva"]
# personalized_output_folder: "my-personas" # explicit override
# ─── Infrastructure ─────────────────────────────────────────────
infrastructure:
servers: []
# Example:
# - name: "production"
# ip: "10.0.0.1"
# role: "web-server"
# os: "debian"
# containers: ["nginx", "postgres", "redis"]
llm:
provider: "ollama" # ollama | openai | anthropic | openrouter | custom
endpoint: "http://localhost:11434"
default_model: "llama3.1"
models: []
# Example:
# - name: "llama3.1"
# purpose: "general"
# - name: "deepseek-coder"
# purpose: "coding"
tools:
# Toggle available tools — personas reference these
rss_aggregator: false # FreshRSS, Miniflux, etc.
rss_endpoint: ""
osint_tools: false # Maigret, theHarvester, etc.
osint_endpoint: ""
sdr_scanner: false # RTL-SDR, HackRF
pcap_analyzer: false # Wireshark/tshark
vulnerability_scanner: false # Nuclei, Nessus
exploit_framework: false # Metasploit
reverse_engineering: false # Ghidra, IDA
forensics_tools: false # Volatility, Autopsy
c2_framework: false # Cobalt Strike, Sliver
threat_intel_platform: false # MISP, OpenCTI
threat_intel_endpoint: ""
siem: false # Splunk, ELK
siem_endpoint: ""
docker: false
kubernetes: false
cloud_provider: "" # aws | gcp | azure | none
monitoring: false # Prometheus, Grafana
monitoring_endpoint: ""
vpn: false # WireGuard, OpenVPN
portainer: false
portainer_url: ""
portainer_api_key: ""
syncthing: false
git_server: "" # github.com | gitlab.com | self-hosted URL
# ─── Data Sources ────────────────────────────────────────────────
data_sources:
knowledge_base: ""
# Path to your notes/knowledge base (Obsidian, Logseq, etc.)
# Example: "/home/user/Obsidian"
book_library: ""
# Path to PDF/book collection
# Example: "/mnt/storage/Books"
foia_collection: false
foia_path: ""
foia_file_count: 0
intel_feeds: false
intel_feed_count: 0
intel_feed_categories: []
custom_databases: []
# Example:
# - name: "Iran Intelligence DB"
# path: "/data/iran"
# size: "80GB"
# description: "JSON feeds + structured analysis"
# ─── Analytical Frameworks ───────────────────────────────────────
frameworks:
# Which analytical frameworks to embed in personas
uap: false # Universal Analytical Protocol
ach: false # Analysis of Competing Hypotheses
ach_over_tot: false # ACH layered on Tree-of-Thought
pmesii_pt: false # Military analysis matrix
dime_fil: false # National power elements
ascope: false # Operational environment
mitre_attack: true # MITRE ATT&CK (default on for cyber)
kill_chain: true # Lockheed Martin Kill Chain
diamond_model: false # Diamond Model for CTI
disarm: false # Disinformation framework
owasp: true # OWASP Top 10
# Reporting standards
ic_confidence: false # IC confidence levels (High/Moderate/Low)
multi_source_verification: false # 3-source minimum rule
bluf_reporting: false # Bottom Line Up Front
output_modes: ["default"] # default | exec_summary | full_report | json | visual
# ─── Regional Focus ─────────────────────────────────────────────
regional_focus:
primary: [] # e.g., ["iran", "russia", "china"]
secondary: [] # e.g., ["turkey", "africa", "middle-east"]
# Personas like Frodo will emphasize these regions
# ─── Persona Customization ──────────────────────────────────────
persona_defaults:
language:
casual: "en"
technical: "en"
reports: "en"
# Hitap style — how personas address the user
# Options: formal | military | academic | casual | custom
address_style: "formal"
# Custom address overrides (optional)
# custom_addresses:
# neo: "Boss"
# frodo: "Director"
# ─── Active Projects (for personalized variants) ────────────────
projects: []
# Example:
# - name: "My Scanner"
# stack: "Python, FastAPI"
# description: "Automated vulnerability scanner"
# status: "production"
# - name: "Intel Platform"
# stack: "React, Node.js"
# description: "Threat intelligence dashboard"
# status: "development"
# ─── Professional Context ───────────────────────────────────────
professional:
company: ""
role: ""
certifications: [] # ["OSCP", "CEH", "CISSP"]
specializations: [] # ["web-security", "CTI", "IR"]
active_engagements: []
# Example:
# - name: "Client X Pentest"
# scope: "external + internal"
# domains: 50