Local-first, persona-driven multi-agent simulator for influencer marketing. It simulates influencer follower behavior on a local SNS and uses those actions (like/comment/follow) to predict marketing performance via engagement proxies.
Hackathon context: OpenAI Coxwave Hackathon, Seoul (January 2026). This repository is a prototype built for a live demo, not production software.
- Start from a pre-selected influencer shortlist (search is out of scope)
- Explain why each candidate fits the brand goals and tone
- Simulate follower behavior using persona agents on a local SNS
- Aggregate engagement proxies (likes, comments, follows) to forecast campaign performance
- Surface metrics and qualitative signals in a reporting dashboard
Closed loop: data → personas → simulation → metrics → ranking + rationale
graph TD
Shortlist[Pre-selected Shortlist] --> Dashboard["Dashboard (React + Vite)"]
Dashboard -->|Configure run| Orchestrator["Agent Orchestrator / Runner"]
subgraph Swarm["Follower Persona Swarm (N agents)"]
AgentA["Agent A"] --> SNS["SNS-Vibe (SvelteKit + SQLite)"]
AgentB["Agent B"] --> SNS
AgentN["Agent N"] --> SNS
end
Orchestrator -->|Spawns| AgentA
Orchestrator -->|Spawns| AgentB
Orchestrator -->|Spawns| AgentN
Orchestrator -->|LLM decisions| OpenAI["OpenAI API"]
Orchestrator --> Shared["shared/simulation/*.json"]
Orchestrator --> Logs["dashboard/public/simulation/*.jsonl"]
Shared --> Dashboard
Logs --> Dashboard
Shared --> Eval["eval-agent"]
Logs --> Eval
Eval --> EvalOut["dashboard/public/evaluation/latest.json"]
| Path | Role |
|---|---|
agent/ |
Persona-based multi-agent simulator (Playwright + OpenAI) |
dashboard/ |
Simulation + reporting UI (React/Vite) |
sns-vibe/ |
Lightweight SNS for fast local runs (SvelteKit + SQLite) |
eval-agent/ |
Evaluation scripts (metrics + LLM comment quality) |
shared/ |
File-based contracts and outputs (JSON Schema) |
docs/ |
Architecture, evaluation, troubleshooting, quickstart |
images/ |
Demo screenshots |
Prerequisites:
- Node.js 18+
- Python 3.11+
uv(Python package manager)- OpenAI API key
cd sns-vibe
npm install
bash scripts/reset-db.sh
npm run dev -- --port 8383cd ../dashboard
npm install
npm run devOpen the URL printed by Vite (typically http://localhost:5173).
cd ../agent
cp .env.sample .env
# Set OPENAI_API_KEY and SNS_URL=http://localhost:8383
uv sync
uv run playwright install chromiumuv run python local_agent.py
# or: uv run python runner.py --num-agents 3cd ../eval-agent
cp .env.sample .env
uv sync
uv run python evaluate.py- Simulation status:
shared/simulation/{simulationId}.json - Live agent logs:
dashboard/public/simulation/*.jsonl - Evaluation output schema:
shared/evaluation/result-schema.json - Evaluation snapshot:
dashboard/public/evaluation/latest.json
See shared/README.md for the file contracts and schema locations.
docs/QUICKSTART.mddocs/ARCHITECTURE.mddocs/EVALUATION.mddocs/TROUBLESHOOTING.md
Component READMEs:
agent/README.mdsns-vibe/README.mdeval-agent/README.mdshared/README.md
- Influencer search/ranking is mocked; the shortlist is assumed
- Single-simulation workflow only (no parallel runs)
- Local-only infrastructure; no persistent storage
- Engagement is a proxy, not real conversion data
| Name | Focus |
|---|---|
| Sungho Park | Simulation + SNS |
| Seunghyun Lee | Crawler |




