vibecheck-score 0.1.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.
Files changed (87) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +217 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/output/confirm.d.ts +3 -0
  6. package/dist/output/confirm.d.ts.map +1 -0
  7. package/dist/output/confirm.js +37 -0
  8. package/dist/output/confirm.js.map +1 -0
  9. package/dist/output/narrative.d.ts +3 -0
  10. package/dist/output/narrative.d.ts.map +1 -0
  11. package/dist/output/narrative.js +94 -0
  12. package/dist/output/narrative.js.map +1 -0
  13. package/dist/output/terminal.d.ts +4 -0
  14. package/dist/output/terminal.d.ts.map +1 -0
  15. package/dist/output/terminal.js +95 -0
  16. package/dist/output/terminal.js.map +1 -0
  17. package/dist/scanners/agents.d.ts +7 -0
  18. package/dist/scanners/agents.d.ts.map +1 -0
  19. package/dist/scanners/agents.js +95 -0
  20. package/dist/scanners/agents.js.map +1 -0
  21. package/dist/scanners/deploy.d.ts +7 -0
  22. package/dist/scanners/deploy.d.ts.map +1 -0
  23. package/dist/scanners/deploy.js +139 -0
  24. package/dist/scanners/deploy.js.map +1 -0
  25. package/dist/scanners/environment.d.ts +7 -0
  26. package/dist/scanners/environment.d.ts.map +1 -0
  27. package/dist/scanners/environment.js +110 -0
  28. package/dist/scanners/environment.js.map +1 -0
  29. package/dist/scanners/index.d.ts +7 -0
  30. package/dist/scanners/index.d.ts.map +1 -0
  31. package/dist/scanners/index.js +23 -0
  32. package/dist/scanners/index.js.map +1 -0
  33. package/dist/scanners/mcp.d.ts +7 -0
  34. package/dist/scanners/mcp.d.ts.map +1 -0
  35. package/dist/scanners/mcp.js +138 -0
  36. package/dist/scanners/mcp.js.map +1 -0
  37. package/dist/scanners/memory.d.ts +7 -0
  38. package/dist/scanners/memory.d.ts.map +1 -0
  39. package/dist/scanners/memory.js +131 -0
  40. package/dist/scanners/memory.js.map +1 -0
  41. package/dist/scanners/orchestration.d.ts +7 -0
  42. package/dist/scanners/orchestration.d.ts.map +1 -0
  43. package/dist/scanners/orchestration.js +99 -0
  44. package/dist/scanners/orchestration.js.map +1 -0
  45. package/dist/scanners/repositories.d.ts +7 -0
  46. package/dist/scanners/repositories.d.ts.map +1 -0
  47. package/dist/scanners/repositories.js +301 -0
  48. package/dist/scanners/repositories.js.map +1 -0
  49. package/dist/scanners/security.d.ts +7 -0
  50. package/dist/scanners/security.d.ts.map +1 -0
  51. package/dist/scanners/security.js +113 -0
  52. package/dist/scanners/security.js.map +1 -0
  53. package/dist/scanners/social.d.ts +7 -0
  54. package/dist/scanners/social.d.ts.map +1 -0
  55. package/dist/scanners/social.js +68 -0
  56. package/dist/scanners/social.js.map +1 -0
  57. package/dist/scanners/universal-file.d.ts +10 -0
  58. package/dist/scanners/universal-file.d.ts.map +1 -0
  59. package/dist/scanners/universal-file.js +526 -0
  60. package/dist/scanners/universal-file.js.map +1 -0
  61. package/dist/scanners/utils.d.ts +6 -0
  62. package/dist/scanners/utils.d.ts.map +1 -0
  63. package/dist/scanners/utils.js +51 -0
  64. package/dist/scanners/utils.js.map +1 -0
  65. package/dist/scanners/workspace.d.ts +3 -0
  66. package/dist/scanners/workspace.d.ts.map +1 -0
  67. package/dist/scanners/workspace.js +59 -0
  68. package/dist/scanners/workspace.js.map +1 -0
  69. package/dist/scoring/engine.d.ts +11 -0
  70. package/dist/scoring/engine.d.ts.map +1 -0
  71. package/dist/scoring/engine.js +85 -0
  72. package/dist/scoring/engine.js.map +1 -0
  73. package/dist/scoring/tiers.d.ts +11 -0
  74. package/dist/scoring/tiers.d.ts.map +1 -0
  75. package/dist/scoring/tiers.js +20 -0
  76. package/dist/scoring/tiers.js.map +1 -0
  77. package/dist/taxonomy/classifier.d.ts +9 -0
  78. package/dist/taxonomy/classifier.d.ts.map +1 -0
  79. package/dist/taxonomy/classifier.js +44 -0
  80. package/dist/taxonomy/classifier.js.map +1 -0
  81. package/dist/taxonomy/registry.json +189 -0
  82. package/dist/types.d.ts +109 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +58 -0
  85. package/dist/types.js.map +1 -0
  86. package/package.json +44 -0
  87. package/src/taxonomy/registry.json +189 -0
