From tentaqles
Create a new project inside the current client workspace. Scaffolds CLAUDE.md, brief.md, and git config inherited from the client manifest. Use when the user says "new project", "start a project", "create a project folder", or mentions starting work on a new feature/service/app within an existing client. Also triggers when the user shares an Asana/Jira/GitHub issue URL and wants to start working on it.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tentaqles:add-projectThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create a new project folder inside the current client workspace with inherited context from `.tentaqles.yaml`. Projects are subfolders of clients — they don't need their own manifest.
Create a new project folder inside the current client workspace with inherited context from .tentaqles.yaml. Projects are subfolders of clients — they don't need their own manifest.
First, find the parent client:
python -c "
import sys, os
sys.path.insert(0, os.environ.get('CLAUDE_PLUGIN_ROOT', '.'))
from tentaqles.manifest.loader import load_manifest
manifest = load_manifest(os.getcwd())
if manifest:
print(f'client={manifest[\"client\"]}')
print(f'root={manifest[\"_client_root\"]}')
print(f'display={manifest.get(\"display_name\", manifest[\"client\"])}')
print(f'git_email={manifest.get(\"git\", {}).get(\"email\", \"\")}')
print(f'git_name={manifest.get(\"display_name\", \"Developer\")}')
print(f'language={manifest.get(\"language\", \"en\")}')
else:
print('NO_CLIENT')
"
If NO_CLIENT is returned, tell the user: "You're not inside a client workspace. Run /tentaqles:add-client first to set one up, then cd into it."
Ask for what's needed. Project name is required; the rest is optional and can be filled in later.
| Field | Required | Example |
|---|---|---|
| Project name | Yes | "inventory-api" |
| Description/goal | No | "REST API for inventory management" |
| Tech stack | No | python, fastapi, postgresql |
| External ticket URL | No | Asana task, Jira ticket, GitHub issue URL |
If the user provides a ticket URL, fetch context from it before creating files.
Depending on the URL type:
GitHub Issue:
gh issue view {number} --repo {owner/repo} --json title,body,labels,assignees,milestone
Asana/Jira/Other URL: Use WebFetch to grab the page content and extract: title, description, acceptance criteria, assignees, due dates, subtasks.
Parse out structured fields. If extraction fails, note that the URL was provided and the user can add details manually.
mkdir -p "{client_root}/{project-slug}"
Write {client_root}/{project-slug}/CLAUDE.md with inherited client context:
# {Project Name}
## Overview
{description from user or ticket, or placeholder}
## Tech Stack
{user-provided stack, or "TBD — update as the project takes shape"}
## Client Context
- Client: {client display_name}
- Cloud: {cloud provider from manifest}
- Database: {database provider + dialect from manifest}
- Git: {git provider} ({git email})
- Language: {language}
## Development
<!-- Add as you go: -->
<!-- - Build: ... -->
<!-- - Test: ... -->
<!-- - Deploy: ... -->
Only create this if the user provided a description, goal, or ticket. Don't create an empty brief — it's just noise.
---
project: {name}
status: active
created: {YYYY-MM-DD}
source: {ticket URL if any}
---
# {Project Name}
## Goal
{from user input or extracted from ticket}
## Deliverables
{from user or ticket subtasks}
- [ ] {deliverable 1}
- [ ] {deliverable 2}
## Acceptance Criteria
{from ticket or user}
## Notes
{any additional context from ticket — assignees, due date, labels}
Check if the project or client root is already a git repo:
git rev-parse --git-dir 2>/dev/null
If not a git repo, ask the user: "Initialize a git repo for this project?" If yes:
cd "{client_root}/{project-slug}"
git init
git config user.email "{git_email_from_manifest}"
git config user.name "{display_name_from_manifest}"
If the client root IS a git repo (mono-repo pattern), skip init — the project inherits the parent repo's config.
echo '{"cwd": "{client_root}", "event": "touch", "data": {"node_id": "{project-slug}", "node_type": "module", "action": "create", "weight": 2.0}}' | python "${CLAUDE_PLUGIN_ROOT}/scripts/memory-bridge.py" 2>/dev/null || true
Tell the user:
/tentaqles:build-graph after you have some files to analyze."npx claudepluginhub tentaqles/tentaqles-pluginGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.