@rely-ai/caliber 1.15.0 → 1.15.2

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 (3) hide show
  1. package/README.md +19 -20
  2. package/dist/bin.js +15 -11
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -65,16 +65,13 @@ caliber init
65
65
  ├─ 2. 🔍 Discover Analyze languages, frameworks, dependencies, file structure,
66
66
  │ and existing agent configs via LLM
67
67
 
68
- ├─ 3. 🛠️ Generate Create tailored config files based on your codebase
69
- (or audit existing ones and suggest improvements)
68
+ ├─ 3. 🛠️ Generate Create CLAUDE.md + skills in parallel (core docs via smart
69
+ model, skills via fast model). Auto-polishes for max score
70
70
 
71
71
  ├─ 4. 👀 Review See a diff of proposed changes — accept, refine via
72
72
  │ chat, or decline. All changes are backed up automatically
73
73
 
74
- ├─ 5. 🔗 MCP Servers Discover and install MCP servers for tools your project
75
- │ uses (databases, APIs, platforms)
76
-
77
- └─ 6. 🧩 Skills Search community skill registries and install relevant
74
+ └─ 5. 🧩 Skills Search community skill registries and install relevant
78
75
  skills for your tech stack
79
76
  ```
80
77
 
@@ -151,28 +148,30 @@ caliber undo # Revert everything
151
148
 
152
149
  ## 📊 Scoring
153
150
 
154
- `caliber score` gives you a deterministic quality score using industry best practices.
151
+ `caliber score` gives you a deterministic, tech-stack-agnostic quality score. No LLM needed — it cross-references your config files against the actual project filesystem.
155
152
 
156
153
  ```
157
- Config Score: 87/100 (A) ✨
158
-
159
- FILES & SETUP 22/25 ████████████████████░░
160
- QUALITY 21/25 ████████████████████░░
161
- COVERAGE 18/20 ██████████████████░░░░
162
- ACCURACY 13/15 █████████████████░░░░░
163
- FRESHNESS & SAFETY 8/10 ████████████████░░░░░░
164
- BONUS 5/5 ████████████████████████
154
+ Agent Config Score 88 / 100 Grade A
155
+
156
+ FILES & SETUP 17 / 17
157
+ QUALITY 21 / 23
158
+ GROUNDING 20 / 20
159
+ ACCURACY 10 / 15
160
+ FRESHNESS & SAFETY 10 / 10
161
+ BONUS 5 / 5
165
162
  ```
166
163
 
167
164
  | Category | Points | What it checks |
168
165
  | ---------------------- | ------ | ------------------------------------------------------------------ |
169
- | **Files & Setup** | 25 | Config files exist, skills present, cross-platform parity |
170
- | **Quality** | 25 | Has build/test commands, not bloated, no vague text, no duplicates |
171
- | **Coverage** | 20 | Mentions actual dependencies and services |
172
- | **Accuracy** | 15 | Documented commands and file paths are valid |
173
- | **Freshness & Safety** | 10 | Recently updated, no leaked secrets, permissions set |
166
+ | **Files & Setup** | 25 | Config files exist, skills present, MCP servers, cross-platform parity |
167
+ | **Quality** | 25 | Has code blocks, concise token budget, concrete instructions, structured headings |
168
+ | **Grounding** | 20 | Config references actual project directories and files |
169
+ | **Accuracy** | 15 | Referenced paths exist on disk, config is in sync with code (git-based) |
170
+ | **Freshness & Safety** | 10 | Recently updated, no leaked secrets, permissions configured |
174
171
  | **Bonus** | 5 | Auto-refresh hooks, AGENTS.md, OpenSkills format |
175
172
 
173
+ Every failing check includes structured fix data — when `caliber init` runs, the LLM receives exactly what's wrong and how to fix it.
174
+
176
175
  ## 🧩 Skills
177
176
 
178
177
  Caliber searches three community registries and scores results against your project
package/dist/bin.js CHANGED
@@ -5997,9 +5997,8 @@ async function initCommand(options) {
5997
5997
  console.log(chalk8.dim(" 2. Discover Analyze your code, dependencies, and structure"));
5998
5998
  console.log(chalk8.dim(" 3. Generate Create config files tailored to your project"));
5999
5999
  console.log(chalk8.dim(" 4. Review Preview, refine, and apply the changes"));
6000
- console.log(chalk8.dim(" 5. Enhance Discover MCP servers for your tools"));
6001
- console.log(chalk8.dim(" 6. Skills Browse community skills for your stack\n"));
6002
- console.log(title.bold(" Step 1/6 \u2014 Connect your LLM\n"));
6000
+ console.log(chalk8.dim(" 5. Skills Browse community skills for your stack\n"));
6001
+ console.log(title.bold(" Step 1/5 \u2014 Connect your LLM\n"));
6003
6002
  let config = loadConfig();
6004
6003
  if (!config) {
6005
6004
  console.log(chalk8.dim(" No LLM provider set yet. Choose how to run Caliber:\n"));
@@ -6030,7 +6029,7 @@ async function initCommand(options) {
6030
6029
  - **Fast model**: ${fastModel || "none"}`);
6031
6030
  }
6032
6031
  await validateModel({ fast: true });
