{
  "schemaVersion": "1.0",
  "item": {
    "slug": "opentangl",
    "name": "OpenTangl",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/8co/opentangl",
    "canonicalUrl": "https://clawhub.ai/8co/opentangl",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/opentangl",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=opentangl",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "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/opentangl"
    },
    "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/opentangl",
    "agentPageUrl": "https://openagent3.xyz/skills/opentangl/agent",
    "manifestUrl": "https://openagent3.xyz/skills/opentangl/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/opentangl/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": "OpenTangl",
        "body": "Configure a self-driving development loop for any JavaScript/TypeScript project. This skill detects your project setup, generates configuration files, and prepares OpenTangl to run autonomously.\n\nFollow these steps in order. Complete each step fully before moving to the next. Wait for user confirmation at every gate before proceeding. Do not skip steps or combine them — the user needs to complete actions on their end between steps."
      },
      {
        "title": "Prerequisites",
        "body": "The user must have OpenTangl cloned and installed before using this skill. If they haven't, provide these commands for them to run:\n\ngit clone https://github.com/8co/opentangl.git\ncd opentangl\nnpm install\n\nDo not run these commands on the user's behalf. Wait for confirmation that OpenTangl is installed.\n\nOnce confirmed, verify the required tools are present. Run each check and report the results:\n\nNode.js ≥ 18 — run node --version and show the output\ngit — run git --version and show the output\nGitHub CLI — run gh auth status and show the output (needed for PR creation and merging)\n\nReport all results to the user. If anything is missing, tell them exactly how to install it and stop until resolved."
      },
      {
        "title": "Step 1 — Determine the Target Project",
        "body": "Ask the user:\n\nAre you improving (a) an existing project, or (b) starting from scratch?"
      },
      {
        "title": "Path A: Existing Project",
        "body": "Ask: \"Where is your project?\" Accept a path. If they say \"this directory,\" use cwd.\nTell the user you'll read config files in their project directory to detect the setup. Only inspect files in the directory the user provided — do not scan outside it. Check:\n\nType: tsconfig.json → TypeScript, vite.config.ts → Vite, next.config.* → Next.js, serverless.yml → Serverless\nPackage manager: package-lock.json → npm, yarn.lock → yarn, pnpm-lock.yaml → pnpm\nBuild/test commands: Read package.json scripts for build, test, lint, typecheck\nSource dirs: Default to src/ if it exists\nTarget branch: Check git symbolic-ref refs/remotes/origin/HEAD or look for main vs master\n\n\nShow everything you detected and confirm with the user before proceeding.\nAsk: \"Are there other repos that are part of this same product?\" If yes, repeat detection for each."
      },
      {
        "title": "Path B: New Project",
        "body": "Tell the user to scaffold and initialize their project before continuing. Suggest the appropriate tool based on what they want to build:\n\nReact + Vite: npm create vite@latest {name} -- --template react-ts\nNext.js: npx create-next-app@latest {name} --typescript\nExpress: create package.json + src/index.ts manually\n\nThey should also initialize git and create a GitHub repo:\n\ncd {name}\ngit init && git add . && git commit -m \"Initial scaffold\"\ngh repo create {name} --public --source . --push\n\nDo not run these commands on the user's behalf. Once they confirm the project exists with a GitHub remote, continue."
      },
      {
        "title": "Step 2 — Generate projects.yaml",
        "body": "Create projects.yaml in the OpenTangl root directory. Each project entry needs:\n\nprojects:\n  - id: my-app                          # Short kebab-case ID (used in CLI flags)\n    name: my-app                        # Human-readable name\n    path: ../my-app                     # Relative path from OpenTangl root to the project\n    type: react-vite                    # Project type (see below)\n    description: React dashboard app    # One-line description\n    scan_dirs:\n      - src                             # Directories containing source code\n    skip_patterns:\n      - node_modules\n      - dist\n      - \"*.test.*\"\n    verify:                             # Commands that must pass before committing\n      - command: npm\n        args: [run, build]\n    package_manager: npm                # npm | yarn | pnpm\n    merge:\n      target_branch: main               # Branch PRs merge into\n\nSupported types: typescript-node, serverless-js, serverless-ts, react-vite, react-next, express (or any descriptive string).\n\nFor multi-project setups, add an environment field to group related projects under a shared vision:\n\n- id: my-api\n    environment: my-product\n    # ...\n  - id: my-frontend\n    environment: my-product\n    # ..."
      },
      {
        "title": "Step 3 — Create the Vision Doc",
        "body": "Create docs/environments/{environment}/product-vision.md (use the project id as environment name for single projects, or the environment field for multi-project).\n\nThe vision doc has two sections:"
      },
      {
        "title": "Origin & Direction (human-authored, never modified by OpenTangl)",
        "body": "Ask the user to describe:\n\nWhat This Is — 2-3 sentences about the project\nWhere It's Going — long-term direction, 6-12 months out\nWhat Matters Most — 3-5 principles guiding decisions"
      },
      {
        "title": "Current Priorities (maintained by OpenTangl after each run)",
        "body": "Ask: \"What are the first 3-5 things you want built or improved?\"\n\nWrite them as Active Initiatives:\n\n### Active Initiatives\n\n1. **{Priority}** — {What and why}\n   - Status: not started\n\nIf the user isn't sure, offer to read the codebase and suggest priorities."
      },
      {
        "title": "Step 4 — Configure the LLM",
        "body": "The user needs to create a .env file in the OpenTangl root with their API key. Do not accept or handle API keys directly — provide the template and let the user create the file themselves.\n\nFirst, verify that .env appears in the project's .gitignore by reading the file. If it does not, add it and tell the user.\n\nThen provide the appropriate template for the user to fill in:\n\nFor OpenAI:\n\nOPENAI_API_KEY=sk-...\nOPENAI_MODEL=gpt-4o\nDEFAULT_AGENT=openai\n\nFor Anthropic (Claude):\n\nANTHROPIC_API_KEY=sk-ant-...\nANTHROPIC_MODEL=claude-sonnet-4-20250514\nDEFAULT_AGENT=anthropic\n\nTell the user: \"Create a .env file in the OpenTangl root and paste one of the templates above with your key. This file is gitignored and will never be committed.\"\n\nWait for confirmation before continuing."
      },
      {
        "title": "Step 5 — Prepare the First Run",
        "body": "Initialize an empty task queue:\n\nmkdir -p tasks\necho \"tasks: []\" > tasks/queue.yaml\n\nThen provide the user with the command to start the autopilot. Do not run this command on the user's behalf — show it and let them execute it:\n\nFor a single project:\n\nnpx tsx src/cli.ts autopilot --projects {project-id} --cycles 1 --feature-ratio 0.8\n\nFor multi-project:\n\nnpx tsx src/cli.ts autopilot --projects {api-id},{ui-id} --cycles 1 --feature-ratio 0.8\n\nWhat happens during a cycle:\n\nOpenTangl reads the vision doc and scans the codebase\nIt proposes tasks aligned with the vision\nIt executes each task — writes code, runs verification\nIt creates PRs, reviews them with the LLM, merges if clean\nIt updates the vision doc with progress\n\nTell the user to review the results after the first run — check the generated PRs and the updated vision doc."
      },
      {
        "title": "Troubleshooting",
        "body": "\"No pending tasks\" — The queue is empty. Run autopilot to have the LLM propose tasks, or add more specific priorities to the vision doc.\nBuild failures — OpenTangl retries up to 3 times with error feedback. If all attempts fail, the task is marked failed and skipped.\nEscalated PRs — The LLM reviewer flagged critical concerns. Check the GitHub issue it created for details.\n\"OPENAI_API_KEY is required\" — Create .env and add your key (see Step 4).\nMerge conflicts — OpenTangl has a built-in conflict resolver. If it can't resolve automatically, the PR is escalated for human review."
      }
    ],
    "body": "OpenTangl\n\nConfigure a self-driving development loop for any JavaScript/TypeScript project. This skill detects your project setup, generates configuration files, and prepares OpenTangl to run autonomously.\n\nFollow these steps in order. Complete each step fully before moving to the next. Wait for user confirmation at every gate before proceeding. Do not skip steps or combine them — the user needs to complete actions on their end between steps.\n\nPrerequisites\n\nThe user must have OpenTangl cloned and installed before using this skill. If they haven't, provide these commands for them to run:\n\ngit clone https://github.com/8co/opentangl.git\ncd opentangl\nnpm install\n\n\nDo not run these commands on the user's behalf. Wait for confirmation that OpenTangl is installed.\n\nOnce confirmed, verify the required tools are present. Run each check and report the results:\n\nNode.js ≥ 18 — run node --version and show the output\ngit — run git --version and show the output\nGitHub CLI — run gh auth status and show the output (needed for PR creation and merging)\n\nReport all results to the user. If anything is missing, tell them exactly how to install it and stop until resolved.\n\nStep 1 — Determine the Target Project\n\nAsk the user:\n\nAre you improving (a) an existing project, or (b) starting from scratch?\n\nPath A: Existing Project\nAsk: \"Where is your project?\" Accept a path. If they say \"this directory,\" use cwd.\nTell the user you'll read config files in their project directory to detect the setup. Only inspect files in the directory the user provided — do not scan outside it. Check:\nType: tsconfig.json → TypeScript, vite.config.ts → Vite, next.config.* → Next.js, serverless.yml → Serverless\nPackage manager: package-lock.json → npm, yarn.lock → yarn, pnpm-lock.yaml → pnpm\nBuild/test commands: Read package.json scripts for build, test, lint, typecheck\nSource dirs: Default to src/ if it exists\nTarget branch: Check git symbolic-ref refs/remotes/origin/HEAD or look for main vs master\nShow everything you detected and confirm with the user before proceeding.\nAsk: \"Are there other repos that are part of this same product?\" If yes, repeat detection for each.\nPath B: New Project\n\nTell the user to scaffold and initialize their project before continuing. Suggest the appropriate tool based on what they want to build:\n\nReact + Vite: npm create vite@latest {name} -- --template react-ts\nNext.js: npx create-next-app@latest {name} --typescript\nExpress: create package.json + src/index.ts manually\n\nThey should also initialize git and create a GitHub repo:\n\ncd {name}\ngit init && git add . && git commit -m \"Initial scaffold\"\ngh repo create {name} --public --source . --push\n\n\nDo not run these commands on the user's behalf. Once they confirm the project exists with a GitHub remote, continue.\n\nStep 2 — Generate projects.yaml\n\nCreate projects.yaml in the OpenTangl root directory. Each project entry needs:\n\nprojects:\n  - id: my-app                          # Short kebab-case ID (used in CLI flags)\n    name: my-app                        # Human-readable name\n    path: ../my-app                     # Relative path from OpenTangl root to the project\n    type: react-vite                    # Project type (see below)\n    description: React dashboard app    # One-line description\n    scan_dirs:\n      - src                             # Directories containing source code\n    skip_patterns:\n      - node_modules\n      - dist\n      - \"*.test.*\"\n    verify:                             # Commands that must pass before committing\n      - command: npm\n        args: [run, build]\n    package_manager: npm                # npm | yarn | pnpm\n    merge:\n      target_branch: main               # Branch PRs merge into\n\n\nSupported types: typescript-node, serverless-js, serverless-ts, react-vite, react-next, express (or any descriptive string).\n\nFor multi-project setups, add an environment field to group related projects under a shared vision:\n\n  - id: my-api\n    environment: my-product\n    # ...\n  - id: my-frontend\n    environment: my-product\n    # ...\n\nStep 3 — Create the Vision Doc\n\nCreate docs/environments/{environment}/product-vision.md (use the project id as environment name for single projects, or the environment field for multi-project).\n\nThe vision doc has two sections:\n\nOrigin & Direction (human-authored, never modified by OpenTangl)\n\nAsk the user to describe:\n\nWhat This Is — 2-3 sentences about the project\nWhere It's Going — long-term direction, 6-12 months out\nWhat Matters Most — 3-5 principles guiding decisions\nCurrent Priorities (maintained by OpenTangl after each run)\n\nAsk: \"What are the first 3-5 things you want built or improved?\"\n\nWrite them as Active Initiatives:\n\n### Active Initiatives\n\n1. **{Priority}** — {What and why}\n   - Status: not started\n\n\nIf the user isn't sure, offer to read the codebase and suggest priorities.\n\nStep 4 — Configure the LLM\n\nThe user needs to create a .env file in the OpenTangl root with their API key. Do not accept or handle API keys directly — provide the template and let the user create the file themselves.\n\nFirst, verify that .env appears in the project's .gitignore by reading the file. If it does not, add it and tell the user.\n\nThen provide the appropriate template for the user to fill in:\n\nFor OpenAI:\n\nOPENAI_API_KEY=sk-...\nOPENAI_MODEL=gpt-4o\nDEFAULT_AGENT=openai\n\n\nFor Anthropic (Claude):\n\nANTHROPIC_API_KEY=sk-ant-...\nANTHROPIC_MODEL=claude-sonnet-4-20250514\nDEFAULT_AGENT=anthropic\n\n\nTell the user: \"Create a .env file in the OpenTangl root and paste one of the templates above with your key. This file is gitignored and will never be committed.\"\n\nWait for confirmation before continuing.\n\nStep 5 — Prepare the First Run\n\nInitialize an empty task queue:\n\nmkdir -p tasks\necho \"tasks: []\" > tasks/queue.yaml\n\n\nThen provide the user with the command to start the autopilot. Do not run this command on the user's behalf — show it and let them execute it:\n\nFor a single project:\n\nnpx tsx src/cli.ts autopilot --projects {project-id} --cycles 1 --feature-ratio 0.8\n\n\nFor multi-project:\n\nnpx tsx src/cli.ts autopilot --projects {api-id},{ui-id} --cycles 1 --feature-ratio 0.8\n\n\nWhat happens during a cycle:\n\nOpenTangl reads the vision doc and scans the codebase\nIt proposes tasks aligned with the vision\nIt executes each task — writes code, runs verification\nIt creates PRs, reviews them with the LLM, merges if clean\nIt updates the vision doc with progress\n\nTell the user to review the results after the first run — check the generated PRs and the updated vision doc.\n\nTroubleshooting\n\"No pending tasks\" — The queue is empty. Run autopilot to have the LLM propose tasks, or add more specific priorities to the vision doc.\nBuild failures — OpenTangl retries up to 3 times with error feedback. If all attempts fail, the task is marked failed and skipped.\nEscalated PRs — The LLM reviewer flagged critical concerns. Check the GitHub issue it created for details.\n\"OPENAI_API_KEY is required\" — Create .env and add your key (see Step 4).\nMerge conflicts — OpenTangl has a built-in conflict resolver. If it can't resolve automatically, the PR is escalated for human review."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/8co/opentangl",
    "publisherUrl": "https://clawhub.ai/8co/opentangl",
    "owner": "8co",
    "version": "0.1.10",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/opentangl",
    "downloadUrl": "https://openagent3.xyz/downloads/opentangl",
    "agentUrl": "https://openagent3.xyz/skills/opentangl/agent",
    "manifestUrl": "https://openagent3.xyz/skills/opentangl/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/opentangl/agent.md"
  }
}