{
  "schemaVersion": "1.0",
  "item": {
    "slug": "project-router",
    "name": "Project Router",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/SafaTinaztepe/project-router",
    "canonicalUrl": "https://clawhub.ai/SafaTinaztepe/project-router",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/project-router",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=project-router",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/project.js",
      "scripts/server.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/project-router"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/project-router",
    "agentPageUrl": "https://openagent3.xyz/skills/project-router/agent",
    "manifestUrl": "https://openagent3.xyz/skills/project-router/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/project-router/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "project-router",
        "body": "This skill is Safa’s canonical project management + context switching control plane.\n\nCore idea:\n\nCanonical PM is local + queryable (SQLite): projects, tasks, context packs.\nTrello is a tracking backend/UI: cards mirror canonical tasks; lists mirror status; labels mirror priority.\nThe “killer feature” is context switching: load the right docs/code/index for a project/task quickly and deterministically.\n\nIt provides:\n\nCLI: project <verb> ...\nMCP server: mcp-project-router (tools mirror the CLI)\nPer-project bundle stored in .project/ (brief, targets, artifact index)\nA canonical task store (SQLite) + Trello sync adapter"
      },
      {
        "title": "Project bundle layout (v1)",
        "body": "The .project/ bundle is the project-local context nucleus. The canonical PM DB points at these bundles.\n\nInside a project root:\n\n.project/project.json — structured manifest\n.project/PROJECT.md — living brief\n.project/targets.json — target definitions (commands)\n.project/index/artifacts.json — artifact index\n.project/history/plans/*.json — plans\n.project/history/applies/*.json — apply receipts"
      },
      {
        "title": "Baseline / existing commands",
        "body": "From anywhere inside a repo/workspace:\n\nproject detect\nproject context\nproject target list\nproject target run <name>\n\nInitialize a bundle (dry-run plan + apply):\n\nproject init (prints plan)\nproject apply <planId>\n\nArtifacts:\n\nproject artifact add <path|url> [--tags a,b,c] (plan + apply)"
      },
      {
        "title": "Canonical PM + context switching (new)",
        "body": "Note: these verbs are the target UX. Implementations should remain idempotent and safe.\n\nProject registration:\n\nproject pm project add <slug> --name \"...\" --root <path>\nproject pm project list\n\nTask management:\n\nproject pm task add <slug> \"<title>\" --priority P0|P1|P2|P3 [--status inbox|next|doing|blocked|waiting|done]\nproject pm task list [--project <slug>] [--status ...]\nproject pm task set-status <taskId> <status>\n\nContext switching:\n\nproject pm switch <slug>\n\nprints pinned docs + top targets + active tasks\n\n\nproject pm focus <taskId>\n\nloads task-linked files/artifacts and updates the task activity log\n\nTrello sync:\n\nproject pm trello sync [--project <slug>]\n\nensures the single \"Safa — PM\" Trello board exists\nensures lists exist (Inbox/Next/Doing/Blocked/Waiting/Done)\nupserts cards for canonical tasks\nmoves cards to match status\napplies priority labels (P0..P3)"
      },
      {
        "title": "MCP quick start (via mcporter)",
        "body": "mcporter list mcp-project-router --schema --timeout 120000 --json\n\nExamples:\n\nDetect:\n\nmcporter call --server mcp-project-router --tool project_detect --args '{}'\n\n\nRead context:\n\nmcporter call --server mcp-project-router --tool project_context_read --args '{}'\n\n\nRun target:\n\nmcporter call --server mcp-project-router --tool project_target_run --args '{\"target\":\"test\"}'"
      },
      {
        "title": "Trello backend conventions",
        "body": "Single-board setup:\n\nBoard name: Safa — PM (or configurable)\nLists == canonical statuses:\n\nInbox, Next, Doing, Blocked, Waiting, Done\n\n\nCard title: [<project_slug>] <task_title>\nCard description begins with a machine block for idempotency:\n--- pm ---\ntask_id: <stable-id>\nproject: <slug>\nstatus: <status>\npriority: P0|P1|P2|P3\n---\n\n\nLabels (priority, color-coded):\n\nP0 = red\nP1 = orange\nP2 = yellow\nP3 = blue"
      },
      {
        "title": "Canonical PM storage (SQLite)",
        "body": "Recommended DB location (in workspace):\n\n/home/safa/clawd/data/pm/pm.sqlite\n\nMinimum tables (v0):\n\nprojects(slug PRIMARY KEY, name, root_path, created_at, updated_at)\ntasks(task_id PRIMARY KEY, project_slug, title, status, priority, created_at, updated_at)\ntask_refs(task_id, kind, ref) (file paths / urls / artifacts)\nexternal_refs(task_id, system, external_id, meta_json) (e.g., Trello card_id/list_id)"
      },
      {
        "title": "Safety",
        "body": "Project bundle writes remain plan/apply.\nCanonical PM writes should be idempotent and auditable (timestamps + activity log).\nTrello sync should be safe to re-run repeatedly (upsert by task_id marker; never duplicate cards).\nproject_target_run executes commands defined in .project/targets.json."
      }
    ],
    "body": "project-router\n\nThis skill is Safa’s canonical project management + context switching control plane.\n\nCore idea:\n\nCanonical PM is local + queryable (SQLite): projects, tasks, context packs.\nTrello is a tracking backend/UI: cards mirror canonical tasks; lists mirror status; labels mirror priority.\nThe “killer feature” is context switching: load the right docs/code/index for a project/task quickly and deterministically.\n\nIt provides:\n\nCLI: project <verb> ...\nMCP server: mcp-project-router (tools mirror the CLI)\nPer-project bundle stored in .project/ (brief, targets, artifact index)\nA canonical task store (SQLite) + Trello sync adapter\nProject bundle layout (v1)\n\nThe .project/ bundle is the project-local context nucleus. The canonical PM DB points at these bundles.\n\nInside a project root:\n\n.project/project.json — structured manifest\n.project/PROJECT.md — living brief\n.project/targets.json — target definitions (commands)\n.project/index/artifacts.json — artifact index\n.project/history/plans/*.json — plans\n.project/history/applies/*.json — apply receipts\nCLI quick start\nBaseline / existing commands\n\nFrom anywhere inside a repo/workspace:\n\nproject detect\nproject context\nproject target list\nproject target run <name>\n\nInitialize a bundle (dry-run plan + apply):\n\nproject init (prints plan)\nproject apply <planId>\n\nArtifacts:\n\nproject artifact add <path|url> [--tags a,b,c] (plan + apply)\nCanonical PM + context switching (new)\n\nNote: these verbs are the target UX. Implementations should remain idempotent and safe.\n\nProject registration:\n\nproject pm project add <slug> --name \"...\" --root <path>\nproject pm project list\n\nTask management:\n\nproject pm task add <slug> \"<title>\" --priority P0|P1|P2|P3 [--status inbox|next|doing|blocked|waiting|done]\nproject pm task list [--project <slug>] [--status ...]\nproject pm task set-status <taskId> <status>\n\nContext switching:\n\nproject pm switch <slug>\nprints pinned docs + top targets + active tasks\nproject pm focus <taskId>\nloads task-linked files/artifacts and updates the task activity log\n\nTrello sync:\n\nproject pm trello sync [--project <slug>]\nensures the single \"Safa — PM\" Trello board exists\nensures lists exist (Inbox/Next/Doing/Blocked/Waiting/Done)\nupserts cards for canonical tasks\nmoves cards to match status\napplies priority labels (P0..P3)\nMCP quick start (via mcporter)\nmcporter list mcp-project-router --schema --timeout 120000 --json\n\nExamples:\n\nDetect:\nmcporter call --server mcp-project-router --tool project_detect --args '{}'\nRead context:\nmcporter call --server mcp-project-router --tool project_context_read --args '{}'\nRun target:\nmcporter call --server mcp-project-router --tool project_target_run --args '{\"target\":\"test\"}'\nTrello backend conventions\n\nSingle-board setup:\n\nBoard name: Safa — PM (or configurable)\nLists == canonical statuses:\nInbox, Next, Doing, Blocked, Waiting, Done\nCard title: [<project_slug>] <task_title>\nCard description begins with a machine block for idempotency:\n--- pm ---\ntask_id: <stable-id>\nproject: <slug>\nstatus: <status>\npriority: P0|P1|P2|P3\n---\n\nLabels (priority, color-coded):\nP0 = red\nP1 = orange\nP2 = yellow\nP3 = blue\nCanonical PM storage (SQLite)\n\nRecommended DB location (in workspace):\n\n/home/safa/clawd/data/pm/pm.sqlite\n\nMinimum tables (v0):\n\nprojects(slug PRIMARY KEY, name, root_path, created_at, updated_at)\ntasks(task_id PRIMARY KEY, project_slug, title, status, priority, created_at, updated_at)\ntask_refs(task_id, kind, ref) (file paths / urls / artifacts)\nexternal_refs(task_id, system, external_id, meta_json) (e.g., Trello card_id/list_id)\nSafety\nProject bundle writes remain plan/apply.\nCanonical PM writes should be idempotent and auditable (timestamps + activity log).\nTrello sync should be safe to re-run repeatedly (upsert by task_id marker; never duplicate cards).\nproject_target_run executes commands defined in .project/targets.json."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/SafaTinaztepe/project-router",
    "publisherUrl": "https://clawhub.ai/SafaTinaztepe/project-router",
    "owner": "SafaTinaztepe",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/project-router",
    "downloadUrl": "https://openagent3.xyz/downloads/project-router",
    "agentUrl": "https://openagent3.xyz/skills/project-router/agent",
    "manifestUrl": "https://openagent3.xyz/skills/project-router/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/project-router/agent.md"
  }
}