@@ -0,0 +1,109 @@
1
+ export declare const TAXONOMY_CATEGORIES: readonly ["intelligence", "tooling", "continuity", "autonomy", "ship", "security", "ops", "social"];
2
+ export type TaxonomyCategory = (typeof TAXONOMY_CATEGORIES)[number];
3
+ export declare const CATEGORY_LABELS: Record<TaxonomyCategory, string>;
4
+ export declare const CATEGORY_EMOJI: Record<TaxonomyCategory, string>;
5
+ export declare const CATEGORY_WEIGHTS: Record<TaxonomyCategory, number>;
6
+ export type DetectionTier = "basic" | "intermediate" | "advanced" | "elite";
7
+ export declare const TIER_POINTS: Record<DetectionTier, number>;
8
+ export interface Detection {
9
+ id: string;
10
+ category: TaxonomyCategory;
11
+ name: string;
12
+ source: string;
13
+ confidence: "high" | "medium" | "low";
14
+ tier: DetectionTier;
15
+ taxonomyMatch: string | null;
16
+ details?: Record<string, unknown>;
17
+ points?: number;
18
+ scanScope?: "project" | "workspace" | "global";
19
+ }
20
+ export interface ScanResult {
21
+ scanner: string;
22
+ detections: Detection[];
23
+ duration: number;
24
+ }
25
+ export interface CategoryScore {
26
+ category: TaxonomyCategory;
27
+ score: number;
28
+ detectionCount: number;
29
+ topTier: DetectionTier;
30
+ }
31
+ export declare const TIER_TITLES: readonly [{
32
+ readonly min: 0;
33
+ readonly max: 10;
34
+ readonly title: "Observer";
35
+ readonly tagline: "A tourist in the land of code";
36
+ }, {
37
+ readonly min: 11;
38
+ readonly max: 20;
39
+ readonly title: "Apprentice";
40
+ readonly tagline: "The AI is just a very chatty GPS";
41
+ }, {
42
+ readonly min: 21;
43
+ readonly max: 30;
44
+ readonly title: "Practitioner";
45
+ readonly tagline: "You crossed into YOLO mode";
46
+ }, {
47
+ readonly min: 31;
48
+ readonly max: 45;
49
+ readonly title: "Builder";
50
+ readonly tagline: "The AI becomes a partner";
51
+ }, {
52
+ readonly min: 46;
53
+ readonly max: 55;
54
+ readonly title: "Operator";
55
+ readonly tagline: "You stop typing syntax. You become a manager";
56
+ }, {
57
+ readonly min: 56;
58
+ readonly max: 65;
59
+ readonly title: "Commander";
60
+ readonly tagline: "Managing a parallel workforce";
61
+ }, {
62
+ readonly min: 66;
63
+ readonly max: 75;
64
+ readonly title: "Architect";
65
+ readonly tagline: "You aren't coding anymore";
66
+ }, {
67
+ readonly min: 76;
68
+ readonly max: 85;
69
+ readonly title: "Orchestrator";
70
+ readonly tagline: "Orchestrating a system of digital workers";
71
+ }, {
72
+ readonly min: 86;
73
+ readonly max: 100;
74
+ readonly title: "Industrialist";
75
+ readonly tagline: "A self-sustaining software factory";
76
+ }];
77
+ export type TierTitle = (typeof TIER_TITLES)[number]["title"];
78
+ export interface TypeCode {
79
+ code: string;
80
+ intelligence: "M" | "V";
81
+ autonomy: "A" | "G";
82
+ ship: "R" | "C";
83
+ depth: "D" | "L";
84
+ }
85
+ export interface PioneerStatus {
86
+ isPioneer: boolean;
87
+ highConfidenceCount: number;
88
+ mediumConfidenceCount: number;
89
+ innovations: Detection[];
90
+ }
91
+ export interface ScoreResult {
92
+ level: number;
93
+ categories: CategoryScore[];
94
+ tier: {
95
+ title: TierTitle;
96
+ tagline: string;
97
+ };
98
+ typeCode: TypeCode;
99
+ pioneer: PioneerStatus;
100
+ }
101
+ export interface ProbeResult {
102
+ version: string;
103
+ timestamp: string;
104
+ platform: string;
105
+ scanResults: ScanResult[];
106
+ detections: Detection[];
107
+ score: ScoreResult;
108
+ }
109
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,qGAStB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAS5D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAS3D,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAS7D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5E,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKrD,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;CAChD;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAE9D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,GAAG,GAAG,GAAG,CAAC;IACxB,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAChB,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,SAAS,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,IAAI,EAAE;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,EAAE,WAAW,CAAC;CACpB"}
package/dist/types.js ADDED
@@ -0,0 +1,58 @@
1
+ export const TAXONOMY_CATEGORIES = [
2
+ "intelligence",
3
+ "tooling",
4
+ "continuity",
5
+ "autonomy",
6
+ "ship",
7
+ "security",
8
+ "ops",
9
+ "social",
10
+ ];
11
+ export const CATEGORY_LABELS = {
12
+ intelligence: "Intelligence",
13
+ tooling: "Tooling",
14
+ continuity: "Continuity",
15
+ autonomy: "Autonomy",
16
+ ship: "Ship",
17
+ security: "Security",
18
+ ops: "Ops",
19
+ social: "Social",
20
+ };
21
+ export const CATEGORY_EMOJI = {
22
+ intelligence: "🧠",
23
+ tooling: "🔧",
24
+ continuity: "🔄",
25
+ autonomy: "🤖",
26
+ ship: "🚀",
27
+ security: "🛡️",
28
+ ops: "📊",
29
+ social: "🌐",
30
+ };
31
+ export const CATEGORY_WEIGHTS = {
32
+ intelligence: 0.15,
33
+ tooling: 0.15,
34
+ continuity: 0.13,
35
+ autonomy: 0.15,
36
+ ship: 0.15,
37
+ security: 0.12,
38
+ ops: 0.10,
39
+ social: 0.05,
40
+ };
41
+ export const TIER_POINTS = {
42
+ basic: 5,
43
+ intermediate: 15,
44
+ advanced: 25,
45
+ elite: 35,
46
+ };
47
+ export const TIER_TITLES = [
48
+ { min: 0, max: 10, title: "Observer", tagline: "A tourist in the land of code" },
49
+ { min: 11, max: 20, title: "Apprentice", tagline: "The AI is just a very chatty GPS" },
50
+ { min: 21, max: 30, title: "Practitioner", tagline: "You crossed into YOLO mode" },
51
+ { min: 31, max: 45, title: "Builder", tagline: "The AI becomes a partner" },
52
+ { min: 46, max: 55, title: "Operator", tagline: "You stop typing syntax. You become a manager" },
53
+ { min: 56, max: 65, title: "Commander", tagline: "Managing a parallel workforce" },
54
+ { min: 66, max: 75, title: "Architect", tagline: "You aren't coding anymore" },
55
+ { min: 76, max: 85, title: "Orchestrator", tagline: "Orchestrating a system of digital workers" },
56
+ { min: 86, max: 100, title: "Industrialist", tagline: "A self-sustaining software factory" },
57
+ ];
58
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,cAAc;IACd,SAAS;IACT,YAAY;IACZ,UAAU;IACV,MAAM;IACN,UAAU;IACV,KAAK;IACL,QAAQ;CACA,CAAC;AAIX,MAAM,CAAC,MAAM,eAAe,GAAqC;IAC/D,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,KAAK;IACf,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAqC;IAChE,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;CACb,CAAC;AAIF,MAAM,CAAC,MAAM,WAAW,GAAkC;IACxD,KAAK,EAAE,CAAC;IACR,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,KAAK,EAAE,EAAE;CACV,CAAC;AA4BF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,+BAA+B,EAAE;IAChF,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,kCAAkC,EAAE;IACtF,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,4BAA4B,EAAE;IAClF,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,0BAA0B,EAAE;IAC3E,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,8CAA8C,EAAE;IAChG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,+BAA+B,EAAE;IAClF,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,2BAA2B,EAAE;IAC9E,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,2CAA2C,EAAE;IACjG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,oCAAoC,EAAE;CACpF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "vibecheck-score",
3
+ "version": "0.1.0",
4
+ "description": "Deep scan your AI coding setup — models, agents, MCP servers, memory, security, deploy pipeline",
5
+ "type": "module",
6
+ "bin": {
7
+ "vibecheck": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "src/taxonomy/registry.json"
12
+ ],
13
+ "engines": {
14
+ "node": ">=18.3.0"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc && cp src/taxonomy/registry.json dist/taxonomy/registry.json",
18
+ "dev": "tsc --watch",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/garygurevich/vibecheck.git"
24
+ },
25
+ "homepage": "https://vibecheck.dev",
26
+ "keywords": [
27
+ "vibe-coding",
28
+ "ai-coding",
29
+ "developer-tools",
30
+ "assessment",
31
+ "claude-code",
32
+ "mcp"
33
+ ],
34
+ "author": "Gary Gurevich",
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "chalk": "^5.4.1",
38
+ "ora": "^8.1.1"
39
+ },
40
+ "devDependencies": {
41
+ "typescript": "^5.7.3",
42
+ "@types/node": "^22.10.0"
43
+ }
44
+ }
@@ -0,0 +1,189 @@
1
+ [
2
+ { "id": "anthropic-api-key", "name": "Anthropic API Key", "category": "intelligence", "tier": "advanced", "signals": ["ANTHROPIC_API_KEY"] },
3
+ { "id": "openai-api-key", "name": "OpenAI API Key", "category": "intelligence", "tier": "intermediate", "signals": ["OPENAI_API_KEY"] },
4
+ { "id": "google-api-key", "name": "Google Gemini API Key", "category": "intelligence", "tier": "intermediate", "signals": ["GOOGLE_API_KEY", "GEMINI_API_KEY"] },
5
+ { "id": "xai-api-key", "name": "xAI API Key", "category": "intelligence", "tier": "intermediate", "signals": ["XAI_API_KEY"] },
6
+ { "id": "mistral-api-key", "name": "Mistral API Key", "category": "intelligence", "tier": "intermediate", "signals": ["MISTRAL_API_KEY"] },
7
+ { "id": "groq-api-key", "name": "Groq API Key", "category": "intelligence", "tier": "intermediate", "signals": ["GROQ_API_KEY"] },
8
+ { "id": "together-api-key", "name": "Together API Key", "category": "intelligence", "tier": "intermediate", "signals": ["TOGETHER_API_KEY"] },
9
+ { "id": "fireworks-api-key", "name": "Fireworks API Key", "category": "intelligence", "tier": "intermediate", "signals": ["FIREWORKS_API_KEY"] },
10
+ { "id": "azure-openai-api-key", "name": "Azure OpenAI API Key", "category": "intelligence", "tier": "intermediate", "signals": ["AZURE_OPENAI_API_KEY"] },
11
+ { "id": "model-routing", "name": "Model routing aliases", "category": "intelligence", "tier": "advanced", "signals": ["alias.*model"] },
12
+ { "id": "local-ollama", "name": "Ollama (local models)", "category": "intelligence", "tier": "advanced", "signals": ["which ollama"] },
13
+ { "id": "local-lmstudio", "name": "LM Studio (local models)", "category": "intelligence", "tier": "advanced", "signals": ["which lms"] },
14
+
15
+ { "id": "claude-code", "name": "Claude Code CLI", "category": "tooling", "tier": "advanced", "signals": ["which claude"] },
16
+ { "id": "codex-cli", "name": "Codex CLI", "category": "tooling", "tier": "advanced", "signals": ["which codex"] },
17
+ { "id": "gemini-cli", "name": "Gemini CLI", "category": "tooling", "tier": "intermediate", "signals": ["which gemini"] },
18
+ { "id": "cursor", "name": "Cursor IDE", "category": "tooling", "tier": "intermediate", "signals": ["which cursor"] },
19
+ { "id": "aider", "name": "Aider", "category": "tooling", "tier": "intermediate", "signals": ["which aider"] },
20
+ { "id": "mcp-filesystem", "name": "MCP: Filesystem", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.filesystem"] },
21
+ { "id": "mcp-github", "name": "MCP: GitHub", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.github"] },
22
+ { "id": "mcp-obsidian", "name": "MCP: Obsidian", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.obsidian"] },
23
+ { "id": "mcp-supabase", "name": "MCP: Supabase", "category": "tooling", "tier": "advanced", "signals": ["mcpServers.supabase"] },
24
+ { "id": "mcp-google-drive", "name": "MCP: Google Drive", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.google-drive"] },
25
+ { "id": "mcp-brave-search", "name": "MCP: Brave Search", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.brave-search"] },
26
+ { "id": "mcp-slack", "name": "MCP: Slack", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.slack"] },
27
+ { "id": "mcp-puppeteer", "name": "MCP: Puppeteer", "category": "tooling", "tier": "advanced", "signals": ["mcpServers.puppeteer"] },
28
+ { "id": "mcp-playwright", "name": "MCP: Playwright", "category": "tooling", "tier": "advanced", "signals": ["mcpServers.playwright"] },
29
+ { "id": "mcp-postgres", "name": "MCP: Postgres", "category": "tooling", "tier": "advanced", "signals": ["mcpServers.postgres"] },
30
+ { "id": "mcp-sqlite", "name": "MCP: SQLite", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.sqlite"] },
31
+ { "id": "mcp-sentry", "name": "MCP: Sentry", "category": "tooling", "tier": "advanced", "signals": ["mcpServers.sentry"] },
32
+ { "id": "mcp-notion", "name": "MCP: Notion", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.notion"] },
33
+ { "id": "mcp-linear", "name": "MCP: Linear", "category": "tooling", "tier": "intermediate", "signals": ["mcpServers.linear"] },
34
+ { "id": "mcp-vercel", "name": "MCP: Vercel", "category": "tooling", "tier": "advanced", "signals": ["mcpServers.vercel"] },
35
+
36
+ { "id": "claude-commands", "name": "Claude Code commands", "category": "tooling", "tier": "advanced", "signals": [".claude/commands/"] },
37
+
38
+ { "id": "claude-md", "name": "CLAUDE.md project config", "category": "continuity", "tier": "advanced", "signals": ["CLAUDE.md"] },
39
+ { "id": "claude-memories", "name": "Claude Code memories", "category": "continuity", "tier": "intermediate", "signals": ["~/.claude/memories/"] },
40
+ { "id": "split-rules", "name": "Split rules directory", "category": "continuity", "tier": "advanced", "signals": [".claude/rules/"] },
41
+ { "id": "memory-md", "name": "MEMORY.md persistent context", "category": "continuity", "tier": "advanced", "signals": ["MEMORY.md"] },
42
+ { "id": "daily-logs", "name": "Daily log files", "category": "continuity", "tier": "elite", "signals": ["YYYY-MM-DD.md"] },
43
+ { "id": "cursorrules", "name": ".cursorrules file", "category": "continuity", "tier": "intermediate", "signals": [".cursorrules"] },
44
+ { "id": "windsurfrules", "name": ".windsurfrules file", "category": "continuity", "tier": "intermediate", "signals": [".windsurfrules"] },
45
+ { "id": "copilot-instructions", "name": "Copilot instructions", "category": "continuity", "tier": "intermediate", "signals": [".github/copilot-instructions.md"] },
46
+ { "id": "evolve-md", "name": "EVOLVE.md evolution spec", "category": "continuity", "tier": "elite", "signals": ["EVOLVE.md"] },
47
+ { "id": "agents-md", "name": "AGENTS.md coordination", "category": "continuity", "tier": "elite", "signals": ["AGENTS.md"] },
48
+ { "id": "soul-md", "name": "SOUL.md identity spec", "category": "continuity", "tier": "elite", "signals": ["SOUL.md"] },
49
+
50
+ { "id": "subagents", "name": "Claude Code subagents", "category": "autonomy", "tier": "advanced", "signals": [".claude/agents/"] },
51
+ { "id": "hooks", "name": "Claude Code hooks", "category": "autonomy", "tier": "advanced", "signals": ["settings.hooks"] },
52
+ { "id": "tmux", "name": "tmux terminal multiplexer", "category": "autonomy", "tier": "intermediate", "signals": ["which tmux"] },
53
+ { "id": "git-worktrees", "name": "Git worktrees", "category": "autonomy", "tier": "advanced", "signals": ["git worktree list"] },
54
+ { "id": "orchestrator-gastown", "name": "Gastown orchestrator", "category": "autonomy", "tier": "elite", "signals": ["which gt"] },
55
+ { "id": "orchestrator-claudeflow", "name": "ClaudeFlow orchestrator", "category": "autonomy", "tier": "elite", "signals": ["which claude-flow"] },
56
+ { "id": "orchestrator-openclaw", "name": "OpenClaw orchestrator", "category": "autonomy", "tier": "elite", "signals": ["which openclaw"] },
57
+ { "id": "claude-skills", "name": "Claude Code skills", "category": "autonomy", "tier": "advanced", "signals": [".claude/skills/"] },
58
+ { "id": "orchestrator-devswarm", "name": "DevSwarm orchestrator", "category": "autonomy", "tier": "elite", "signals": ["which devswarm"] },
59
+ { "id": "heartbeat", "name": "HEARTBEAT.md agent liveness", "category": "autonomy", "tier": "elite", "signals": ["HEARTBEAT.md"] },
60
+ { "id": "parallel-scripts", "name": "Parallel execution scripts", "category": "autonomy", "tier": "advanced", "signals": ["crontab", "LaunchAgents"] },
61
+
62
+ { "id": "vercel", "name": "Vercel deployment", "category": "ship", "tier": "intermediate", "signals": ["vercel.json"] },
63
+ { "id": "netlify", "name": "Netlify deployment", "category": "ship", "tier": "intermediate", "signals": ["netlify.toml"] },
64
+ { "id": "fly", "name": "Fly.io deployment", "category": "ship", "tier": "advanced", "signals": ["fly.toml"] },
65
+ { "id": "railway", "name": "Railway deployment", "category": "ship", "tier": "intermediate", "signals": ["railway.json"] },
66
+ { "id": "render", "name": "Render deployment", "category": "ship", "tier": "intermediate", "signals": ["render.yaml"] },
67
+ { "id": "cloudflare-workers", "name": "Cloudflare Workers", "category": "ship", "tier": "advanced", "signals": ["wrangler.toml"] },
68
+ { "id": "docker", "name": "Docker containerization", "category": "ship", "tier": "intermediate", "signals": ["Dockerfile"] },
69
+ { "id": "github-actions", "name": "GitHub Actions CI", "category": "ship", "tier": "advanced", "signals": [".github/workflows/"] },
70
+ { "id": "vitest", "name": "Vitest test framework", "category": "ship", "tier": "intermediate", "signals": ["vitest.config"] },
71
+ { "id": "jest", "name": "Jest test framework", "category": "ship", "tier": "intermediate", "signals": ["jest.config"] },
72
+ { "id": "pytest", "name": "Pytest test framework", "category": "ship", "tier": "intermediate", "signals": ["pytest.ini", "pyproject.toml[pytest]"] },
73
+ { "id": "playwright", "name": "Playwright E2E testing", "category": "ship", "tier": "advanced", "signals": ["playwright.config"] },
74
+ { "id": "cypress", "name": "Cypress E2E testing", "category": "ship", "tier": "intermediate", "signals": ["cypress.config"] },
75
+
76
+ { "id": "gitignore-env", "name": ".gitignore covers .env", "category": "security", "tier": "basic", "signals": [".gitignore"] },
77
+ { "id": "env-vars", "name": "Environment variable secrets", "category": "security", "tier": "intermediate", "signals": ["shell env exports"] },
78
+ { "id": "agent-permissions", "name": "Agent permission scoping", "category": "security", "tier": "advanced", "signals": ["allowedTools", "blockedCommands"] },
79
+ { "id": "file-permissions", "name": "Sensitive file permissions", "category": "security", "tier": "advanced", "signals": ["stat.mode"] },
80
+ { "id": "canary-tokens", "name": "Canary tokens", "category": "security", "tier": "elite", "signals": ["canary", "honeypot"] },
81
+ { "id": "prompt-injection-defense", "name": "Prompt injection defense", "category": "security", "tier": "elite", "signals": ["injection", "defense", "safety"] },
82
+
83
+ { "id": "eslint", "name": "ESLint configuration", "category": "ops", "tier": "basic", "signals": ["eslint.config", ".eslintrc"] },
84
+ { "id": "prettier", "name": "Prettier configuration", "category": "ops", "tier": "basic", "signals": ["prettier.config", ".prettierrc"] },
85
+ { "id": "biome", "name": "Biome configuration", "category": "ops", "tier": "intermediate", "signals": ["biome.json"] },
86
+ { "id": "typescript-strict", "name": "TypeScript strict mode", "category": "ops", "tier": "intermediate", "signals": ["tsconfig.json strict:true"] },
87
+ { "id": "npm-scripts", "name": "Build/dev/lint scripts", "category": "ops", "tier": "basic", "signals": ["package.json scripts"] },
88
+ { "id": "task-tracking", "name": "Task tracking", "category": "ops", "tier": "intermediate", "signals": ["TODO", "TASKS"] },
89
+ { "id": "documentation", "name": "Project documentation", "category": "ops", "tier": "basic", "signals": ["README.md"] },
90
+ { "id": "kanban-integration", "name": "Kanban/project board integration", "category": "ops", "tier": "advanced", "signals": ["linear", "jira", "notion tasks"] },
91
+ { "id": "automated-docs", "name": "Automated documentation", "category": "ops", "tier": "advanced", "signals": ["typedoc", "jsdoc", "storybook"] },
92
+ { "id": "maintenance-scripts", "name": "Maintenance scripts", "category": "ops", "tier": "intermediate", "signals": ["scripts/", "Makefile"] },
93
+ { "id": "monitoring-config", "name": "Monitoring configuration", "category": "ops", "tier": "intermediate", "signals": ["sentry.config", "datadog"] },
94
+ { "id": "turbo", "name": "Turborepo", "category": "ops", "tier": "intermediate", "signals": ["turbo.json"] },
95
+ { "id": "nx", "name": "Nx monorepo", "category": "ops", "tier": "intermediate", "signals": ["nx.json"] },
96
+ { "id": "pnpm-workspace", "name": "pnpm workspace", "category": "ops", "tier": "basic", "signals": ["pnpm-workspace.yaml"] },
97
+ { "id": "lerna", "name": "Lerna monorepo", "category": "ops", "tier": "basic", "signals": ["lerna.json"] },
98
+
99
+ { "id": "github-repos", "name": "Public GitHub repositories", "category": "social", "tier": "intermediate", "signals": ["git remote"] },
100
+ { "id": "npm-public", "name": "Published npm packages", "category": "social", "tier": "advanced", "signals": ["package.json private:false"] },
101
+ { "id": "slack-webhook", "name": "Slack webhook integration", "category": "social", "tier": "intermediate", "signals": ["SLACK_WEBHOOK"] },
102
+ { "id": "discord-bot", "name": "Discord bot integration", "category": "social", "tier": "intermediate", "signals": ["DISCORD_WEBHOOK", "DISCORD_BOT_TOKEN"] },
103
+
104
+ { "id": "ufs:claude-md:deep", "name": "CLAUDE.md deep config", "category": "tooling", "tier": "advanced", "signals": ["CLAUDE.md >100 lines + keywords"] },
105
+ { "id": "ufs:claude-md:deep:continuity", "name": "CLAUDE.md deep continuity", "category": "continuity", "tier": "advanced", "signals": ["CLAUDE.md >100 lines continuity"] },
106
+ { "id": "ufs:claude-md:deep:autonomy", "name": "CLAUDE.md autonomy guidance", "category": "autonomy", "tier": "basic", "signals": ["CLAUDE.md autonomy"] },
107
+ { "id": "ufs:claude-md:rich", "name": "CLAUDE.md rich config", "category": "tooling", "tier": "intermediate", "signals": ["CLAUDE.md >50 lines"] },
108
+ { "id": "ufs:claude-md:rich:continuity", "name": "CLAUDE.md continuity context", "category": "continuity", "tier": "basic", "signals": ["CLAUDE.md >50 lines continuity"] },
109
+ { "id": "ufs:claude-md:exists", "name": "CLAUDE.md exists", "category": "tooling", "tier": "basic", "signals": ["CLAUDE.md"] },
110
+
111
+ { "id": "ufs:claude-dir:advanced", "name": ".claude/ advanced config", "category": "tooling", "tier": "advanced", "signals": [".claude/ agents/skills/rules/hooks"] },
112
+ { "id": "ufs:claude-dir:advanced:autonomy", "name": ".claude/ autonomy features", "category": "autonomy", "tier": "basic", "signals": [".claude/ autonomy"] },
113
+ { "id": "ufs:claude-settings:custom", "name": ".claude/settings.json custom", "category": "tooling", "tier": "basic", "signals": [".claude/settings.json non-default"] },
114
+ { "id": "ufs:claude-dir:exists", "name": ".claude/ directory", "category": "tooling", "tier": "basic", "signals": [".claude/"] },
115
+
116
+ { "id": "ufs:cursorrules:rich", "name": ".cursorrules rich config", "category": "tooling", "tier": "intermediate", "signals": [".cursorrules >30 lines"] },
117
+ { "id": "ufs:cursorrules:rich:continuity", "name": ".cursorrules continuity", "category": "continuity", "tier": "basic", "signals": [".cursorrules continuity"] },
118
+ { "id": "ufs:cursorrules:exists", "name": ".cursorrules exists", "category": "tooling", "tier": "basic", "signals": [".cursorrules"] },
119
+ { "id": "ufs:cursor-dir:rules", "name": ".cursor/ rules", "category": "tooling", "tier": "intermediate", "signals": [".cursor/rules"] },
120
+
121
+ { "id": "ufs:copilot-instructions:rich", "name": "Copilot instructions rich", "category": "tooling", "tier": "intermediate", "signals": ["copilot-instructions.md >20 lines"] },
122
+ { "id": "ufs:copilot-instructions:exists", "name": "Copilot instructions", "category": "tooling", "tier": "basic", "signals": ["copilot-instructions.md"] },
123
+
124
+ { "id": "ufs:agents-md:deep", "name": "AGENTS.md deep coordination", "category": "continuity", "tier": "advanced", "signals": ["AGENTS.md >50 lines + behavioral"] },
125
+ { "id": "ufs:agents-md:deep:autonomy", "name": "AGENTS.md autonomy", "category": "autonomy", "tier": "intermediate", "signals": ["AGENTS.md autonomy coordination"] },
126
+ { "id": "ufs:agents-md:exists", "name": "AGENTS.md exists", "category": "tooling", "tier": "basic", "signals": ["AGENTS.md"] },
127
+
128
+ { "id": "ufs:soul-md:rich", "name": "SOUL.md rich spec", "category": "continuity", "tier": "intermediate", "signals": ["SOUL.md >20 lines"] },
129
+ { "id": "ufs:soul-md:rich:intelligence", "name": "SOUL.md intelligence", "category": "intelligence", "tier": "basic", "signals": ["SOUL.md intelligence spec"] },
130
+ { "id": "ufs:soul-md:exists", "name": "SOUL.md identity spec", "category": "continuity", "tier": "basic", "signals": ["SOUL.md"] },
131
+
132
+ { "id": "ufs:user-md:exists", "name": "USER.md", "category": "continuity", "tier": "basic", "signals": ["USER.md"] },
133
+
134
+ { "id": "ufs:mcp-json:many", "name": ".mcp.json many servers", "category": "tooling", "tier": "advanced", "signals": [".mcp.json >6 servers"] },
135
+ { "id": "ufs:mcp-json:several", "name": ".mcp.json several servers", "category": "tooling", "tier": "intermediate", "signals": [".mcp.json >3 servers"] },
136
+ { "id": "ufs:mcp-json:exists", "name": ".mcp.json exists", "category": "tooling", "tier": "basic", "signals": [".mcp.json"] },
137
+ { "id": "ufs:mcp-sdk:pioneer", "name": "MCP SDK (Pioneer)", "category": "tooling", "tier": "elite", "signals": ["@modelcontextprotocol/sdk"] },
138
+
139
+ { "id": "ufs:memory-dir:heartbeat", "name": "Memory heartbeat state", "category": "autonomy", "tier": "basic", "signals": ["memory/heartbeat-state.json"] },
140
+ { "id": "ufs:memory-dir:active", "name": "Memory active work", "category": "continuity", "tier": "basic", "signals": ["memory/active-work.md"] },
141
+ { "id": "ufs:memory-dir:rich", "name": "Memory rich history", "category": "continuity", "tier": "intermediate", "signals": ["memory/ >5 files"] },
142
+ { "id": "ufs:memory-dir:exists", "name": "Memory directory", "category": "continuity", "tier": "basic", "signals": ["memory/"] },
143
+
144
+ { "id": "ufs:memory-md:rich", "name": "MEMORY.md rich", "category": "continuity", "tier": "intermediate", "signals": ["MEMORY.md >50 lines"] },
145
+ { "id": "ufs:memory-md:exists", "name": "MEMORY.md exists", "category": "continuity", "tier": "basic", "signals": ["MEMORY.md"] },
146
+
147
+ { "id": "ufs:heartbeat-md:exists", "name": "HEARTBEAT.md", "category": "autonomy", "tier": "basic", "signals": ["HEARTBEAT.md"] },
148
+ { "id": "ufs:evolve-md:exists", "name": "EVOLVE.md", "category": "continuity", "tier": "basic", "signals": ["EVOLVE.md"] },
149
+ { "id": "ufs:handoff:exists", "name": "Handoff/session files", "category": "continuity", "tier": "basic", "signals": ["handoff*", "handover*", "session-state*"] },
150
+
151
+ { "id": "ufs:specs-dir:exists", "name": "Specs directory", "category": "ops", "tier": "intermediate", "signals": ["specs/"] },
152
+ { "id": "ufs:prd:exists", "name": "PRD document", "category": "ops", "tier": "intermediate", "signals": ["docs/PRD*.md"] },
153
+
154
+ { "id": "ufs:test-ratio:high", "name": "High test ratio", "category": "ship", "tier": "advanced", "signals": ["test ratio >0.3"] },
155
+ { "id": "ufs:test-ratio:medium", "name": "Medium test ratio", "category": "ship", "tier": "intermediate", "signals": ["test ratio >0.1"] },
156
+ { "id": "ufs:test-ratio:zero", "name": "No tests (penalty)", "category": "ship", "tier": "basic", "signals": ["test ratio = 0"] },
157
+
158
+ { "id": "ufs:env-example:exists", "name": ".env.example", "category": "social", "tier": "basic", "signals": [".env.example"] },
159
+
160
+ { "id": "ufs:readme:badges", "name": "README badges", "category": "ops", "tier": "basic", "signals": ["README.md badges"] },
161
+ { "id": "ufs:readme:rich", "name": "README.md rich", "category": "ops", "tier": "intermediate", "signals": ["README.md >100 lines"] },
162
+ { "id": "ufs:readme:exists", "name": "README.md exists", "category": "ops", "tier": "basic", "signals": ["README.md"] },
163
+
164
+ { "id": "ufs:ci:complex", "name": "Multiple CI workflows", "category": "ship", "tier": "intermediate", "signals": [".github/workflows/ 2+"] },
165
+ { "id": "ufs:ci:exists", "name": "CI workflow", "category": "ship", "tier": "basic", "signals": [".github/workflows/"] },
166
+
167
+ { "id": "ufs:docker:exists", "name": "Dockerfile", "category": "ship", "tier": "basic", "signals": ["Dockerfile"] },
168
+ { "id": "ufs:docker-compose:exists", "name": "Docker Compose", "category": "ship", "tier": "basic", "signals": ["docker-compose.yml"] },
169
+
170
+ { "id": "ufs:turbo:exists", "name": "Turborepo", "category": "ops", "tier": "basic", "signals": ["turbo.json"] },
171
+ { "id": "ufs:nx:exists", "name": "Nx", "category": "ops", "tier": "basic", "signals": ["nx.json"] },
172
+
173
+ { "id": "ufs:codeowners:exists", "name": "CODEOWNERS", "category": "social", "tier": "basic", "signals": [".github/CODEOWNERS"] },
174
+ { "id": "ufs:pr-template:exists", "name": "PR template", "category": "social", "tier": "basic", "signals": [".github/PULL_REQUEST_TEMPLATE.md"] },
175
+ { "id": "ufs:changelog:exists", "name": "CHANGELOG", "category": "ops", "tier": "basic", "signals": ["CHANGELOG.md"] },
176
+ { "id": "ufs:husky:exists", "name": "Husky git hooks", "category": "ops", "tier": "basic", "signals": [".husky/"] },
177
+ { "id": "ufs:license:exists", "name": "LICENSE", "category": "social", "tier": "basic", "signals": ["LICENSE"] },
178
+
179
+ { "id": "ufs:security:canary", "name": "Canary in config", "category": "security", "tier": "basic", "signals": ["canary keyword"] },
180
+ { "id": "ufs:security:injection", "name": "Injection defense", "category": "security", "tier": "basic", "signals": ["injection defense keyword"] },
181
+ { "id": "ufs:security:confirm", "name": "Confirmation requirement", "category": "security", "tier": "basic", "signals": ["require confirmation"] },
182
+ { "id": "ufs:security:gitignore", "name": ".gitignore secrets", "category": "security", "tier": "basic", "signals": [".gitignore secret patterns"] },
183
+
184
+ { "id": "ufs:cron:ai", "name": "AI crontab entries", "category": "autonomy", "tier": "basic", "signals": ["crontab AI"] },
185
+ { "id": "ufs:launchd:ai", "name": "AI launchd services", "category": "autonomy", "tier": "basic", "signals": ["launchctl AI"] },
186
+
187
+ { "id": "ufs:monorepo:large", "name": "Large monorepo", "category": "ops", "tier": "basic", "signals": [">5 workspaces"] },
188
+ { "id": "ufs:monorepo:ai-consistent", "name": "Consistent AI config", "category": "tooling", "tier": "basic", "signals": ["CLAUDE.md across workspaces"] }
189
+ ]