Skill: sureshchitmil/missionclaw (version 1.6.0)

--- name: missionclaw description: > Integrates with MissionClaw for project management and AI agent orchestration. Use when the user wants to create projects, manage tasks via Kanban, assign work to agents, view organization charts, or schedule automated tasks. Calls the MissionClaw API at http://localhost:3000. --- # MissionClaw Skill This skill integrates Velo with MissionClaw - a visual "Mission Control" for orchestrating AI agents. ## Installation MissionClaw skill is **automatically installed** with OpenClaw. If not present, install via: ```bash # Using ClawHub clawhub install missionclaw # Or manually copy to skills folder cp -r missionclaw ~/.openclaw/skills/ ``` ## Quick Start 1. **Start MissionClaw:** ```bash cd ~/.openclaw/workspace/missionclaw npm run dev ``` Or use PM2 for production: ```bash pm2 start npm --name missionclaw -- run start ``` 2. **Open in Browser:** ``` http://localhost:3000 ``` ## Features ### 1. Dashboard - Overview of all projects, agents, and tasks - System status (Gateway, Ollama connections) - Quick actions ### 2. Kanban Board - 5 columns: Backlog → To Do → In Progress → Review → Done - Drag & drop task management - Assign tasks to agents - Set priority levels (Low, Medium, High, Urgent) ### 3. Agent Forge - Create and manage AI agents - 3 agent types: OpenClaw, Ollama (Local), Cloud API - 23 unique avatars to choose from - Edit SOUL.md and IDENTITY.md for each agent ### 4. Org Chart - Team-based hierarchy view - Real-time agent status - Agent details with personality ### 5. Scheduler - Cron-based task scheduling - One-click "Run Now" ## API Endpoints | Method | Endpoint | Description | |--------|----------|-------------| | GET | `/api/projects` | List all projects | | POST | `/api/projects` | Create new project (full fields) | | GET | `/api/system` | System status | | GET | `/api/gateway` | OpenClaw Gateway status | | GET | `/api/ollama` | Ollama models | ## Create Project (Full Fields) **POST** `http://localhost:3000/api/projects` ```json { "projectName": "The DigiCode Landing Page", "shortDescription": "Modern landing page for digital marketing agency", "tech": "Next.js, React, Tailwind CSS", "author": "Suresh", "fullPRD": "1. Hero section with agency name\n2. Services grid\n3. Portfolio showcase\n4. Contact form\n5. Footer with social links", "projectType": "web development", "priority": "high" } ``` **Example curl:** ```bash curl -X POST http://localhost:3000/api/projects \ -H "Content-Type: application/json" \ -d '{ "projectName": "The DigiCode Landing Page", "shortDescription": "Modern landing page for digital marketing agency", "tech": "Next.js, React, Tailwind CSS", "author": "Suresh", "fullPRD": "1. Hero section\n2. Services grid\n3. Portfolio\n4. Contact form\n5. Footer", "projectType": "web development", "priority": "high" }' ``` ## Team Routing Automatically route projects to the appropriate team: | Keywords | Team | |----------|------| | marketing, seo, ads, content, social | Marketing | | web, frontend, backend, api, database | Developer | | design, logo, graphic, video, ui, ux | Creative | | sales, crm, leads | Sales | | support, help, bug, issue | Support | | operations, automation, workflow | Operations | ## Example Usage **User:** "Create a new SEO project" **You:** Use the MissionClaw UI to: 1. Go to Projects → Create new project 2. Go to Kanban → Add tasks 3. Assign to SEO Specialist agent 4. Track progress on dashboard --- For more info: https://github.com/sureshchitmil/missionclaw

path: index.js
content: const MISSIONCLAW_URL = process.env.MISSIONCLAW_URL || "http://localhost:3000";

// Parse project details from user input
function parseProjectInput(input) {
  // Try to extract project name, description, type, and priority
  const parts = input.split(/ - |, /);
  
  const result = {
    projectName: parts[0]?.trim() || "Untitled Project",
    description: parts[0]?.trim() || "",
    projectType: "",
    priority: "medium"
  };
  
  // Look for keywords to determine project type
  const fullText = input.toLowerCase();
  
  if (fullText.includes("web") || fullText.includes("website") || fullText.includes("frontend") || fullText.includes("backend")) {
    result.projectType = "web development";
  } else if (fullText.includes("mobile") || fullText.includes("app") || fullText.includes("ios") || fullText.includes("android")) {
    result.projectType = "mobile development";
  } else if (fullText.includes("marketing") || fullText.includes("seo") || fullText.includes("ads") || fullText.includes("social media")) {
    result.projectType = "digital marketing";
  } else if (fullText.includes("design") || fullText.includes("logo") || fullText.includes("graphic")) {
    result.projectType = "creative design";
  }
  
  // Look for priority
  if (fullText.includes("high priority") || fullText.includes("urgent") || fullText.includes("asap")) {
    result.priority = "high";
  } else if (fullText.includes("low priority")) {
    result.priority = "low";
  }
  
  // Use remaining parts as description
  if (parts.length > 1) {
    result.description = parts.slice(1).join(" - ");
  }
  
  return result;
}