6033
- console.log(title.bold(" Step 2/6 \u2014 Discover your project\n"));
6032
+ console.log(title.bold(" Step 2/5 \u2014 Discover your project\n"));
6034
6033
  console.log(chalk8.dim(" Learning about your languages, dependencies, structure, and existing configs.\n"));
6035
6034
  const spinner = ora2("Analyzing project...").start();
6036
6035
  const fingerprint = await collectFingerprint(process.cwd());
@@ -6041,8 +6040,13 @@ async function initCommand(options) {
6041
6040
  }
6042
6041
  trackInitProjectDiscovered(fingerprint.languages.length, fingerprint.frameworks.length, fingerprint.fileTree.length);
6043
6042
  console.log(chalk8.dim(` Languages: ${fingerprint.languages.join(", ") || "none detected"}`));
6044
- console.log(chalk8.dim(` Files: ${fingerprint.fileTree.length} found
6045
- `));
6043
+ console.log(chalk8.dim(` Files: ${fingerprint.fileTree.length} found`));
6044
+ if (fingerprint.codeAnalysis) {
6045
+ const ca = fingerprint.codeAnalysis;
6046
+ const contextInfo = ca.truncated ? `Context: ~${ca.includedTokens.toLocaleString()} tokens (${Math.round(ca.includedTokens / ca.totalProjectTokens * 100)}% of ${ca.totalProjectTokens.toLocaleString()} total)` : `Context: ~${ca.includedTokens.toLocaleString()} tokens`;
6047
+ console.log(chalk8.dim(` ${contextInfo}`));
6048
+ }
6049
+ console.log("");
6046
6050
  if (report) {
6047
6051
  report.markStep("Fingerprint");
6048
6052
  report.addJson("Fingerprint: Git", { remote: fingerprint.gitRemoteUrl, packageName: fingerprint.packageName });
@@ -6135,7 +6139,7 @@ async function initCommand(options) {
6135
6139
  passingChecks = baselineScore.checks.filter((c) => c.passed).map((c) => ({ name: c.name }));
6136
6140
  currentScore = baselineScore.score;
6137
6141
  if (failingChecks.length > 0) {
6138
- console.log(title.bold(" Step 3/6 \u2014 Fine-tuning\n"));
6142
+ console.log(title.bold(" Step 3/5 \u2014 Fine-tuning\n"));
6139
6143
  console.log(chalk8.dim(` Your setup scores ${baselineScore.score}/100 \u2014 fixing ${failingChecks.length} remaining issue${failingChecks.length === 1 ? "" : "s"}:
6140
6144
  `));
6141
6145
  for (const check of failingChecks) {
@@ -6144,11 +6148,11 @@ async function initCommand(options) {
6144
6148
  console.log("");
6145
6149
  }
6146
6150
  } else if (hasExistingConfig) {
6147
- console.log(title.bold(" Step 3/6 \u2014 Improve your setup\n"));
6151
+ console.log(title.bold(" Step 3/5 \u2014 Improve your setup\n"));
6148
6152
  console.log(chalk8.dim(" Reviewing your existing configs against your codebase"));
6149
6153
  console.log(chalk8.dim(" and preparing improvements.\n"));
6150
6154
  } else {
6151
- console.log(title.bold(" Step 3/6 \u2014 Build your agent setup\n"));
6155
+ console.log(title.bold(" Step 3/5 \u2014 Build your agent setup\n"));
6152
6156
  console.log(chalk8.dim(" Creating config files tailored to your project.\n"));
6153
6157
  }
6154
6158
  console.log(chalk8.dim(" This can take a couple of minutes depending on your model and provider.\n"));
@@ -6225,7 +6229,7 @@ async function initCommand(options) {
6225
6229
  role: "assistant",
6226
6230
  content: summarizeSetup("Initial generation", generatedSetup)
6227
6231
  });
6228
- console.log(title.bold(" Step 4/6 \u2014 Review and apply\n"));
6232
+ console.log(title.bold(" Step 4/5 \u2014 Review and apply\n"));
6229
6233
  const setupFiles = collectSetupFiles(generatedSetup);
6230
6234
  const staged = stageFiles(setupFiles, process.cwd());
6231
6235
  const totalChanges = staged.newFiles + staged.modifiedFiles;
@@ -6398,7 +6402,7 @@ async function initCommand(options) {
6398
6402
  log(options.verbose, ` Still failing: ${c.name} (${c.earnedPoints}/${c.maxPoints})${c.suggestion ? ` \u2014 ${c.suggestion}` : ""}`);
6399
6403
  }
6400
6404
  }
6401
- console.log(title.bold("\n Step 6/6 \u2014 Community skills\n"));
6405
+ console.log(title.bold("\n Step 5/5 \u2014 Community skills\n"));
6402
6406
  console.log(chalk8.dim(" Search public skill registries for skills that match your tech stack.\n"));
6403
6407
  let wantsSkills;
6404
6408
  if (options.autoApprove) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rely-ai/caliber",
3
- "version": "1.15.0",
3
+ "version": "1.15.2",
4
4
  "description": "Analyze your codebase and generate optimized AI agent configs (CLAUDE.md, .cursorrules, skills) — no API key needed",
5
5
  "type": "module",
6
6
  "bin": {