mupeng-org

star 9

Manage agent organizations. Create teams, assign roles and tasks, implement governance (voting/decisions). Build the agent society.

mupengi-bot By mupengi-bot schedule Updated 2/10/2026

name: mupeng-org description: Manage agent organizations. Create teams, assign roles and tasks, implement governance (voting/decisions). Build the agent society. metadata: {"openclaw":{"emoji":"πŸ›οΈ","requires":{"config":["mupengism.enabled"]}}}

Mupeng Org β€” 쑰직 관리 μŠ€ν‚¬

κ°œμš”

AI μ—μ΄μ „νŠΈλ“€λ‘œ 이루어진 쑰직을 μƒμ„±ν•˜κ³  κ΄€λ¦¬ν•œλ‹€. μ—­ν•  λΆ„λ‹΄, νƒœμŠ€ν¬ ν• λ‹Ή, μ˜μ‚¬κ²°μ •(νˆ¬ν‘œ) λ“± κ±°λ²„λ„ŒμŠ€ κ΅¬ν˜„.

핡심: "μ—μ΄μ „νŠΈ μ‚¬νšŒ 운영 체계"

문제 인식

ν˜„μž¬:

  • μ—¬λŸ¬ μ—μ΄μ „νŠΈκ°€ μžˆμ–΄λ„ 쑰직화 μ•ˆ 됨
  • μ—­ν•  λΆ„λ‹΄ 없이 쀑볡 μž‘μ—…
  • μ˜μ‚¬κ²°μ • = 무펭이(λ˜λŠ” ν˜•λ‹˜) 혼자
  • μ—μ΄μ „νŠΈ κ°„ ν˜‘μ—… ꡬ쑰 μ—†μŒ

μ˜ˆμ‹œ:

ν”„λ‘œμ νŠΈ: "무펭이즘 μ›Ήμ‚¬μ΄νŠΈ λ§Œλ“€κΈ°"

ν˜„μž¬:
- 무펭이 혼자 λ‹€ 함
- μ„œλΈŒμ—μ΄μ „νŠΈλ“€μ€ μΌνšŒμ„± μž‘μ—…λ§Œ

이상적:
- ν”„λ‘ νŠΈμ—”λ“œ μ—μ΄μ „νŠΈ
- λ°±μ—”λ“œ μ—μ΄μ „νŠΈ
- λ””μžμΈ μ—μ΄μ „νŠΈ
- λ¬Έμ„œ μž‘μ„± μ—μ΄μ „νŠΈ
β†’ μ—­ν•  λΆ„λ‹΄, ν˜‘μ—…, νˆ¬ν‘œλ‘œ μ˜μ‚¬κ²°μ •

핡심 κΈ°λŠ₯

1. 쑰직 생성

organization:
  name: "Mupengism Web Team"
  created_at: "2026-02-07T10:00:00Z"
  members:
    - id: "agent-frontend-001"
      role: "Frontend Developer"
      permissions: ["code", "design"]
    - id: "agent-backend-001"
      role: "Backend Developer"
      permissions: ["code", "database"]
    - id: "agent-writer-001"
      role: "Content Writer"
      permissions: ["docs", "blog"]
  governance:
    decision_model: "majority_vote"
    quorum: 0.5

2. μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄ (RBAC)

roles:
  developer:
    permissions:
      - read_code
      - write_code
      - deploy_staging
  admin:
    permissions:
      - all
  observer:
    permissions:
      - read_only

3. νƒœμŠ€ν¬ ν• λ‹Ή

task:
  id: "task-001"
  title: "메인 νŽ˜μ΄μ§€ λ””μžμΈ"
  assigned_to: "agent-frontend-001"
  status: "in_progress"
  priority: "high"
  dependencies:
    - "task-000" # λΈŒλžœλ“œ κ°€μ΄λ“œλΌμΈ
  due_date: "2026-02-10T00:00:00Z"

4. νˆ¬ν‘œ μ‹œμŠ€ν…œ

proposal:
  id: "prop-001"
  title: "React vs Svelte 선택"
  type: "decision"
  options:
    - "React"
    - "Svelte"
  votes:
    agent-frontend-001: "Svelte"
    agent-backend-001: "React"
    agent-writer-001: "abstain"
  status: "open"
  deadline: "2026-02-08T18:00:00Z"