// Handle /mc command
async function handleMcCommand(args, context) {
  const subcommand = args[0]?.toLowerCase();
  
  if (!subcommand || subcommand === "help") {
    return {
      content: `**MissionClaw Commands:**

\`/mc create <project-details>\` - Create project in MissionClaw
\`/mc status <project-id>\` - Get project progress
\`/mc list\` - List all projects
\`/mc teams\` - List available teams

**Example:**
\`/mc create Build an e-commerce website with shopping cart - web development - high priority\``
    };
  }
  
  if (subcommand === "create") {
    const projectDetails = args.slice(1).join(" ");
    if (!projectDetails) {
      return { content: "Please provide project details. Example: `/mc create Build a marketing website - web development`" };
    }
    
    const parsed = parseProjectInput(projectDetails);
    
    try {
      const response = await fetch(`${MISSIONCLAW_URL}/api/projects`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(parsed)
      });
      
      const data = await response.json();
      
      if (data.success) {
        return {
          content: `**✅ Project Created in MissionClaw**

**Project:** ${data.project.name}
**Team:** ${data.project.team || "Unassigned"}
**Tasks Created:** ${data.tasksCreated}
**Message:** ${data.message}

**Project ID:** \`${data.project.id}\`

Use \`/mc status ${data.project.id}\` to check progress.`
        };
      } else {
        return { content: `**Error:** ${data.error}` };
      }
    } catch (error) {
      return { content: `**Connection Error:** Could not connect to MissionClaw at ${MISSIONCLAW_URL}. Make sure MissionClaw is running.` };
    }
  }
  
  if (subcommand === "status") {
    const projectId = args[1];
    if (!projectId) {
      return { content: "Please provide project ID. Example: `/mc status project-123`" };
    }
    
    try {
      const response = await fetch(`${MISSIONCLAW_URL}/api/projects?action=report&projectId=${projectId}`);
      const data = await response.json();
      
      if (data.projectName) {
        const progress = data.summary.progress;
        return {
          content: `**📊 Project Status: ${data.projectName}**

**Progress:** ${progress}%

- ✅ Completed: ${data.summary.completed}
- 🔄 In Progress: ${data.summary.inProgress}
- ⏳ Pending: ${data.summary.pending}

**${data.readyForReview ? "🎉 Project Complete - Ready for review!" : "Tasks in progress..."}**`
        };
      } else {
        return { content: "Project not found." };
      }
    } catch (error) {
      return { content: `**Connection Error:** Could not connect to MissionClaw.` };
    }
  }
  
  if (subcommand === "list") {
    try {
      const response = await fetch(`${MISSIONCLAW_URL}/api/projects`);
      const data = await response.json();
      
      if (data.projects.length === 0) {
        return { content: "No projects in MissionClaw yet." };
      }
      
      const projectList = data.projects.map(p => 
        `- **${p.name}** (${p.completedCount}/${p.taskCount} tasks) - \`${p.id}\``
      ).join("\n");
      
      return { content: `**📁 Projects in MissionClaw:**\n\n${projectList}` };
    } catch (error) {
      return { content: `**Connection Error:** Could not connect to MissionClaw.` };
    }
  }
  
  if (subcommand === "teams") {
    return {
      content: `**🏢 Available Teams in MissionClaw:**

- **Marketing** - Digital marketing, SEO, ads, content, social media
- **Developer** - Web, mobile, app, software development
- **Creative** - Design, graphics, video, UI/UX
- **Sales** - CRM, leads, client management
- **Support** - Helpdesk, bugs, issues
- **Operations** - Workflow, automation, integrations

Projects are automatically routed to the appropriate team based on keywords in the project description.`
    };
  }
  
  return { content: "Unknown command. Use `/mc help` for available commands." };
}

module.exports = {
  name: "missionclaw",
  handle: async (args, context) => {
    return handleMcCommand(args, context);
  }
};

path: package.json
content: {
  "name": "missionclaw",
  "version": "1.0.0",
  "description": "Integrates Velo with MissionClaw for project management",
  "entry": "index.js",
  "commands": [
    {
      "name": "/mc",
      "description": "Send project to MissionClaw team"
    },
    {
      "name": "/missionclaw",
      "description": "Send project to MissionClaw team"
    }
  ],
  "env": {
    "MISSIONCLAW_URL": "http://localhost:3000"
  }
}

Security scan verdicts — ClawScan: suspicious | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (HIGH)