返回顶部
m

mission-control任务控制台

Build a personal dashboard for OpenClaw with task management, memory browser, calendar, team tracking, and GitHub trends. Use when the user wants to create a web-based mission control dashboard for their OpenClaw instance, track tasks, view memories, manage calendar events, or build a custom dashboard interface.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
637
下载量
免费
免费
1
收藏
概述
安装方式
版本历史

mission-control

技能名称:mission-control
详细描述:

任务控制技能

为OpenClaw构建个人仪表盘——一个集任务、记忆、日历和团队管理于一体的中央指挥中心。

你将构建的内容

一个连接到OpenClaw实例的Next.js网页仪表盘,提供以下功能:

  • - 任务看板 - 看板式任务管理
  • 记忆浏览器 - 搜索和查看OpenClaw记忆
  • 日历视图 - 查看预定事件和定时任务
  • 团队状态 - 追踪每个人的工作内容
  • GitHub趋势 - 发现热门仓库

架构概览

┌─────────────────────────────────────┐
│ Next.js 前端 │
│ ┌─────────┐ ┌─────────┐ ┌────────┐ │
│ │ 任务 │ │ 记忆 │ │ 日历 │ │
│ │ 看板 │ │ 列表 │ │ 视图 │ │
│ └────┬────┘ └────┬────┘ └───┬────┘ │
│ └───────────┴──────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │ API 路由 │ │
│ └──────┬──────┘ │
└──────────────┼───────────────────────┘

┌───────┴───────┐
│ │
┌──────┴──────┐ ┌──────┴──────┐
│ 本地JSON │ │ OpenClaw │
│ 文件 │ │ 记忆 │
└─────────────┘ └─────────────┘

前提条件

  • - Node.js 18+
  • 安装并运行OpenClaw
  • 具备React/Next.js基础知识

分步指南

第一步:初始化项目

bash
npx create-next-app@latest mission-control --typescript --tailwind

第二步:安装依赖

bash
cd mission-control
npm install lucide-react

第三步:创建数据层

创建src/lib/data.ts用于文件存储:

typescript
import fs from fs/promises;
import path from path;

const DATA_DIR = path.join(process.cwd(), src, data);

// 类型定义
export interface Task {
id: string;
title: string;
description: string;
status: todo | in-progress | done;
assignee: string;
createdAt: string;
updatedAt: string;
}

// 初始化数据文件
async function initDataFile(filename: string, defaultData: unknown) {
const filepath = path.join(DATA_DIR, filename);
try {
await fs.access(filepath);
} catch {
await fs.mkdir(DATA_DIR, { recursive: true });
await fs.writeFile(filepath, JSON.stringify(defaultData, null, 2));
}
return filepath;
}

// 任务
export async function getTasks(): Promise {
const filepath = await initDataFile(tasks.json, []);
const data = await fs.readFile(filepath, utf-8);
return JSON.parse(data);
}

export async function addTask(task: Omit): Promise {
const tasks = await getTasks();
const newTask: Task = {
...task,
id: Date.now().toString(),
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(),
};
tasks.push(newTask);
await fs.writeFile(
path.join(DATA_DIR, tasks.json),
JSON.stringify(tasks, null, 2)
);
return newTask;
}

export async function updateTask(id: string, updates: Partial): Promise {
const tasks = await getTasks();
const index = tasks.findIndex((t) => t.id === id);
if (index === -1) return null;

tasks[index] = {
...tasks[index],
...updates,
updatedAt: new Date().toISOString()
};
await fs.writeFile(
path.join(DATA_DIR, tasks.json),
JSON.stringify(tasks, null, 2)
);
return tasks[index];
}

第四步:创建API路由

创建src/app/api/tasks/route.ts:

typescript
import { NextRequest, NextResponse } from next/server;
import { getTasks, addTask, updateTask } from @/lib/data;

export async function GET() {
const tasks = await getTasks();
return NextResponse.json(tasks);
}

export async function POST(request: NextRequest) {
try {
const body = await request.json();
const task = await addTask(body);
return NextResponse.json(task, { status: 201 });
} catch (error) {
return NextResponse.json(
{ error: 创建任务失败 },
{ status: 500 }
);
}
}

export async function PUT(request: NextRequest) {
try {
const { id, ...updates } = await request.json();
const task = await updateTask(id, updates);
if (!task) {
return NextResponse.json({ error: 任务未找到 }, { status: 404 });
}
return NextResponse.json(task);
} catch (error) {
return NextResponse.json(
{ error: 更新任务失败 },
{ status: 500 }
);
}
}

第五步:创建组件

导航组件 (src/components/Navigation.tsx):

typescript
use client;

import Link from next/link;
import { usePathname } from next/navigation;
import { useState } from react;
import { LayoutDashboard, ClipboardList, Menu, X } from lucide-react;

const navItems = [
{ href: /, label: 仪表盘, icon: LayoutDashboard },
{ href: /tasks, label: 任务, icon: ClipboardList },
];

export function Navigation() {
const pathname = usePathname();
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);

return (
<>
{/ 桌面端侧边栏 /}

{/ 移动端头部 /}



任务控制


onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
className=p-2 rounded-lg bg-gray-700
>
{mobileMenuOpen ? : }


{/ 移动端抽屉 /}
{mobileMenuOpen && (


)}

);
}

第六步:创建任务看板

typescript
use client;

import { useState, useEffect } from react;

interface Task {
id: string;
title: string;
description: string;
status: todo | in-progress | done;
assignee: string;
}

export function TaskBoard() {
const [tasks, setTasks] = useState([]);
const [loading, setLoading] = useState(true);

useEffect(() => {
fetchTasks();
}, []);

const fetchTasks = async () => {
try {
const response = await fetch(/api

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 mission-control-builder-1776420085 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 mission-control-builder-1776420085 技能

通过命令行安装

skillhub install mission-control-builder-1776420085

下载

⬇ 下载 mission-control v1.0.0(免费)

文件大小: 5.07 KB | 发布时间: 2026-4-17 19:39

v1.0.0 最新 2026-4-17 19:39
Initial release of Mission Control Skill — build a personal dashboard for OpenClaw.

- Provides a Next.js dashboard template with Kanban task board, memory browser, calendar, and team management.
- Includes local file-based data layer and API routes for task CRUD operations.
- Features modular components, including navigation and a mobile-friendly design.
- Integrates GitHub Trends and OpenClaw memory viewer.
- Offers step-by-step setup guide for rapid project initialization.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部