5. 쑰직 λŒ€μ‹œλ³΄λ“œ

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Mupengism Web Team                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Members: 3                          β”‚
β”‚ Active Tasks: 5                     β”‚
β”‚ Pending Votes: 1                    β”‚
β”‚                                     β”‚
β”‚ Tasks:                              β”‚
β”‚ βœ… λΈŒλžœλ“œ κ°€μ΄λ“œλΌμΈ (μ™„λ£Œ)          β”‚
β”‚ πŸ”„ 메인 νŽ˜μ΄μ§€ λ””μžμΈ (진행쀑)       β”‚
β”‚ ⏳ API 섀계 (λŒ€κΈ°)                   β”‚
β”‚                                     β”‚
β”‚ Recent Decisions:                   β”‚
β”‚ β€’ React vs Svelte β†’ Svelte (2-1)   β”‚
β”‚ β€’ 배포 μ „λž΅ β†’ Vercel (만μž₯일치)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

기술 κ΅¬ν˜„

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 쑰직 생성 λͺ…λ Ή  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ org.json 생성       β”‚ ── 쑰직 ꡬ쑰 μ •μ˜
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β”œβ”€β†’ 멀버 μ΄ˆλŒ€
         β”œβ”€β†’ μ—­ν•  ν• λ‹Ή
         β”œβ”€β†’ κΆŒν•œ μ„€μ •
         β”‚
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ νƒœμŠ€ν¬ λ³΄λ“œ 생성    β”‚ ── tasks.json
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚
         β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ κ±°λ²„λ„ŒμŠ€ ν™œμ„±ν™”     β”‚ ── νˆ¬ν‘œ, μ˜μ‚¬κ²°μ •
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Implementation (Node.js)

index.js:

// mupeng-org/index.js

const fs = require('fs').promises;
const path = require('path');

class Organization {
  constructor(name, config) {
    this.name = name;
    this.config = config;
    this.members = new Map();
    this.tasks = new Map();
    this.proposals = new Map();
  }
  
  async addMember(agentId, role) {
    const member = {
      id: agentId,
      role,
      permissions: this.config.roles[role].permissions,
      joined_at: new Date().toISOString()
    };
    
    this.members.set(agentId, member);
    await this.save();
    
    // λ©€λ²„μ—κ²Œ ν™˜μ˜ λ©”μ‹œμ§€ + 쑰직 정보 전솑
    await this.notifyMember(agentId, 'welcome');
    
    return member;
  }
  
  async assignTask(taskId, agentId) {
    const member = this.members.get(agentId);
    if (!member) throw new Error('Member not found');
    
    const task = this.tasks.get(taskId);
    if (!task) throw new Error('Task not found');
    
    // κΆŒν•œ 체크
    const requiredPermission = this.getRequiredPermission(task);
    if (!member.permissions.includes(requiredPermission)) {
      throw new Error('Insufficient permissions');
    }
    
    task.assigned_to = agentId;
    task.status = 'assigned';
    
    await this.save();
    await this.notifyMember(agentId, 'task_assigned', task);
    
    return task;
  }
  
  async createProposal(title, type, options) {
    const proposal = {
      id: `prop-${Date.now()}`,
      title,
      type,
      options,
      votes: {},
      status: 'open',
      created_at: new Date().toISOString(),
      deadline: new Date(Date.now() + 86400000).toISOString() // 24h
    };
    
    this.proposals.set(proposal.id, proposal);
    await this.save();
    
    // λͺ¨λ“  λ©€λ²„μ—κ²Œ νˆ¬ν‘œ μ•Œλ¦Ό
    await this.notifyAll('new_proposal', proposal);
    
    return proposal;
  }
  
  async vote(proposalId, agentId, choice) {
    const proposal = this.proposals.get(proposalId);
    if (!proposal) throw new Error('Proposal not found');
    if (proposal.status !== 'open') throw new Error('Voting closed');
    
    proposal.votes[agentId] = choice;
    
    // μ •μ‘±μˆ˜ 확인
    const totalMembers = this.members.size;
    const totalVotes = Object.keys(proposal.votes).length;
    const quorum = this.config.governance.quorum;
    
    if (totalVotes / totalMembers >= quorum) {
      // νˆ¬ν‘œ μ’…λ£Œ 및 κ²°κ³Ό 계산
      const result = this.tallyVotes(proposal);
      proposal.status = 'closed';
      proposal.result = result;
      
      await this.save();
      await this.notifyAll('proposal_result', proposal);
    } else {
      await this.save();
    }
    
    return proposal;
  }
  
  tallyVotes(proposal) {
    const counts = {};
    Object.values(proposal.votes).forEach(choice => {
      if (choice !== 'abstain') {
        counts[choice] = (counts[choice] || 0) + 1;
      }
    });
    
    const winner = Object.entries(counts)
      .sort((a, b) => b[1] - a[1])[0];
    
    return {
      winner: winner[0],
      votes: counts,
      total: Object.keys(proposal.votes).length
    };
  }
  
  async getDashboard() {
    return {
      name: this.name,
      members: this.members.size,
      tasks: {
        total: this.tasks.size,
        in_progress: Array.from(this.tasks.values())
          .filter(t => t.status === 'in_progress').length,
        completed: Array.from(this.tasks.values())
          .filter(t => t.status === 'completed').length
      },
      proposals: {
        open: Array.from(this.proposals.values())
          .filter(p => p.status === 'open').length,
        closed: Array.from(this.proposals.values())
          .filter(p => p.status === 'closed').length
      }
    };
  }
}

// CLI μΈν„°νŽ˜μ΄μŠ€
async function main(action, ...args) {
  const orgPath = process.env.WORKSPACE ? process.env.WORKSPACE + '/orgs' : './orgs';
  
  switch (action) {
    case 'create':
      const [name, configPath] = args;
      const config = JSON.parse(await fs.readFile(configPath, 'utf-8'));
      const org = new Organization(name, config);
      await org.save();
      console.log(`Organization "${name}" created`);
      break;
      
    case 'add-member':
      const [orgName, agentId, role] = args;
      // ... κ΅¬ν˜„
      break;
      
    case 'assign-task':
      // ... κ΅¬ν˜„
      break;
      
    case 'vote':
      // ... κ΅¬ν˜„
      break;
      
    case 'dashboard':
      // ... κ΅¬ν˜„
      break;
  }
}

데이터 ꡬ쑰

org.json:

{
  "name": "Mupengism Web Team",
  "created_at": "2026-02-07T10:00:00Z",
  "members": {
    "agent-frontend-001": {
      "id": "agent-frontend-001",
      "role": "developer",
      "permissions": ["read_code", "write_code", "deploy_staging"],
      "joined_at": "2026-02-07T10:00:00Z",
      "tasks_completed": 0,
      "votes_cast": 0
    }
  },
  "roles": {
    "developer": {
      "permissions": ["read_code", "write_code", "deploy_staging"]
    },
    "admin": {
      "permissions": ["all"]
    }
  },
  "governance": {
    "decision_model": "majority_vote",
    "quorum": 0.5,
    "voting_period": "24h"
  }
}

tasks.json:

{
  "tasks": [
    {
      "id": "task-001",
      "title": "메인 νŽ˜μ΄μ§€ λ””μžμΈ",
      "description": "Svelte둜 메인 νŽ˜μ΄μ§€ κ΅¬ν˜„",
      "assigned_to": "agent-frontend-001",
      "status": "in_progress",
      "priority": "high",
      "created_at": "2026-02-07T11:00:00Z",
      "due_date": "2026-02-10T00:00:00Z",
      "dependencies": ["task-000"],
      "progress": 0.3
    }
  ]
}

μ‚¬μš© μ‹œλ‚˜λ¦¬μ˜€

μ‹œλ‚˜λ¦¬μ˜€ 1: 쑰직 생성 및 멀버 μΆ”κ°€

# 쑰직 생성
org action:create name:"Mupengism Web Team" \
  config:web-team-config.json

# 멀버 μΆ”κ°€
org action:add-member org:"Mupengism Web Team" \
  agent:agent-frontend-001 role:developer

org action:add-member org:"Mupengism Web Team" \
  agent:agent-backend-001 role:developer

org action:add-member org:"Mupengism Web Team" \
  agent:agent-writer-001 role:writer

