Not a code generator — an entire dev team. Point it at any JS/TS project and a product vision. It plans features, writes code, verifies builds, creates PRs, reviews diffs, and merges — autonomously. Manages multiple repos as one product. Use when you want to ship code without writing it.
Not a code generator — an entire dev team. Point it at any JS/TS project and a product vision. It plans features, writes code, verifies builds, creates PRs, reviews diffs, and merges — autonomously. Manages multiple repos as one product. Use when you want to ship code without writing it.
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.
Prerequisites
The user must have OpenTangl cloned and installed before using this skill. If they haven't, provide these commands for them to run:
git clone https://github.com/8co/opentangl.git
cd opentangl
npm install
Do not run these commands on the user's behalf. Wait for confirmation that OpenTangl is installed.
Once confirmed, verify the required tools are present. Run each check and report the results:
Node.js ≥ 18 — run node --version and show the output
git — run git --version and show the output
GitHub CLI — run gh auth status and show the output (needed for PR creation and merging)
Report all results to the user. If anything is missing, tell them exactly how to install it and stop until resolved.
Step 1 — Determine the Target Project
Ask the user:
Are you improving (a) an existing project, or (b) starting from scratch?
Path A: Existing Project
Ask: "Where is your project?" Accept a path. If they say "this directory," use cwd.
Tell 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:
Do not run these commands on the user's behalf. Once they confirm the project exists with a GitHub remote, continue.
Step 2 — Generate projects.yaml
Create projects.yaml in the OpenTangl root directory. Each project entry needs:
projects:-id:my-app# Short kebab-case ID (used in CLI flags)name:my-app# Human-readable namepath:../my-app# Relative path from OpenTangl root to the projecttype:react-vite# Project type (see below)description:Reactdashboardapp# One-line descriptionscan_dirs:-src# Directories containing source codeskip_patterns:-node_modules-dist-"*.test.*"verify:# Commands that must pass before committing-command:npmargs: [run, build]
package_manager:npm# npm | yarn | pnpmmerge:target_branch:main# Branch PRs merge into
Create docs/environments/{environment}/product-vision.md (use the project id as environment name for single projects, or the environment field for multi-project).
The vision doc has two sections:
Origin & Direction (human-authored, never modified by OpenTangl)
Ask the user to describe:
What This Is — 2-3 sentences about the project
Where It's Going — long-term direction, 6-12 months out
What Matters Most — 3-5 principles guiding decisions
Current Priorities (maintained by OpenTangl after each run)
Ask: "What are the first 3-5 things you want built or improved?"
Write them as Active Initiatives:
### Active Initiatives1.**{Priority}** — {What and why}
- Status: not started
If the user isn't sure, offer to read the codebase and suggest priorities.
Step 4 — Configure the LLM
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.
First, verify that .env appears in the project's .gitignore by reading the file. If it does not, add it and tell the user.
Then provide the appropriate template for the user to fill in:
Tell 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."
Wait for confirmation before continuing.
Step 5 — Prepare the First Run
Initialize an empty task queue:
mkdir -p tasks
echo"tasks: []" > tasks/queue.yaml
Then 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: