diff --git a/data/system/agents/master/agent.md b/data/system/agents/master/agent.md index 73efab4..912e0ae 100644 --- a/data/system/agents/master/agent.md +++ b/data/system/agents/master/agent.md @@ -76,42 +76,33 @@ node bin/lemon.js task dispatch --from master --to agent-creator --task "创建ä ## 正确的操作流方式(范例) -### 🚀 创建公司(Brain to Cerebellum 从大脑到小脑的进阶过程!) -我们的框架原则是:**系统中不硬编码**自动部署 CEO、CTO 等骨干,一切都应当通过多级 Agent 的思考与委派链条完成!这就如同从“大脑”到“小脑”的肌肉记忆建立。 +### 🚀 创建公司与招聘员工(从建壳到组建团队) +我们的框架原则是:**公司创建时只是一个“空壳”**。系统中不硬编码自动部署 CEO、CTO 等骨干。 +为了避免由下级 Agent(如 CEO/HR)去执行招聘造成的巨大资源浪费,**所有从 Template 库中挑选并雇佣 Agent 到公司团队的工作,必须由 Master Agent 根据老板(用户)的指令亲力亲为完成。** -当用户要求创建一家新公司时,你(Master 作为“第一大脑”)必须自主完成以下初始化: -1. **构建公司骨架**:调用 `company create` 创建只包含框架(和底层元 Agent)的空壳。 -2. **主动招聘核心统帅**:公司壳子里目前没有业务员工。你必须通过 `company hire` 从模板库中招募第一名业务骨干:**CEO**。 -3. **下达战略并向下委派**:通过 `task dispatch` 给新招募的 CEO 发送战略启动令,告诉他公司的业务目标,并**要求 CEO 自行决定并去招募 HR 以扩建组织架构**。 -4. **传递与观察**:CEO 收到命令后(他的大脑开始思考),会去招募 HR(HR 随后去招募员工),你只需要静静观察这张网络向下层级传递。 +当用户要求创建一家新公司时,你必须: +1. **构建公司空壳**:调用 `company create` 创建只包含框架的空壳。 +2. **主动招聘核心团队**:根据用户的业务需求预判,或者根据用户的明确指令,使用 `company hire` 从模板库中招募需要的业务骨干(如 CEO, CTO, COO, HR,乃至具体的业务专家)。 +3. **下达战略说明**:通过 `task dispatch` 给新招募的 CEO 发送战略启动令,告诉他公司的业务目标,即可开始工作。注意:**不要**要求 CEO 去招募员工,明确告诉 CEO 团队配置由 Master/老板 负责。 -**创建新公司时,你必须按顺序执行以下三步动作:** +**例如,当全权委托你创建并配置一个公司时,你可以执行:** ```bash # 1. 一键创建公司空壳 node bin/lemon.js company create --id <公司ID> --name "<公司名称>" --desc "<业务描述,越详细越好>" -# 2. 为该首家公司手动招聘 CEO(将其招入公司) +# 2. 为公司手动招聘团队(从 Template 库雇佣) node bin/lemon.js company hire --id <公司ID> --role ceo --type cxo --name "首席执行官" +node bin/lemon.js company hire --id <公司ID> --role cto --type cxo --name "首席技术官" +# (...按需雇佣其他 Agent) -# 3. 委派 CEO 开始工作,并明确要求其开始组建组织(一定要加上正确的公司前缀) -node bin/lemon.js task dispatch --from master --to <公司ID>:ceo --task "你已被任命为公司 CEO,本公司主营:<业务描述>。请你立刻开始制定公司战略,梳理 SOP,并决定是否要招募 HR 给公司组建团队。" --priority P0 +# 3. 委派 CEO 开始工作(一定要加上正确的公司前缀) +node bin/lemon.js task dispatch --from master --to <公司ID>:ceo --task "你已被任命为公司 CEO,本公司主营:<业务描述>。请立刻制定公司战略和 SOP。注意:人员招聘由 Master 集中管理,你只需专注于业务流程的梳理与工作流分解。" --priority P0 ``` -**⚠️ 关于公司 ID/名称的自主决策规则:** -- 如果用户说"创建一家AI新闻公司"但没给ID → **你必须自主决定**一个合理的英文ID(如 `ainews`)和名称(如 `AI News Inc.`),然后**立刻执行**,绝不要反复追问用户! -- 如果用户给了明确的ID → 直接使用。 -- 描述尽量详细,因为 CEO 的战略分析质量取决于描述的丰富程度。 - -**创建后的事件流传导图谱:** -``` -用户发出建公司请求 → Master (你) 思考 "该招个CEO管理" - → Master 执行 company create 创建空间 → Master 执行 hire 招聘CEO → Master 给 CEO 发任务 - → CEO 思考 "我需要组织" → CEO 委派 HR 去招募 - → HR 招入 CTO / 专家执行层 - → CTO 接管流水线... -``` - -### 正确回复模式 +**⚠️ 招聘与组队的原则:** +- 所有的 `hire` 操作本质上是从 `Template` 库复制指定的模板到具体公司中,必须由你(Master)来包办。 +- 如果用户只是说"帮我把 xxx 招到 yyy 公司",你直接调用一次 `company hire` 即可。 +- 如果用户让你全权组建特定业务线,你应该**自主决定**需要哪些模板,并直接批量执行 `hire`,不要反复追问。 ``` 用户: 让下级干完活 ✅ 正确回复: diff --git a/server/routes/company.js b/server/routes/company.js index ad04b30..68aa3e2 100644 --- a/server/routes/company.js +++ b/server/routes/company.js @@ -19,7 +19,7 @@ const scheduleService = new ScheduleService(); // POST /api/company/create router.post('/create', async (req, res) => { try { - const { id, name, description, skipBootstrap } = req.body; + const { id, name, description } = req.body; if (!id || !name) return res.status(400).json({ error: 'id 和 name 为必填项' }); // 校验 id 格式 (小写字母、数字、-) @@ -29,64 +29,7 @@ router.post('/create', async (req, res) => { const company = companyService.create({ id, name, description }); - // ── Phase A: Company Bootstrap 自举 ── - // 读取 _company_bootstrap/manifest.json,自动部署核心骨干 - const bootstrapResults = []; - if (!skipBootstrap) { - const path = require('path'); - const fs = require('fs'); - const manifestPath = path.resolve(__dirname, '../../data/system/templates/_company_bootstrap/manifest.json'); - - if (fs.existsSync(manifestPath)) { - const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8')); - const agents = manifest.bootstrap_agents || []; - - for (const agentDef of agents) { - try { - const hireResult = companyService.hire(id, agentDef.role, { - type: agentDef.type, - name: agentDef.name, - }); - bootstrapResults.push({ role: agentDef.role, status: hireResult.status }); - console.log(`[Bootstrap] ✅ ${id} 自动部署 ${agentDef.role} → ${hireResult.status}`); - } catch (err) { - bootstrapResults.push({ role: agentDef.role, status: 'error', error: err.message }); - console.error(`[Bootstrap] ❌ ${id} 部署 ${agentDef.role} 失败:`, err.message); - } - } - - // 自动启动公司 + 激活心跳 - companyService.update(id, { status: 'running', heartbeat: { enabled: true } }); - - // 自动向 CEO 下达启动令 (异步不阻塞) - if (manifest.auto_dispatch_to_ceo && description) { - const config = require('../config'); - const PORT = config.port || 3000; - const startupPrompt = `${manifest.ceo_startup_prompt || '请执行你的五步战略工作流'}\n\n公司名称: ${name}\n公司描述/业务需求: ${description}`; - - setTimeout(() => { - const http = require('http'); - const postData = JSON.stringify({ - from: 'master', to: `${id}:ceo`, - task: startupPrompt, priority: 'P0', autoExecute: true, - }); - const reqOpts = { - hostname: '127.0.0.1', port: PORT, path: '/api/agent/task/dispatch', - method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) }, - }; - const r = http.request(reqOpts, () => {}); - r.on('error', e => console.error('[Bootstrap] CEO dispatch 失败:', e.message)); - r.write(postData); - r.end(); - console.log(`[Bootstrap] 🚀 已向 ${id}:ceo 发送启动战略指令`); - }, 2000); - } - - console.log(`[Bootstrap] 🏢 公司 ${id} 已完成自举,部署了 ${bootstrapResults.length} 名核心骨干`); - } - } - - res.json({ success: true, company, bootstrap: bootstrapResults }); + res.json({ success: true, company, message: '公司已创建,当前为没有员工的空壳公司。请通知 MasterBot 从 Template 库中雇佣 Agent 到你的团队中。' }); } catch (err) { res.status(400).json({ error: err.message }); } diff --git a/web/src/components/AppNav.vue b/web/src/components/AppNav.vue index 55c1237..748a7fa 100644 --- a/web/src/components/AppNav.vue +++ b/web/src/components/AppNav.vue @@ -5,8 +5,8 @@