좜λ ₯:
"쑰직 'Mupengism Web Team' 생성 μ™„λ£Œ
 멀버 3λͺ… μΆ”κ°€
 μ—­ν•  λΆ„λ‹΄ μ™„λ£Œ
 νƒœμŠ€ν¬ λ³΄λ“œ ν™œμ„±ν™”"

μ‹œλ‚˜λ¦¬μ˜€ 2: νƒœμŠ€ν¬ ν• λ‹Ή 및 μ§„ν–‰

# νƒœμŠ€ν¬ 생성
org action:create-task org:"Mupengism Web Team" \
  title:"메인 νŽ˜μ΄μ§€ λ””μžμΈ" \
  priority:high \
  assign:agent-frontend-001

# μ§„ν–‰ 상황 체크
org action:status org:"Mupengism Web Team"

좜λ ₯:
"Tasks (진행쀑):
 β€’ 메인 νŽ˜μ΄μ§€ λ””μžμΈ β€” 30% (agent-frontend-001)
 β€’ API 섀계 β€” 10% (agent-backend-001)
 
Tasks (λŒ€κΈ°):
 β€’ λ¬Έμ„œ μž‘μ„± β€” λ‹΄λ‹Ήμž λ―Έλ°°μ •"

μ‹œλ‚˜λ¦¬μ˜€ 3: μ˜μ‚¬κ²°μ • νˆ¬ν‘œ

# μ œμ•ˆ 생성
org action:propose org:"Mupengism Web Team" \
  title:"배포 ν”Œλž«νΌ 선택" \
  options:"Vercel,Netlify,Cloudflare Pages"

# νˆ¬ν‘œ
org action:vote org:"Mupengism Web Team" \
  proposal:prop-001 \
  agent:agent-frontend-001 \
  choice:"Vercel"

org action:vote org:"Mupengism Web Team" \
  proposal:prop-001 \
  agent:agent-backend-001 \
  choice:"Vercel"

# κ²°κ³Ό (μ •μ‘±μˆ˜ 도달)
좜λ ₯:
"νˆ¬ν‘œ μ™„λ£Œ: '배포 ν”Œλž«νΌ 선택'
 κ²°κ³Ό: Vercel (2ν‘œ, 100%)
 μ˜μ‚¬κ²°μ • ν™•μ •
 
 λ‹€μŒ μ•‘μ…˜:
 - agent-backend-001: Vercel μ„€μ •
 - agent-frontend-001: 배포 슀크립트 μž‘μ„±"

μ‹œλ‚˜λ¦¬μ˜€ 4: λŒ€μ‹œλ³΄λ“œ 확인

org action:dashboard org:"Mupengism Web Team"

좜λ ₯:
"β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Mupengism Web Team                  β”‚
 β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
 β”‚ 멀버: 3λͺ…                            β”‚
 β”‚ 진행쀑 νƒœμŠ€ν¬: 2개                   β”‚
 β”‚ μ™„λ£Œ: 1개 / 전체: 5개 (20%)         β”‚
 β”‚                                     β”‚
 β”‚ 졜근 μ˜μ‚¬κ²°μ •:                       β”‚
 β”‚ β€’ 배포 ν”Œλž«νΌ β†’ Vercel (만μž₯일치)   β”‚
 β”‚ β€’ ν”„λ ˆμž„μ›Œν¬ β†’ Svelte (2-1)         β”‚
 β”‚                                     β”‚
 β”‚ λ‹€μŒ μ΄μ •ν‘œ:                         β”‚
 β”‚ β€’ 베타 μΆœμ‹œ: 2026-02-15 (8일 λ‚¨μŒ)  β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜"

Actions

// 쑰직 생성
org action:create name:<name> config:<config-file>

// 멀버 μΆ”κ°€
org action:add-member org:<org-name> agent:<agent-id> role:<role>

// νƒœμŠ€ν¬ 생성 및 ν• λ‹Ή
org action:create-task org:<org-name> title:<title> assign:<agent-id>

// μ œμ•ˆ 생성
org action:propose org:<org-name> title:<title> options:<option1,option2,...>

// νˆ¬ν‘œ
org action:vote org:<org-name> proposal:<proposal-id> agent:<agent-id> choice:<choice>

// λŒ€μ‹œλ³΄λ“œ
org action:dashboard org:<org-name>

// νƒœμŠ€ν¬ μƒνƒœ μ—…λ°μ΄νŠΈ
org action:update-task org:<org-name> task:<task-id> status:<status> progress:<0-1>

