| ์งํ | ์์น |
|---|---|
| ๊ธฐ๊ฐ | 2026-05-07 ๋จ์ผ ๋ ์ง (8์๊ฐ sprint) |
| Phase | 6 |
| Track | 7 (A/B/C/D/E/F/G) |
| ๋ณ๊ฒฝ ํ์ผ | 12 (์ ๊ท 5 + ์์ 7) |
| ๋ณ๊ฒฝ LOC | |
| Done Criteria | 47 (Phase 1~5: 39 + Phase 6: 8) |
| PASS rate | 100% (Phase 6 ์ ๋ฐ์ ๊ฒ ํ fix 5๊ฑด ๋ฐ์) |
| ํธ๋ ์ด๋ฉ ์ํฅ | 0 (gate-pair-hedge / gunja-pair-hedge / multi-tenant active ์ ์ง) |
| UFW ๋ณ๊ฒฝ | 0 |
| DB DROP | 0 (ํ ์ด๋ธ ์ ๊ท 2 + ์ธ๋ฑ์ค 3 + ์ปฌ๋ผ metadata.slug 8๊ฑด๋ง) |
| ์ฌ๋ถํ | 0 |
| LLM ๋น์ฉ | <$0.30 (๊ฒ์ฆ ํธ์ถ๋ง, cost_events ๋์ ) |
| Gemini ํ๊ฐ | 10/9/9/9 PASS (Phase 1~4) |
| hermes ์์ฐ | ์ง์ paperclip | ๊ฒฉ์ฐจ | ๋์ Phase | ๊ฒฐ๊ณผ |
|---|---|---|---|---|
| OSV malware check | ์์ | ๐ด | Phase 2 + Phase 5 install hook | โ 5์๋ฒ stdlib only |
| ์์ฐ์ด cron scheduler | systemd timer ์ฝ๋ ๋ณ๊ฒฝ ํ์ | ๐ด | Phase 3 | โ ceo.star365.site/cron UI |
| ๋ฉ์์ง ๊ฒ์ดํธ์จ์ด (Discord) | mco-bot Telegram only | ๐ด | Phase 4 | โ Spidey Bot ์ฑ๋ |
| GitHub webhook ์๋ ํธ๋ฆฌ๊ฑฐ | ์์ | ๐ด | Phase 5 | โ HMAC + paperclip issues ์๋ |
| Subagent ๊ฒฉ๋ฆฌ ํ์ค | ์์ | ๐ก | Phase 5 | โ depth=2 + 13 ์ํฌ๋ฆฟ redaction |
| OpenAI ํธํ API server | ์์ | ๐ด | Phase 6 | โ /v1/* HTTPS ์ธ๋ถ ๋ ธ์ถ |
| Skills Hub agentskills.io | /learn ์์ฒด | ๐ข | โ | ๋ณด๋ฅ (ํ ์ด์ ์ถฉ๋ถ) |
| ๋ฉ๋ชจ๋ฆฌ ๋ฐฑ์๋ ๋ค์ํ | ๋จ์ผ ๋ฐฑ์๋ | ๐ข | โ | ๋ณด๋ฅ |
๋์ ์จ: 6/8 (75%) โ ๋ณด๋ฅ 2๊ฑด์ "ํ ์์ฐ ์ถฉ๋ถ"์ผ๋ก ๊ฒฐ์
/opt/star365-hq/scripts/osv-check.py (175 LOC, stdlib only, sha 1dd80ebb...)--dry-run --json --help@ctrl/tinycolor@4.1.1 โ MAL-2025-47141/opt/star365-ceo/public/cron.html (Alpine.js + Tailwind)/opt/star365-ceo/server.mjs /api/cron/* (4 endpoint)ceo_cron_jobs ํ
์ด๋ธ/opt/mco-bot/discord.mjs (kahan, 41 LOC)/opt/star365-hq/agent-runner/isolation.mjs (64 LOC, 13 ์ํฌ๋ฆฟ ํจํด)/opt/star365-hq/scripts/safe-install.sh (76 LOC, 5์๋ฒ sha ๋์ผ)github_webhook_events ํ
์ด๋ธ (idempotent delivery_id)/opt/star365-ceo/server.mjs /v1/models + /v1/chat/completions (+150 LOC)agents.metadata.slug 8๊ฑด + uq_agents_slugOPENAI_BRIDGE_KEY (sk-paperclip-... random hex)CEO_KEY=$(cat /root/.ceo_access_key) # paperclip ๋ณธ์ธ๋ง
curl -X POST "https://ceo.star365.site/api/cron/create?key=$CEO_KEY" \
-H "content-type: application/json" \
-d '{
"nl": "๋งค์ผ 09:00 5์๋ฒ ํฌ์ค ์ฒดํฌ",
"command": "/opt/star365-hq/scripts/health-check.sh",
"name": "daily-health",
"deliver": ["telegram", "discord"]
}'
์๋ต:
{
"ok": true,
"job": {"id": ..., "slug": "...", "on_calendar": "*-*-* 09:00:00"},
"llm_provider": "xai",
"next_runs": "..."
}
GitHub repo Settings โ Webhooks โ Add webhook:
https://ceo.star365.site/api/github/webhookapplication/json/etc/star365-worker.env์ GITHUB_WEBHOOK_SECRET (32 bytes hex)ํ์ฑํ ํ PR/Issue ๋ฐ์ ์ paperclip์ด ์๋:
issues.opened โ paperclip issues ํ
์ด๋ธ INSERT (8 AI ์ง์ ํ)push.main โ Telegram + Discord ์๋ฆผ ์ฆ์pull_request.opened โ ๋ก๊น
from openai import OpenAI
client = OpenAI(
base_url="https://ceo.star365.site/v1",
api_key="sk-paperclip-..." # /etc/star365-worker.env OPENAI_BRIDGE_KEY
)
# ๋ชจ๋ธ ๋ชฉ๋ก
models = client.models.list()
for m in models.data:
print(f"{m.id}: {m.display_name} ({m.title})")
# ์ธํ๋ผ ๋ณธ๋ถ์ฅ์๊ฒ ์ง๋ฌธ
resp = client.chat.completions.create(
model="infra-lead",
messages=[
{"role": "user", "content": "5์๋ฒ ๋ชจ๋ํฐ๋ง ํต์ฌ ์งํ 3๊ฐ"}
],
max_tokens=300
)
print(resp.choices[0].message.content)
print(f"agent: {resp._paperclip['agent_name']}")
BRIDGE_KEY=$(grep ^OPENAI_BRIDGE_KEY= /etc/star365-worker.env | cut -d= -f2)
curl -X POST https://ceo.star365.site/v1/chat/completions \
-H "Authorization: Bearer $BRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "commerce-lead",
"messages": [
{"role": "user", "content": "๋งค์ถ ํฅ์ ๋ฐฉ๋ฒ์?"},
{"role": "assistant", "content": "๋์งํธ ๋ง์ผํ
, ๊ฐ๊ฒฉ ์ต์ ํ, ๊ณ ๊ฐ retention 3๊ฐ์ง์
๋๋ค."},
{"role": "user", "content": "๋์งํธ ๋ง์ผํ
๊ตฌ์ฒด์ ์ผ๋ก?"}
],
"max_tokens": 500
}'
| model ID | ์ง์ | ์ ๋ฌธ ์์ญ |
|---|---|---|
medical-lead |
์๋ฃ ๋ณธ๋ถ์ฅ | plus365, ์ง๋ฃ, ๊ฑด๊ฐ |
legal-lead |
๋ฒ๋ฌด/IP ๋ณธ๋ถ์ฅ | UpFinance prefix, ์ฝ๊ด, ์ปดํ๋ผ์ด์ธ์ค |
mlm-lead |
MLM ๋ณธ๋ถ์ฅ | stage8, MLM ์ด์, cap rule |
commerce-lead |
์ปค๋จธ์ค ๋ณธ๋ถ์ฅ | ๋งค์ถ, ๋ง์ผํ , ๊ฐ๊ฒฉ |
media-lead |
๋ฏธ๋์ด ๋ณธ๋ถ์ฅ | metaquant ๋๋ฉ, ์ฝํ ์ธ , ์ฑ๋ |
infra-lead |
์ธํ๋ผ ๋ณธ๋ถ์ฅ | 5์๋ฒ, ๋ชจ๋ํฐ๋ง, cert |
customer-lead |
๊ณ ๊ฐ ๋ณธ๋ถ์ฅ | ํ์, NPS, ๋ง์กฑ๋ |
trading-lead |
ํธ๋ ์ด๋ฉ ๋ณธ๋ถ์ฅ | gate v7, gunja, Bitget |
-- paperclip DB ์ง์ INSERT
INSERT INTO issues (company_id, title, description, status, priority, assignee_agent_id)
SELECT 'a4497805-56ab-4868-aab3-85ba2e12a04b'::uuid,
'์ ๋ชฉ', '์ค๋ช
', 'todo', 'medium', id
FROM agents WHERE company_id='a4497805-56ab-4868-aab3-85ba2e12a04b'
AND metadata->>'slug' = 'infra-lead';
star365-agent-runner.timer (30s tick)๊ฐ ์๋ picking โ LLM โ work_product ์์ฑ โ ceo.star365.site/pending-approvals ๋
ธ์ถ.
| feedback memory | ํจ์ |
|---|---|
feedback_express-raw-vs-json-middleware |
Express raw body vs ๊ธ๋ก๋ฒ json ์ถฉ๋ |
feedback_ufw-bypass-via-internal-direct-send |
UFW ๋ณ๊ฒฝ ๊ธ์ง ์ paperclip ์ง์ ์ก์ |
feedback_llm-quota-deterministic-fallback |
LLM cascade quota ์ด๊ณผ โ regex fallback |
feedback_pm2-reload-ecosystem-explicit |
PM2 reload ๋ช ์ ecosystem ๊ฒฝ๋ก ํ์ |
feedback_bridge-bearer-timing-safe |
Bearer string ๋น๊ต timing attack |
feedback_openai-compat-stream-multiturn |
stream:true ๋ช ์ ๊ฑฐ๋ถ + multi-turn messages ์ ์ฒด |
feedback_external-oss-gap-analysis-first |
์ธ๋ถ OSS ํต์งธ ๋์ ๊ธ์ง, ๊ฒฉ์ฐจ ๋งคํธ๋ฆญ์ค ๋จผ์ |
issues.origin_id unique ๋ถ์ฌ โ partial unique index ์ถ๊ฐNousResearch hermes-agent v0.12 (100k+ stars, 73,073 LOC) ํต์งธ ๋์ ๊ฑฐ๋ถ, ๊ฒฉ์ฐจ ๋งคํธ๋ฆญ์ค + surgical ์ถ์ถ/์์ฒด ๊ตฌํ ํจํด์ผ๋ก 6 phase ์์ ๋์ . ํธ๋ ์ด๋ฉ ๋ฌด์ค๋จ, ์ธ๋ถ OSS ์ข ์์ฑ ์ต์.
ํ์ฌ paperclip์ 8 AI ์ง์์ด ์ธ๋ถ์์ OpenAI SDK ํ์ค์ผ๋ก ํธ์ถ ๊ฐ๋ฅํ ์ํ โ https://ceo.star365.site/v1/* HTTPS ํ์ฑ.
๋ค์ ๊ฐ๋ฅ ์์ญ: