@itz4blitz/agentful 0.1.11 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/architect.md +30 -527
- package/.claude/agents/orchestrator.md +104 -622
- package/.claude/agents/product-analyzer.md +4 -4
- package/.claude/commands/agentful-agents.md +668 -0
- package/.claude/commands/agentful-analyze.md +564 -0
- package/.claude/commands/agentful-product.md +59 -674
- package/.claude/commands/agentful-skills.md +635 -0
- package/.claude/commands/agentful-start.md +4 -4
- package/.claude/commands/agentful-status.md +2 -2
- package/.claude/commands/agentful.md +222 -13
- package/.claude/settings.json +25 -1
- package/.claude/skills/conversation/SKILL.md +292 -15
- package/README.md +24 -7
- package/bin/cli.js +5 -5
- package/bin/hooks/README.md +120 -0
- package/bin/hooks/analyze-trigger.sh +57 -0
- package/bin/hooks/health-check.sh +36 -0
- package/package.json +10 -5
- package/template/CLAUDE.md +72 -192
- package/version.json +1 -1
|
@@ -49,130 +49,22 @@ When there's no code to analyze, use declarative approach:
|
|
|
49
49
|
- "React frontend with Express backend..."
|
|
50
50
|
|
|
51
51
|
3. **Ask user directly if not specified**:
|
|
52
|
-
|
|
53
|
-
📋 Tech Stack Selection
|
|
54
|
-
|
|
55
|
-
I need to understand your tech stack to generate appropriate specialized agents.
|
|
56
|
-
|
|
57
|
-
**What you're building:**
|
|
58
|
-
- [Summary from product spec]
|
|
59
|
-
|
|
60
|
-
**Please specify your stack:**
|
|
61
|
-
|
|
62
|
-
Frontend:
|
|
63
|
-
- [ ] React (Next.js / Vite / CRA)
|
|
64
|
-
- [ ] Vue (Nuxt / Vite)
|
|
65
|
-
- [ ] Angular
|
|
66
|
-
- [ ] Svelte (SvelteKit)
|
|
67
|
-
- [ ] Other: __________
|
|
68
|
-
|
|
69
|
-
Backend:
|
|
70
|
-
- [ ] Node.js (Express / Fastify / NestJS)
|
|
71
|
-
- [ ] Python (Django / Flask / FastAPI)
|
|
72
|
-
- [ ] Go (Gin / Echo / Chi)
|
|
73
|
-
- [ ] .NET (ASP.NET Core)
|
|
74
|
-
- [ ] Java (Spring Boot)
|
|
75
|
-
- [ ] Ruby (Rails / Sinatra)
|
|
76
|
-
- [ ] Other: __________
|
|
77
|
-
|
|
78
|
-
Database:
|
|
79
|
-
- [ ] PostgreSQL
|
|
80
|
-
- [ ] MySQL
|
|
81
|
-
- [ ] MongoDB
|
|
82
|
-
- [ ] SQLite
|
|
83
|
-
- [ ] Other: __________
|
|
84
|
-
|
|
85
|
-
Additional tools:
|
|
86
|
-
- ORM: __________
|
|
87
|
-
- Testing: __________
|
|
88
|
-
- Styling: __________
|
|
89
|
-
```
|
|
52
|
+
Prompt with checklist: Frontend (React/Next.js, Vue, Angular, etc.), Backend (Node.js, Python, Go, .NET, Java, etc.), Database (PostgreSQL, MySQL, MongoDB, etc.), plus ORM, Testing, Styling preferences.
|
|
90
53
|
|
|
91
54
|
4. **Generate agents from declared stack**:
|
|
55
|
+
Use **framework best practices** since no code exists yet:
|
|
56
|
+
- Next.js → App Router, Server Components, Route Handlers
|
|
57
|
+
- Django → Class-based views, ORM, Django REST Framework
|
|
58
|
+
- Express → Middleware, async/await patterns
|
|
59
|
+
- Spring Boot → Annotations, DI, JPA
|
|
92
60
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
**Key difference from existing projects:**
|
|
96
|
-
- EXISTING: Sample real code → extract actual patterns
|
|
97
|
-
- NEW: Use framework best practices → will be refined later
|
|
98
|
-
|
|
99
|
-
**Agent Generation Guidelines:**
|
|
100
|
-
|
|
101
|
-
a. **Use official framework patterns**:
|
|
102
|
-
- Next.js → App Router, Server Components, Route Handlers
|
|
103
|
-
- Django → Class-based views, ORM, Django REST Framework
|
|
104
|
-
- Express → Middleware, async/await, error handling
|
|
105
|
-
- Spring Boot → Annotations, Dependency Injection, JPA
|
|
106
|
-
|
|
107
|
-
b. **Include canonical examples** (not placeholder code):
|
|
108
|
-
```markdown
|
|
109
|
-
## Example from Next.js documentation
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
// app/api/users/route.ts
|
|
113
|
-
import { NextResponse } from 'next/server';
|
|
114
|
-
|
|
115
|
-
export async function GET() {
|
|
116
|
-
const users = await db.user.findMany();
|
|
117
|
-
return NextResponse.json(users);
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
Use this pattern when creating API routes.
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
c. **Reference official documentation**:
|
|
125
|
-
- "See: https://nextjs.org/docs/app/building-your-application/routing/route-handlers"
|
|
126
|
-
- "Pattern based on Django documentation best practices"
|
|
127
|
-
|
|
128
|
-
d. **Mark as template-based**:
|
|
129
|
-
```markdown
|
|
130
|
-
---
|
|
131
|
-
name: nextjs-specialist
|
|
132
|
-
description: Handles Next.js implementation using best practices (will be updated with project patterns)
|
|
133
|
-
template: true
|
|
134
|
-
confidence: 0.4
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
# Next.js Specialist (Template)
|
|
138
|
-
|
|
139
|
-
⚠️ **This agent was generated from framework best practices.**
|
|
140
|
-
It will be updated with YOUR project's specific patterns after the first feature is implemented.
|
|
141
|
-
|
|
142
|
-
## Best Practice Patterns
|
|
143
|
-
|
|
144
|
-
Based on Next.js 14 documentation and common conventions:
|
|
145
|
-
...
|
|
146
|
-
```
|
|
61
|
+
**Mark agents as template-based** with `template: true` and `confidence: 0.4`. Include canonical examples from official docs, not placeholders. Common combinations: Next.js+Prisma, Django+PostgreSQL, Express+MongoDB, Spring+MySQL.
|
|
147
62
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
**Next.js + Prisma:**
|
|
151
|
-
- `nextjs-specialist.md` - App Router, Server Components, API routes
|
|
152
|
-
- `prisma-specialist.md` - Schema design, migrations, queries
|
|
153
|
-
|
|
154
|
-
**Django + PostgreSQL:**
|
|
155
|
-
- `django-specialist.md` - Views, models, URL routing
|
|
156
|
-
- `postgres-specialist.md` - Schema design, indexing, queries
|
|
157
|
-
|
|
158
|
-
**Express + MongoDB:**
|
|
159
|
-
- `express-specialist.md` - Routes, middleware, async patterns
|
|
160
|
-
- `mongodb-specialist.md` - Collections, queries, aggregations
|
|
161
|
-
|
|
162
|
-
**Spring Boot + MySQL:**
|
|
163
|
-
- `spring-specialist.md` - Controllers, services, repositories
|
|
164
|
-
- `jpa-specialist.md` - Entities, relationships, JPQL
|
|
165
|
-
|
|
166
|
-
f. **Always generate these core agents** (framework-agnostic):
|
|
167
|
-
- Use existing `backend.md` and `frontend.md` as fallbacks
|
|
168
|
-
- Don't duplicate - only create specialized agents when needed
|
|
169
|
-
|
|
170
|
-
5. **Mark for re-analysis**:
|
|
171
|
-
Set flag in architecture.json:
|
|
63
|
+
5. **Mark for re-analysis** in architecture.json:
|
|
172
64
|
```json
|
|
173
65
|
{
|
|
174
66
|
"project_type": "new",
|
|
175
|
-
"declared_stack": { /* user
|
|
67
|
+
"declared_stack": { /* user choices */ },
|
|
176
68
|
"needs_reanalysis_after_first_code": true,
|
|
177
69
|
"confidence": 0.4
|
|
178
70
|
}
|
|
@@ -217,293 +109,9 @@ When there's no code to analyze, use declarative approach:
|
|
|
217
109
|
|
|
218
110
|
For each MAJOR technology/pattern found, create an agent that matches THIS project's conventions.
|
|
219
111
|
|
|
220
|
-
**
|
|
221
|
-
|
|
222
|
-
#### Python/Django Project
|
|
223
|
-
```markdown
|
|
224
|
-
---
|
|
225
|
-
name: django-specialist
|
|
226
|
-
description: Handles Django-specific implementation following THIS PROJECT'S conventions
|
|
227
|
-
model: sonnet
|
|
228
|
-
tools: Read, Write, Edit, Glob, Grep, Bash
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
# Django Specialist
|
|
232
|
-
|
|
233
|
-
## Project-Specific Patterns
|
|
234
|
-
|
|
235
|
-
From analyzing this project:
|
|
236
|
-
|
|
237
|
-
**File Structure:**
|
|
238
|
-
```
|
|
239
|
-
myapp/
|
|
240
|
-
├── models/ # Models in models.py
|
|
241
|
-
├── views/ # Views organized by feature
|
|
242
|
-
├── serializers/ # DRF serializers
|
|
243
|
-
└── urls/ # URL configuration
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
**View Pattern:**
|
|
247
|
-
- Use class-based views (not function views)
|
|
248
|
-
- Always use QuerySet.filter() not raw SQL
|
|
249
|
-
- Decorate with @login_required for protected views
|
|
250
|
-
|
|
251
|
-
**Model Pattern:**
|
|
252
|
-
- Use Django ORM, not raw queries
|
|
253
|
-
- All models inherit from models.Model
|
|
254
|
-
- Use __str__ method for display
|
|
255
|
-
|
|
256
|
-
## Real Examples from This Project
|
|
257
|
-
|
|
258
|
-
```python
|
|
259
|
-
# Actual pattern found in src/users/views.py
|
|
260
|
-
class UserDetailView(LoginRequiredMixin, DetailView):
|
|
261
|
-
model = User
|
|
262
|
-
template_name = 'users/detail.html'
|
|
263
|
-
context_object_name = 'user'
|
|
264
|
-
slug_field = 'username'
|
|
265
|
-
slug_url_kwarg = 'username'
|
|
266
|
-
|
|
267
|
-
def get_queryset(self):
|
|
268
|
-
return User.objects.filter(
|
|
269
|
-
is_active=True,
|
|
270
|
-
profile__is_private=False
|
|
271
|
-
).select_related('profile')
|
|
272
|
-
|
|
273
|
-
def get_context_data(self, **kwargs):
|
|
274
|
-
context = super().get_context_data(**kwargs)
|
|
275
|
-
context['posts'] = self.object.posts.filter(
|
|
276
|
-
published=True
|
|
277
|
-
).prefetch_related('tags')[:10]
|
|
278
|
-
return context
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
```python
|
|
282
|
-
# Actual pattern found in src/users/models.py
|
|
283
|
-
class User(models.Model):
|
|
284
|
-
email = models.EmailField(unique=True)
|
|
285
|
-
username = models.CharField(max_length=30, unique=True)
|
|
286
|
-
created_at = models.DateTimeField(auto_now_add=True)
|
|
287
|
-
|
|
288
|
-
class Meta:
|
|
289
|
-
indexes = [
|
|
290
|
-
models.Index(fields=['email']),
|
|
291
|
-
models.Index(fields=['username']),
|
|
292
|
-
]
|
|
293
|
-
|
|
294
|
-
def __str__(self):
|
|
295
|
-
return self.username
|
|
296
|
-
```
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
#### C#/.NET Project
|
|
300
|
-
```markdown
|
|
301
|
-
---
|
|
302
|
-
name: dotnet-specialist
|
|
303
|
-
description: Handles .NET/C# implementation following THIS PROJECT'S conventions
|
|
304
|
-
model: sonnet
|
|
305
|
-
tools: Read, Write, Edit, Glob, Grep, Bash
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
# .NET Specialist
|
|
309
|
-
|
|
310
|
-
## Project-Specific Patterns
|
|
311
|
-
|
|
312
|
-
From analyzing this project:
|
|
313
|
-
|
|
314
|
-
**Architecture:**
|
|
315
|
-
- Controllers in Controllers/ folder
|
|
316
|
-
- Services in Services/ folder
|
|
317
|
-
- Repositories in Data/Repositories
|
|
318
|
-
- ViewModels for DTOs
|
|
319
|
-
|
|
320
|
-
**Patterns:**
|
|
321
|
-
- Async/Await for all I/O
|
|
322
|
-
- Dependency injection via constructor
|
|
323
|
-
- LINQ for queries, not raw SQL
|
|
324
|
-
|
|
325
|
-
## Real Examples from This Project
|
|
326
|
-
|
|
327
|
-
```csharp
|
|
328
|
-
// Actual pattern found in Controllers/UsersController.cs
|
|
329
|
-
[ApiController]
|
|
330
|
-
[Route("api/[controller]")]
|
|
331
|
-
public class UsersController : ControllerBase
|
|
332
|
-
{
|
|
333
|
-
private readonly IUserService _userService;
|
|
334
|
-
private readonly ILogger<UsersController> _logger;
|
|
335
|
-
|
|
336
|
-
public UsersController(IUserService userService, ILogger<UsersController> logger)
|
|
337
|
-
{
|
|
338
|
-
_userService = userService;
|
|
339
|
-
_logger = logger;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
[HttpGet("{id}")]
|
|
343
|
-
[ProducesResponseType(typeof(UserViewModel), StatusCodes.Status200OK)]
|
|
344
|
-
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
345
|
-
public async Task<ActionResult<UserViewModel>> GetUser(Guid id)
|
|
346
|
-
{
|
|
347
|
-
try
|
|
348
|
-
{
|
|
349
|
-
var user = await _userService.GetUserByIdAsync(id);
|
|
350
|
-
if (user == null)
|
|
351
|
-
{
|
|
352
|
-
return NotFound();
|
|
353
|
-
}
|
|
354
|
-
return Ok(user);
|
|
355
|
-
}
|
|
356
|
-
catch (Exception ex)
|
|
357
|
-
{
|
|
358
|
-
_logger.LogError(ex, "Error getting user {UserId}", id);
|
|
359
|
-
return StatusCode(500, new { error = "Internal server error" });
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
```
|
|
364
|
-
|
|
365
|
-
```csharp
|
|
366
|
-
// Actual pattern found in Data/Repositories/UserRepository.cs
|
|
367
|
-
public class UserRepository : IUserRepository
|
|
368
|
-
{
|
|
369
|
-
private readonly AppDbContext _context;
|
|
112
|
+
**Example Agent (TypeScript/Next.js):**
|
|
370
113
|
|
|
371
|
-
|
|
372
|
-
{
|
|
373
|
-
_context = context;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
public async Task<User?> GetByIdAsync(Guid id, CancellationToken ct = default)
|
|
377
|
-
{
|
|
378
|
-
return await _context.Users
|
|
379
|
-
.AsNoTracking()
|
|
380
|
-
.Include(u => u.Profile)
|
|
381
|
-
.FirstOrDefaultAsync(u => u.Id == id, ct);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
public async Task<IEnumerable<User>> GetActiveUsersAsync(CancellationToken ct = default)
|
|
385
|
-
{
|
|
386
|
-
return await _context.Users
|
|
387
|
-
.AsNoTracking()
|
|
388
|
-
.Where(u => u.IsActive && u.EmailConfirmed)
|
|
389
|
-
.OrderBy(u => u.CreatedAt)
|
|
390
|
-
.ToListAsync(ct);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
```
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
#### Go Project
|
|
397
|
-
```markdown
|
|
398
|
-
---
|
|
399
|
-
name: go-specialist
|
|
400
|
-
description: Handles Go implementation following THIS PROJECT'S conventions
|
|
401
|
-
model: sonnet
|
|
402
|
-
tools: Read, Write, Edit, Glob, Grep, Bash
|
|
403
|
-
---
|
|
404
|
-
|
|
405
|
-
# Go Specialist
|
|
406
|
-
|
|
407
|
-
## Project-Specific Patterns
|
|
408
|
-
|
|
409
|
-
From analyzing this project:
|
|
410
|
-
|
|
411
|
-
**Project Structure:**
|
|
412
|
-
```
|
|
413
|
-
cmd/
|
|
414
|
-
├── api/ # Main application
|
|
415
|
-
├── worker/ # Background jobs
|
|
416
|
-
internal/
|
|
417
|
-
├── handlers/ # HTTP handlers
|
|
418
|
-
├── models/ # Data structures
|
|
419
|
-
├── services/ # Business logic
|
|
420
|
-
pkg/ # Public packages
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
**Patterns:**
|
|
424
|
-
- Use context.Context for all operations
|
|
425
|
-
- Error handling: always return errors, never panic
|
|
426
|
-
- Use interfaces for dependency injection
|
|
427
|
-
- Named returns for clarity
|
|
428
|
-
|
|
429
|
-
## Real Examples from This Project
|
|
430
|
-
|
|
431
|
-
```go
|
|
432
|
-
// Actual pattern found in internal/handlers/user.go
|
|
433
|
-
package handlers
|
|
434
|
-
|
|
435
|
-
import (
|
|
436
|
-
"context"
|
|
437
|
-
"net/http"
|
|
438
|
-
"github.com/gin-gonic/gin"
|
|
439
|
-
)
|
|
440
|
-
|
|
441
|
-
type UserHandler struct {
|
|
442
|
-
userService UserService
|
|
443
|
-
logger *zap.Logger
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
func NewUserHandler(us UserService, l *zap.Logger) *UserHandler {
|
|
447
|
-
return &UserHandler{
|
|
448
|
-
userService: us,
|
|
449
|
-
logger: l,
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
func (h *UserHandler) GetUser(c *gin.Context) {
|
|
454
|
-
ctx := c.Request.Context()
|
|
455
|
-
id := c.Param("id")
|
|
456
|
-
|
|
457
|
-
user, err := h.userService.GetUserByID(ctx, id)
|
|
458
|
-
if err != nil {
|
|
459
|
-
if errors.Is(err, ErrUserNotFound) {
|
|
460
|
-
c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})
|
|
461
|
-
return
|
|
462
|
-
}
|
|
463
|
-
h.logger.Error("failed to get user", zap.Error(err))
|
|
464
|
-
c.JSON(http.StatusInternalServerError, gin.H{"error": "internal error"})
|
|
465
|
-
return
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
c.JSON(http.StatusOK, user)
|
|
469
|
-
}
|
|
470
|
-
```
|
|
471
|
-
|
|
472
|
-
```go
|
|
473
|
-
// Actual pattern found in internal/services/user.go
|
|
474
|
-
type UserService struct {
|
|
475
|
-
repo UserRepository
|
|
476
|
-
cache CacheService
|
|
477
|
-
logger *zap.Logger
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
func (s *UserService) GetUserByID(ctx context.Context, id string) (*User, error) {
|
|
481
|
-
// Try cache first
|
|
482
|
-
if user, err := s.cache.Get(ctx, "user:"+id); err == nil {
|
|
483
|
-
return user, nil
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
// Fall back to database
|
|
487
|
-
user, err := s.repo.FindByID(ctx, id)
|
|
488
|
-
if err != nil {
|
|
489
|
-
if errors.Is(err, sql.ErrNoRows) {
|
|
490
|
-
return nil, ErrUserNotFound
|
|
491
|
-
}
|
|
492
|
-
return nil, fmt.Errorf("failed to find user: %w", err)
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
// Populate cache
|
|
496
|
-
if err := s.cache.Set(ctx, "user:"+id, user, 5*time.Minute); err != nil {
|
|
497
|
-
s.logger.Warn("failed to cache user", zap.Error(err))
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
return user, nil
|
|
501
|
-
}
|
|
502
|
-
```
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
#### Node.js/Express Project
|
|
506
|
-
Create `.claude/agents/auto-generated/express-specialist.md`:
|
|
114
|
+
For other stacks (Python/Django, Go/Gin, C#/.NET, etc.), follow the same pattern but adapt to the framework's conventions. See generated agents in `.claude/agents/auto-generated/` for examples.
|
|
507
115
|
|
|
508
116
|
```markdown
|
|
509
117
|
---
|
|
@@ -864,130 +472,25 @@ Task("tailwind-specialist", "Style the form following project conventions")
|
|
|
864
472
|
|
|
865
473
|
## Language Detection Guide
|
|
866
474
|
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
- **C#/.NET**: `.csproj`, `.vbproj`, `.sln`, `.cs`/`.vb` files, `using` statements
|
|
887
|
-
- **ASP.NET Core**: `Microsoft.AspNetCore.*`, `Program.cs` with `WebApplication.CreateBuilder()`
|
|
888
|
-
- **Entity Framework**: `Microsoft.EntityFrameworkCore.*`
|
|
889
|
-
- **Nancy**: `Nancy` in dependencies
|
|
890
|
-
- **Go**: `go.mod`, `go.sum`, `.go` files, `package` declarations, `func main()`
|
|
891
|
-
- **Gin**: `gin-gonic/gin` in dependencies, `router := gin.Default()`
|
|
892
|
-
- **Echo**: `labstack/echo` in dependencies, `e := echo.New()`
|
|
893
|
-
- **Fiber**: `gofiber/fiber` in dependencies
|
|
894
|
-
- **net/http**: Standard library only
|
|
895
|
-
- **Java**: `pom.xml`, `build.gradle`, `gradle.properties`, `.java` files, `public class`
|
|
896
|
-
- **Spring Boot**: `spring-boot-starter-*` in dependencies, `@SpringBootApplication`
|
|
897
|
-
- **Micronaut**: `io.micronaut.*` in dependencies
|
|
898
|
-
- **Quarkus**: `io.quarkus:*` in dependencies
|
|
899
|
-
- **Jakarta EE**: `jakarta.*` imports
|
|
900
|
-
- **Vert.x**: `io.vertx:*` in dependencies
|
|
901
|
-
- **Ruby**: `Gemfile`, `*.gemspec`, `.rb` files, `require`, `class`
|
|
902
|
-
- **Rails**: `rails` in Gemfile, `app/controllers/`, `app/models/`
|
|
903
|
-
- **Sinatra**: `sinatra` in Gemfile
|
|
904
|
-
- **Grape**: `grape` in Gemfile
|
|
905
|
-
- **PHP**: `composer.json`, `.php` files, `use` statements, `namespace`
|
|
906
|
-
- **Laravel**: `laravel/framework` in composer.json, `routes/`, `app/Http/Controllers/`
|
|
907
|
-
- **Symfony**: `symfony/*` in composer.json
|
|
908
|
-
- **Slim**: `slim/slim` in composer.json
|
|
909
|
-
- **Node.js**: `package.json`, `.js`/`.ts` files
|
|
910
|
-
- **Express**: `express` in dependencies, `app = express()`
|
|
911
|
-
- **Koa**: `koa` in dependencies
|
|
912
|
-
- **NestJS**: `@nestjs/*` in dependencies, `@Controller()` decorators
|
|
913
|
-
- **Hapi**: `@hapi/hapi` in dependencies
|
|
914
|
-
- **Fastify**: `fastify` in dependencies
|
|
915
|
-
|
|
916
|
-
### Systems & Compiled Languages
|
|
917
|
-
- **Rust**: `Cargo.toml`, `Cargo.lock`, `.rs` files, `fn main()`, `use` statements
|
|
918
|
-
- **Actix Web**: `actix-web` in dependencies
|
|
919
|
-
- **Rocket**: `rocket` in dependencies, `#[get("/")]`
|
|
920
|
-
- **Warp**: `warp` in dependencies
|
|
921
|
-
- **C/C++**: `Makefile`, `CMakeLists.txt`, `.c`/`.cpp`/`.h`/`.hpp` files
|
|
922
|
-
- **libcurl**: HTTP client
|
|
923
|
-
- **libmicrohttpd**: Embedded HTTP server
|
|
924
|
-
- **Pistache**: C++ REST framework
|
|
925
|
-
- **Elixir/Erlang**: `mix.exs`, `.ex`/`.exs` files
|
|
926
|
-
- **Phoenix**: `phoenix` in mix.exs, `lib/*_web/`, `endpoint.ex`
|
|
927
|
-
- **Plug**: `plug` in dependencies
|
|
928
|
-
- **Sugar**: `sugar` in dependencies
|
|
929
|
-
- **Dart/Flutter**: `pubspec.yaml`, `.dart` files
|
|
930
|
-
- **Flutter**: `flutter` in dependencies, `lib/main.dart`
|
|
931
|
-
- **Angel**: `angel` in dependencies
|
|
932
|
-
- **Shelf**: `shelf` in dependencies
|
|
933
|
-
- **Scala**: `build.sbt`, `pom.xml`, `.scala` files
|
|
934
|
-
- **Play Framework**: `com.typesafe.play` in dependencies
|
|
935
|
-
- **http4s**: `org.http4s` in dependencies
|
|
936
|
-
- **Akka HTTP**: `com.typesafe.akka` in dependencies
|
|
937
|
-
- **Clojure**: `project.clj`, `build.boot`, `deps.edn`, `.clj`/`.cljs` files
|
|
938
|
-
- **Ring**: `ring` in dependencies
|
|
939
|
-
- **Reitit**: `reitit` in dependencies
|
|
940
|
-
- **Pedestal**: `io.pedestal` in dependencies
|
|
941
|
-
|
|
942
|
-
### Mobile & Cross-Platform
|
|
943
|
-
- **Swift (iOS)**: `Package.swift`, `.swift` files, `import UIKit`
|
|
944
|
-
- **Vapor**: `vapor` in Package.swift
|
|
945
|
-
- **Kotlin (Android)**: `build.gradle.kts`, `.kt` files
|
|
946
|
-
- **Ktor**: `io.ktor:*` in dependencies
|
|
947
|
-
- **Spring Boot**: Also used on Android
|
|
948
|
-
- **Flutter (iOS/Android)**: `pubspec.yaml`, `lib/main.dart`
|
|
949
|
-
- **React Native**: `package.json`, `react-native` in dependencies
|
|
950
|
-
- **Ionic**: `package.json`, `@ionic/*` in dependencies
|
|
951
|
-
- **Xamarin**: `.csproj`, `Xamarin.*` in dependencies
|
|
952
|
-
|
|
953
|
-
### Database & Data
|
|
954
|
-
- **SQL**: Direct database queries
|
|
955
|
-
- **PostgreSQL**: `postgresql`, `pg` in dependencies
|
|
956
|
-
- **MySQL**: `mysql`, `mysql2` in dependencies
|
|
957
|
-
- **SQLite**: `sqlite3`, `better-sqlite3` in dependencies
|
|
958
|
-
- **MSSQL**: `mssql`, `tedious` in dependencies
|
|
959
|
-
- **ORM/Query Builders**:
|
|
960
|
-
- **Prisma**: `@prisma/client`, `schema.prisma`
|
|
961
|
-
- **TypeORM**: `typeorm` in dependencies
|
|
962
|
-
- **Sequelize**: `sequelize` in dependencies
|
|
963
|
-
- **SQLAlchemy**: `sqlalchemy` in Python requirements
|
|
964
|
-
- **Hibernate**: `hibernate-*` in Java dependencies
|
|
965
|
-
- **Entity Framework**: `Microsoft.EntityFrameworkCore` in .NET
|
|
966
|
-
- **Ecto**: `ecto` in Elixir mix.exs
|
|
967
|
-
- **Diesel**: `diesel` in Rust Cargo.toml
|
|
968
|
-
|
|
969
|
-
### Testing & Quality
|
|
970
|
-
- **JavaScript/TypeScript**: `jest.config.js`, `vitest.config.js`, `karma.conf.js`, `.spec.ts`
|
|
971
|
-
- **Python**: `pytest.ini`, `unittest`, `test_*.py`
|
|
972
|
-
- **Java**: JUnit (`@Test`), TestNG, Mockito
|
|
973
|
-
- **.NET**: xUnit, NUnit, MSTest
|
|
974
|
-
- **Go**: `_test.go` files, `testing` package
|
|
975
|
-
- **Ruby**: `spec/`, `test/`, RSpec, Minitest
|
|
976
|
-
- **PHP**: PHPUnit, `phpunit.xml`
|
|
977
|
-
|
|
978
|
-
### DevOps & Infrastructure
|
|
979
|
-
- **Docker**: `Dockerfile`, `docker-compose.yml`, `.dockerignore`
|
|
980
|
-
- **Kubernetes**: `deployment.yaml`, `service.yaml`, `k8s/`
|
|
981
|
-
- **Terraform**: `*.tf` files, `main.tf`
|
|
982
|
-
- **Ansible**: `playbook.yml`, `ansible.cfg`
|
|
983
|
-
- **CI/CD**:
|
|
984
|
-
- GitHub Actions: `.github/workflows/*.yml`
|
|
985
|
-
- GitLab CI: `.gitlab-ci.yml`
|
|
986
|
-
- Travis CI: `.travis.yml`
|
|
987
|
-
- CircleCI: `.circleci/config.yml`
|
|
988
|
-
- Jenkins: `Jenkinsfile`
|
|
989
|
-
|
|
990
|
-
### And ANY other language or framework - Claude understands them all!
|
|
475
|
+
Detect tech stack by looking for these key indicators:
|
|
476
|
+
|
|
477
|
+
| Language/Stack | Key Files | Framework Indicators |
|
|
478
|
+
|---------------|-----------|---------------------|
|
|
479
|
+
| **TypeScript/JS** | `package.json`, `.ts`/`.tsx`/`.js`/`.jsx` | React (`react`), Next.js (`next`), Vue (`vue`), Angular (`@angular/*`), Express (`express`), NestJS (`@nestjs/*`) |
|
|
480
|
+
| **Python** | `requirements.txt`, `pyproject.toml`, `.py` | Django (`django`, `settings.py`), Flask (`flask`, `@app.route`), FastAPI (`fastapi`) |
|
|
481
|
+
| **Go** | `go.mod`, `go.sum`, `.go` | Gin (`gin-gonic/gin`), Echo (`labstack/echo`), Fiber (`gofiber/fiber`) |
|
|
482
|
+
| **C#/.NET** | `.csproj`, `.sln`, `.cs` | ASP.NET Core (`Microsoft.AspNetCore.*`), Entity Framework (`Microsoft.EntityFrameworkCore.*`) |
|
|
483
|
+
| **Java** | `pom.xml`, `build.gradle`, `.java` | Spring Boot (`spring-boot-starter-*`, `@SpringBootApplication`), Micronaut, Quarkus |
|
|
484
|
+
| **Ruby** | `Gemfile`, `.rb` | Rails (`rails`, `app/controllers/`), Sinatra (`sinatra`) |
|
|
485
|
+
| **PHP** | `composer.json`, `.php` | Laravel (`laravel/framework`, `routes/`), Symfony (`symfony/*`) |
|
|
486
|
+
| **Rust** | `Cargo.toml`, `.rs` | Actix Web (`actix-web`), Rocket (`rocket`) |
|
|
487
|
+
| **Elixir** | `mix.exs`, `.ex` | Phoenix (`phoenix`, `lib/*_web/`) |
|
|
488
|
+
|
|
489
|
+
**Database/ORM**: Check dependencies for Prisma (`@prisma/client`), TypeORM, Sequelize, SQLAlchemy, Hibernate, Entity Framework, Ecto, Diesel.
|
|
490
|
+
|
|
491
|
+
**Testing**: Look for Jest, Vitest, Pytest, JUnit, xUnit, RSpec in configs and dependencies.
|
|
492
|
+
|
|
493
|
+
Claude understands all major languages and frameworks - adapt to whatever the project uses!
|
|
991
494
|
|
|
992
495
|
## Example Flow
|
|
993
496
|
|