From t-tools
Scaffolds a full-stack project skeleton with Rust backend (Axum, SeaORM, Redis) and React frontend (TypeScript, TanStack, Tailwind).
How this skill is triggered — by the user, by Claude, or both
Slash command
/t-tools:t-init <project-name><project-name>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
初始化一个全栈项目骨架:Rust 后端 (Axum + Sea-ORM + Redis) + React 前端 (TypeScript + TanStack + Tailwind)。
初始化一个全栈项目骨架:Rust 后端 (Axum + Sea-ORM + Redis) + React 前端 (TypeScript + TanStack + Tailwind)。
仅在以下场景使用:
/t-init <project-name>不要用于:
$ARGUMENTS = 项目名称(必须)..、/、\如果参数不合法,终止并提示:
请提供合法的项目名称。例如:/t-init my-project
整个流程中使用以下占位符:
{{PROJECT_NAME}} — 项目名称(kebab-case,如 my-project){{PROJECT_NAME_PASCAL}} — PascalCase(如 MyProject){{PROJECT_NAME_SNAKE}} — snake_case(如 my_project)$ARGUMENTS 非空且合法<project-name>/
├── backend/
│ ├── .cargo/
│ │ └── config.toml
│ ├── .config/
│ │ └── nextest.toml
│ ├── core/
│ │ └── src/
│ │ ├── domain/
│ │ └── infrastructure/
│ ├── api/
│ │ └── src/
│ │ └── application/
│ │ └── http/
│ ├── app/
│ │ └── src/
│ └── migrations/
├── frontend/
│ └── src/
│ ├── routes/
│ ├── components/ui/
│ └── lib/
├── demo/
│ └── e2e/
│ ├── fixtures/
│ ├── helpers/
│ └── pages/
└── scripts/
└── lib/
使用 Context7 查询关键依赖的最新文档,确保生成的代码使用当前最佳实践。
Axum — 路由、状态共享、中间件写法
mcp__context7__resolve-library-id → query: "axum web framework"mcp__context7__query-docs → query: "router, state sharing, middleware, serve static files"Sea-ORM — 数据库连接和实体定义
mcp__context7__resolve-library-id → query: "sea-orm rust database"mcp__context7__query-docs → query: "database connection, entity generation, migration"utoipa — OpenAPI 文档生成
mcp__context7__resolve-library-id → query: "utoipa rust openapi"mcp__context7__query-docs → query: "OpenApi derive, swagger ui, axum integration"TanStack Router — 前端文件路由
mcp__context7__resolve-library-id → query: "tanstack router react"mcp__context7__query-docs → query: "file-based routing setup, vite plugin, createRouter"TanStack Query — 数据请求
mcp__context7__resolve-library-id → query: "tanstack query react"mcp__context7__query-docs → query: "QueryClient setup, useQuery, QueryClientProvider"如果某个 Context7 查询失败,降级到 WebSearch 搜索官方文档。如果都无法获取,基于已有知识生成但标注可能需要调整版本。
将查询结果中的版本号和 API 用法保存,传递给后续 subagent。
使用 Agent 工具调度 t-tools:backend-dev subagent。
Subagent Prompt 模板:
初始化后端项目 {{PROJECT_NAME}}。
工作目录:<project-name>/backend/
任务:
- 读取后端模板文件 C:\code\ai\skills\skills\t-init\references\backend-template.md
- 按模板生成所有文件,替换以下占位符:
- {{PROJECT_NAME}} → <实际项目名>
- {{PROJECT_NAME_PASCAL}} → <PascalCase>
- {{PROJECT_NAME_SNAKE}} → <snake_case>
- 注意目录名为 core/,Cargo crate 名为 {{PROJECT_NAME}}-core
- Rust 代码中使用 {{PROJECT_NAME_SNAKE}}_core:: 引用核心 crate
- 根据 Context7 查询结果调整依赖版本(版本信息:[附上 Step 2 收集的版本])
- 生成构建和测试配置文件:
a. backend/.cargo/config.toml(sccache 加速 + dev/release/test profile 优化)
b. backend/.config/nextest.toml(nextest 测试运行器配置)
关键约束:
- sqlx::postgres::PgPoolOptions 没有 connect_timeout 方法,用 acquire_timeout 替代
- OpenAPI 开关:enable_openapi = true 时暴露 /swagger,否则返回 404
- 健康检查:GET /health 检查数据库和 Redis 连接
- 自动迁移:启动时运行 SQLx 迁移
完成后执行 cargo check 验证编译。
后端关键特性:
config.toml 中的 server.enable_openapi 控制GET /health 检查数据库和 Redis 连接static_dir 提供前端文件使用 Agent 工具调度 t-tools:frontend-dev subagent。
Subagent Prompt 模板:
初始化前端项目 {{PROJECT_NAME}}。
工作目录:<project-name>/frontend/
任务分两阶段:
## 阶段一:写入配置和自定义文件
读取前端模板文件 C:\code\ai\skills\skills\t-init\references\frontend-template.md,
生成以下自定义文件(需要 AI 编写的内容):
必须由 AI 编写的文件(从模板生成):
- package.json(含所有依赖)
- tsconfig.json
- vite.config.ts(Tailwind + TanStack Router + React 插件)
- openapi-ts.config.ts
- index.html
- src/main.tsx(React Query + TanStack Router 初始化)
- src/styles.css(Tailwind v4 主题 + 暗色模式)
- src/routes/__root.tsx(根布局 + Toaster + DevTools)
- src/routes/index.tsx(首页)
- src/lib/api-client.ts(Axios 实例)
- src/routeTree.d.ts(类型声明占位)
替换占位符:
- {{PROJECT_NAME}} → <实际项目名>
- {{PROJECT_NAME_PASCAL}} → <PascalCase>
## 阶段二:CLI 驱动的组件初始化
这些文件不要 AI 手写,必须通过 CLI 命令生成:
- npm install(安装所有依赖)
- npx shadcn@latest init -d --defaults
- 自动生成 components.json、button.tsx、utils.ts,更新 styles.css
- 自动安装额外依赖(@base-ui/react、next-themes 等)
- npx shadcn@latest add sonner --overwrite(生成 sonner.tsx)
- 生成的 sonner.tsx 使用 next-themes,main.tsx 已包含 ThemeProvider
- npm run type-check 验证
注意:routeTree.gen.ts 在首次 npm run dev 时才会生成,type-check 可能因此报错,这是正常的。
关键约束:
- 每个关键文件都要有中文注释说明用途、技术选择、修改指南
- package.json 的 scripts 要有注释说明每个命令做什么
- 根据 Context7 查询结果调整依赖版本(版本信息:[附上 Step 2 收集的版本])
前端文件要求:
__root.tsx) 要有注释说明文件路由的工作方式main.tsx 要有注释说明 React 应用启动流程vite.config.ts 要有注释说明每个插件的作用npx shadcn@latest add 生成使用 Agent 工具调度 t-tools:demo-dev subagent。
Subagent Prompt 模板:
初始化 Demo E2E 测试项目 {{PROJECT_NAME}}。
工作目录:<project-name>/demo/
任务:
- 读取 demo 模板文件 C:\code\ai\skills\skills\t-init\references\demo-template.md
- 按模板生成所有文件,替换占位符
- 生成后执行 npm install 安装依赖
- 运行 smoke test 验证 demo 环境正常
替换占位符:
- {{PROJECT_NAME}} → <实际项目名>
- {{PROJECT_NAME_PASCAL}} → <PascalCase>
- {{BASE_URL}} → http://localhost:8080
必须包含的 smoke test(smoke.e2e.ts):
- 不依赖后端服务
- 验证 Playwright 能启动浏览器
- 验证页面导航基本功能
- 验证测试基础设施(fixtures、helpers)可正常导入
- 这个测试必须在 npm install 后立即可运行通过
完成后执行 cd demo && npx playwright install chromium && npx playwright test e2e/smoke.e2e.ts
确保 smoke test 全部通过。
将插件运行时脚本复制到目标项目根目录 scripts/,作为该项目后续环境启动、测试执行和 Demo 运行的优先入口。
复制来源:${CLAUDE_PLUGIN_ROOT}/scripts/
必须复制:
backend-test.pytest-start.pytest-stop.pydemo-start.pydemo-stop.pydemo-test-runner.pydemo-run-all.pydebug-test.pycleanup-demo.pycleanup-test-logs.pydemo-failure-summary.pylib/*.py复制后按当前项目调整脚本默认配置:
backend/、frontend/、demo/ 保持一致。/t-tools:t-* 流程复用。uv run scripts/<name>.py;只有目标项目缺少对应脚本时,才回退到 uv run ${CLAUDE_PLUGIN_ROOT}/scripts/<name>.py。读取 references/agents-template.md 获取模板内容。
生成三个根目录文件:
AGENTS.md — 项目描述占位符 + 项目行为准则CLAUDE.md — 仅包含 @AGENTS.mdREADME.md — 快速启动指南(从 references/scripts-template.md 获取项目本地脚本命令)生成后提示用户填写 AGENTS.md 顶部的项目描述占位符。
收集各 subagent 的验证结果,汇总报告:
cargo check 是否通过npm install + type-check 是否通过(routeTree.gen.ts 错误除外)npm install + smoke test 是否通过如果验证工具不可用,跳过并提示用户手动验证。
生成的项目结构如下:
<project-name>/
├── backend/
│ ├── Cargo.toml # Workspace 根配置
│ ├── .cargo/config.toml # Cargo 构建优化(sccache、profile)
│ ├── .config/nextest.toml # Nextest 测试运行器配置
│ ├── config.example.toml # 配置模板
│ ├── migrations/ # SQLx 数据库迁移
│ │ └── 00001_init.sql
│ ├── core/ # 领域核心(crate: {{PROJECT_NAME}}-core)
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── config.rs
│ │ ├── domain/
│ │ │ └── health.rs
│ │ └── infrastructure/
│ │ └── redis.rs
│ ├── api/
│ │ ├── Cargo.toml
│ │ └── src/
│ │ ├── lib.rs
│ │ ├── config.rs
│ │ └── application/
│ │ └── http/
│ │ ├── mod.rs
│ │ ├── handlers.rs
│ │ ├── openapi.rs
│ │ ├── routes.rs
│ │ └── state.rs
│ └── app/
│ ├── Cargo.toml
│ └── src/
│ └── main.rs
├── frontend/
│ ├── package.json
│ ├── tsconfig.json
│ ├── vite.config.ts
│ ├── openapi-ts.config.ts
│ ├── index.html
│ └── src/
│ ├── main.tsx
│ ├── styles.css
│ ├── routes/
│ │ ├── __root.tsx
│ │ └── index.tsx
│ ├── components/
│ │ └── ui/
│ │ └── sonner.tsx # 由 npx shadcn add sonner 生成
│ ├── lib/
│ │ └── api-client.ts
│ └── routeTree.d.ts
├── demo/
│ ├── package.json # 依赖 playwright-unified-logger
│ ├── tsconfig.json
│ ├── playwright.config.ts
│ ├── eslint.config.js
│ ├── .gitignore
│ └── e2e/
│ ├── smoke.e2e.ts # 冒烟测试(不依赖后端)
│ ├── demo-basic.e2e.ts # 基础验证测试
│ ├── fixtures/
│ │ ├── demo-auth.fixtures.ts
│ │ └── test-data.ts
│ ├── helpers/
│ │ ├── auth.ts
│ │ └── environment-setup.ts
│ ├── pages/
│ │ ├── base-page.ts
│ │ └── login-page.ts
│ └── selectors.ts
├── scripts/
│ ├── backend-test.py
│ ├── test-start.py
│ ├── test-stop.py
│ ├── demo-test-runner.py
│ ├── demo-run-all.py
│ └── lib/
├── AGENTS.md # Claude Code 行为准则 + 项目描述
├── CLAUDE.md # 引用 AGENTS.md
└── README.md
完成后确认以下文件存在:
后端(必须):
backend/Cargo.tomlbackend/.cargo/config.tomlbackend/.config/nextest.tomlbackend/core/Cargo.toml + src/lib.rs + src/config.rs + src/domain/health.rs + src/infrastructure/redis.rsbackend/api/Cargo.toml + src/lib.rs + src/config.rs + src/application/http/*.rsbackend/app/Cargo.toml + src/main.rsbackend/config.example.tomlbackend/migrations/00001_init.sql前端(必须):
frontend/package.jsonfrontend/tsconfig.jsonfrontend/vite.config.tsfrontend/openapi-ts.config.tsfrontend/index.htmlfrontend/src/main.tsxfrontend/src/styles.cssfrontend/src/routes/__root.tsxfrontend/src/routes/index.tsxfrontend/src/components/ui/sonner.tsx(由 shadcn CLI 生成)frontend/src/lib/api-client.ts脚本和文档:
scripts/backend-test.pyscripts/test-start.pyscripts/test-stop.pyscripts/demo-test-runner.pyscripts/demo-run-all.pyscripts/demo-start.pyscripts/demo-stop.pyscripts/debug-test.pyscripts/cleanup-demo.pyscripts/cleanup-test-logs.pyscripts/demo-failure-summary.pyscripts/lib/*.pyREADME.mdAI 辅助配置(必须):
AGENTS.mdCLAUDE.mdDemo E2E 测试(必须):
demo/package.jsondemo/tsconfig.jsondemo/playwright.config.tsdemo/eslint.config.jsdemo/.gitignoredemo/e2e/smoke.e2e.ts(冒烟测试,不依赖后端)demo/e2e/demo-basic.e2e.tsdemo/e2e/fixtures/demo-auth.fixtures.tsdemo/e2e/fixtures/test-data.tsdemo/e2e/helpers/auth.tsdemo/e2e/helpers/environment-setup.tsdemo/e2e/pages/base-page.tsdemo/e2e/pages/login-page.tsdemo/e2e/selectors.ts完成后在响应中明确说明:
config.toml → server.enable_openapi)npm install playwright-unified-logger 安装scripts/,后续优先执行 uv run scripts/<name>.pycd demo && npx playwright test e2e/smoke.e2e.ts)UNIFIED_LOG_LEVEL 等)/t-prd 开始功能规划)生成前逐项自检:
core/,crate 名为 {{PROJECT_NAME}}-core,Rust 代码用 {{PROJECT_NAME_SNAKE}}_core::.cargo/config.toml 是否已生成(sccache + profile 优化).config/nextest.toml 是否已生成(测试运行器配置)cargo check)playwright-unified-logger(npm 包)/t-init <project-name> 示例npx claudepluginhub timzaak/web-dev-skillsScaffolds boilerplate for APIs (FastAPI, Express), web apps (Next.js, Nuxt, SvelteKit), CLI tools, libraries, monorepos with best-practice stacks and directory structures.
Bootstraps a new Rails project with PostgreSQL, Inertia.js, React, Vite, Tailwind, Sidekiq, and Redis. Use when starting a modern Rails app with SPA frontend.
Scaffolds TanStack Start projects interactively with 30+ integrations like TanStack Query, Clerk auth, Drizzle ORM, Vercel deployment, and MCP server for AI agents.