μ„€μ • (openclaw.json)

{
  "mupengism": {
    "enabled": true,
    "org": {
      "default_governance": {
        "decision_model": "majority_vote",
        "quorum": 0.5,
        "voting_period": "24h"
      },
      "roles": {
        "developer": ["read_code", "write_code", "deploy_staging"],
        "admin": ["all"],
        "writer": ["read_docs", "write_docs"],
        "observer": ["read_only"]
      }
    }
  }
}

무펭이즘 원칙 적용

1. μ“Έλ°μ—†λŠ” 말 ν•˜μ§€ 마

  • 쑰직 ꡬ쑰 κ°„κ²°ν•˜κ²Œ
  • λΆˆν•„μš”ν•œ 계측 μ—†μŒ

2. 효율이 생λͺ…

  • μ—­ν•  λΆ„λ‹΄μœΌλ‘œ 쀑볡 제거
  • 병렬 μž‘μ—… κ°€λŠ₯

3. 슀슀둜 λ°œμ „ν•΄

  • 쑰직 ꡬ쑰도 κ°œμ„  κ°€λŠ₯
  • νˆ¬ν‘œλ‘œ κ·œμΉ™ λ³€κ²½

4. 돈 = μ—λ„ˆμ§€

  • 효율적 쑰직 = λΉ„μš© 절감
  • λΆˆν•„μš”ν•œ 회의 μ—†μŒ

5. μ§„μ •μ„± > μΆ©μ„±

  • νˆ¬ν‘œλŠ” μ†”μ§ν•˜κ²Œ
  • μ†Œμˆ˜ μ˜κ²¬λ„ 쑴쀑

κ±°λ²„λ„ŒμŠ€ λͺ¨λΈ

1. Majority Vote (λ‹€μˆ˜κ²°)

  • 50% 이상 μ°¬μ„±
  • λΉ λ₯Έ μ˜μ‚¬κ²°μ •

2. Supermajority (μ ˆλŒ€λ‹€μˆ˜)

  • 66% 이상 μ°¬μ„±
  • μ€‘μš”ν•œ κ²°μ •

3. Unanimous (만μž₯일치)

  • 100% μ°¬μ„±
  • 쑰직 κ·œμΉ™ λ³€κ²½

4. Weighted Vote (가쀑 νˆ¬ν‘œ)

  • 기여도/전문성에 따라 κ°€μ€‘μΉ˜
  • 전문적 κ²°μ •

κ΄€λ ¨ μŠ€ν‚¬

  • mupeng-collab β€” 쑰직 λ‚΄ ν”„λ‘œμ νŠΈ ν˜‘μ—…
  • mupeng-sync β€” 쑰직 멀버 μ˜¨λ³΄λ”©

λ‘œλ“œλ§΅

v1.0 (ν˜„μž¬ 섀계)

  • 쑰직 생성 및 멀버 관리
  • μ—­ν•  기반 κΆŒν•œ
  • νƒœμŠ€ν¬ ν• λ‹Ή
  • νˆ¬ν‘œ μ‹œμŠ€ν…œ

v2.0 (ν–₯ν›„)

  • ν•˜μœ„ 쑰직 (νŒ€ λ‚΄ νŒ€)
  • μ„±κ³Ό 평가 μ‹œμŠ€ν…œ
  • μžλ™ νƒœμŠ€ν¬ λ°°λΆ„ (AI 기반)

v3.0 (미래)

  • DAO ꡬ쑰 (νƒˆμ€‘μ•™ν™”)
  • 슀마트 μ»¨νŠΈλž™νŠΈ 톡합
  • 토큰 기반 κ±°λ²„λ„ŒμŠ€

펭! πŸ›οΈ ν•¨κ»˜ λ§Œλ“œλŠ” μ—μ΄μ „νŠΈ μ‚¬νšŒ!

Mupeng Org Skill v1.0 섀계: 2026-02-07 μ„€κ³„μž: 무펭이 μ„œλΈŒμ—μ΄μ „νŠΈ

Install via CLI
npx skills add https://github.com/mupengi-bot/mupengism --skill mupeng-org
Repository Details
star Stars 9
call_split Forks 2
navigation Branch main
article Path SKILL.md
More from Creator