复制安装命令
用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。
复制前请先查看来源、License 和安全提示。
A model-agnostic agent-skills platform.
用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。
复制前请先查看来源、License 和安全提示。
来源文件:README.md
A model-agnostic agent-skills platform. The canonical layer is harness-free by construction; Claude Code is currently the verified-native harness. Other harnesses remain engineering candidates until their native-path integration is verified; source research alone is never presented as public support.
Version semantics: the release badge is this marketplace's display version. npm packages, including the
ccpiCLI and publishable plugins, retain their own package versions; they are intentionally not expected to equal the display version. The version-surface checker governs the display surfaces without rewriting package semver.
Inside Claude Code, one command installs the whole marketplace:
/plugin marketplace add jeremylongshore/claude-code-plugins
Or use the CLI:
pnpm add -g @intentsolutionsio/ccpi
ccpi install devops-automation-pack
Browse the marketplace · Explore plugins · Download bundles
Killer Skill of the Week — no-ai-slop by Peter Yang
Strip AI slop from any draft — named-pattern edits that keep the writer's real voice
no-ai-slop does two jobs and refuses to fake a third. In Edit mode it makes the minimum effective edit — cutting throat-clearing, weak verbs, and abstract nouns while deliberately preserving the writer's cadence, bluntness, humor, and honest admissions, so a rough draft still sounds like the same person afterward. In Detect mode it names each AI-slop pattern it finds, quotes the offending line, and gives the fix in a few words — and pointedly does NOT score the draft or guess whether an AI wrote it. That restraint is the whole point: AI detectors guess; named patterns are evidence the reader can check. MIT-licensed, single focused skill, actively maintained by Peter Yang.
"AI detectors guess. Named patterns are evidence the user can check." — Peter Yang
Grade: A | Week of July 22, 2026 (W30) | View on GitHub
Previous picks: tonone, mnemos, databricks-pack, kobiton-automate, skyvern, code-cleanup, web-analytics, token-optimizer, executive-assistant-skills, skill-creator, cursor-pack, crypto-portfolio-tracker. See all at tonsofskills.com.
Every number below names the cohort it counts and the command that reproduces it — an unlabeled count is how a corpus ends up with five contradictory answers to "how many skills."
| Count | Cohort | Reproduce with |
|---|---|---|
| 442 | catalog plugins (catalog-entry cohort) | node scripts/generate-readme-toc.mjs over marketplace.extended.json |
| 3,067 | marketplace-visible skills (distinct) | node -e "import('./scripts/corpus-resolver.mjs').then(m=>console.log(m.resolveCorpus('marketplace-visible').length))" |
| 347 | agent definitions in plugins | git ls-files 'plugins/**' | grep '/agents/.*\.md' |
| 19 | plugin categories | ls -d plugins/*/ |
Across 396 published packages in the claude-code-plugins namespace. Updated daily by GitHub Actions.
| Window | All packages | Established (>30d) |
|---|---|---|
| Last 24 hours | 962 | 962 |
| Last 7 days | 2,920 | 2,916 |
| Last 30 days | 12,868 | 12,779 |
"Established" excludes packages first published within the last 30 days, so a bulk-publish event doesn't dominate the headline.
Top 10 by last 30 days:
Last refreshed 2026-08-19T03:03:05.709Z.
Five real questions, five doors — each resolves to a live, generated surface, never a hand-maintained list:
The 19 categories below link into the live marketplace. Plugin counts are the catalog-entry cohort — regenerated from marketplace.extended.json by this generator; the catalog itself lives on tonsofskills.com, never in this file (§ 6A of the platform blueprint).
| Category | Plugins | |
|---|---|---|
| 🤖 | AI & Machine Learning | 36 |
| 🎭 | AI Agents & Agency | 10 |
| 🔌 | API Development | 26 |
| 💼 | Business Tools | 6 |
| 👥 | Community | 21 |
| ₿ | Crypto & Web3 | 27 |
| 💾 | Database | 26 |
| 🎨 | Design | 2 |
| 🔧 | DevOps & Infrastructure | 36 |
| 📚 | Examples & Templates | 5 |
| 🧩 | MCP Servers | 16 |
| 📦 | Packages | 5 |
| ⚡ | Performance | 25 |
| ✅ | Productivity | 30 |
| 🎁 | SaaS Skill Packs | 106 |
| 🔐 | Security | 27 |
| ✨ | Skill Enhancers | 9 |
| 🧪 | Testing | 28 |
| 📁 | Analytics | 1 |
Four artifact classes live in this repository, distinguished on sight and never blurred — provenance is a truth requirement here, not a UX nicety:
| Class | What it is | How the reader can tell |
|---|---|---|
| Canonical skill | First-party, harness-free, the source of truth | No .source.json in its plugin directory |
| Generated adapter | A thin, machine-produced harness projection | Lives under a generated path with a "generated — do not edit" header |
| First-party package | An Intent Solutions distribution (npm, cowork zip) | @intentsolutionsio scope, IS-authored license |
| Upstream mirror | Somebody else's work, hosted mirror-by-default | .source.json present — upstream author, license, and pinned commit recorded |
Not yet certified. The certification program (tiers T0–T4 with retained, hash-matched evidence) is a later epic of the platform blueprint; until its report exists, no artifact on this surface claims a tier. This line is rendered from the absence of certification-report.json — honestly, not cosmetically.
Start with the contribution guide, then the intake and review standards every submission passes through:
External plugins are hosted mirror-by-default: the contributor's repository stays the source of truth, every mirrored source is pinned in a content lockfile, and upstream credit — author, license, resolved commit — is recorded in the mirror itself. Improvements flow by upstreaming to the author's repository, never by silently editing the mirror. The full decision record is the external-sync model.
MIT for the repository scaffolding and first-party tooling; each plugin carries its own license in its manifest, and mirrored plugins keep their upstream license verbatim.
name: deepgram-upgrade-migration
description: 'Plan and execute Deepgram SDK upgrades and model migrations.
Use when upgrading SDK versions (v3 to v4 to v5), migrating models
(Nova-2 to Nova-3), or planning API version transitions.
Trigger: "upgrade deepgram", "deepgram migration", "update deepgram SDK",
"deepgram version upgrade", "nova-3 migration".
'
allowed-tools: Read, Write, Edit, Grep, Bash(npm:*), Bash(pip:*)
version: 1.13.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- deepgram
- api
- migration
- upgrade
compatibility: Designed for Claude CodeUpgrade the SDK in staging, run mock/unit tests and a small licensed-fixture comparison against the prior version, and compare aggregate output/latency/error metrics. Promote through an approved canary only after acceptance passes; revert to the prior lockfile/configuration on regression and do not reprocess production recordings to validate the upgrade.
!npm list @deepgram/sdk 2>/dev/null | grep deepgram || echo 'SDK not installed'
Guide for Deepgram SDK version upgrades (v3 -> v4 -> v5) and model migrations (Nova-2 -> Nova-3). Includes breaking change maps, side-by-side API comparison, A/B testing scripts, automated validation, and rollback procedures.
| Version | Client Init | STT API | Live API | TTS API | Status |
|---|---|---|---|---|---|
| v3.x | createClient(key) | listen.prerecorded.transcribeUrl() | listen.live() | speak.request() | Stable |
| v4.x | createClient(key) | listen.prerecorded.transcribeUrl() | listen.live() | speak.request() | Stable |
| v5.x | new DeepgramClient({apiKey}) | listen.v1.media.transcribeUrl() | listen.v1.connect() | speak.v1.audio.generate() | Beta |
# Check installed version
npm list @deepgram/sdk
# Check latest available
npm view @deepgram/sdk versions --json | tail -5
// ============= CLIENT CREATION =============
// v3/v4:
import { createClient } from '@deepgram/sdk';
const dg = createClient(process.env.DEEPGRAM_API_KEY!);
// v5:
import { DeepgramClient } from '@deepgram/sdk';
const dg = new DeepgramClient({ apiKey: process.env.DEEPGRAM_API_KEY });
// ============= PRE-RECORDED STT =============
// v3/v4:
const { result, error } = await dg.listen.prerecorded.transcribeUrl(
{ url: audioUrl },
{ model: 'nova-3', smart_format: true }
);
// v5:
const response = await dg.listen.v1.media.transcribeUrl(
{ url: audioUrl },
{ model: 'nova-3', smart_format: true }
);
// v5 throws on error instead of returning { error }
// ============= FILE TRANSCRIPTION =============
// v3/v4:
const { result, error } = await dg.listen.prerecorded.transcribeFile(
buffer,
{ model: 'nova-3', mimetype: 'audio/wav' }
);
// v5:
const response = await dg.listen.v1.media.transcribeFile(
createReadStream('audio.wav'),
{ model: 'nova-3' }
);
// ============= LIVE STREAMING =============
// v3/v4:
const connection = dg.listen.live({ model: 'nova-3', encoding: 'linear16' });
connection.on(LiveTranscriptionEvents.Transcript, (data) => { ... });
// v5:
const connection = await dg.listen.v1.connect({ model: 'nova-3', encoding: 'linear16' });
// Note: v5 connect() is async
// ============= TEXT-TO-SPEECH =============
// v3/v4:
const response = await dg.speak.request(
{ text: 'Hello world' },
{ model: 'aura-2-thalia-en' }
);
const stream = await response.getStream();
// v5:
const response = await dg.speak.v1.audio.generate(
{ text: 'Hello world' },
{ model: 'aura-2-thalia-en' }
);
// ============= ERROR HANDLING =============
// v3/v4: Destructured { result, error }
const { result, error } = await dg.listen.prerecorded.transcribeUrl(src, opts);
if (error) handleError(error);
// v5: try/catch (throws on error)
try {
const result = await dg.listen.v1.media.transcribeUrl(src, opts);
} catch (err) {
handleError(err);
}
// Nova-3 is a drop-in replacement — same API, better accuracy
// Just change the model parameter:
// Before:
{ model: 'nova-2' }
// After:
{ model: 'nova-3' }
// Nova-3 improvements over Nova-2:
// - Higher accuracy across all languages
// - Better handling of accents and dialects
// - Improved punctuation and formatting
// - Same pricing tier
// - Same API parameters
async function compareModels(audioUrl: string) {
const client = createClient(process.env.DEEPGRAM_API_KEY!);
const [nova2, nova3] = await Promise.all([
client.listen.prerecorded.transcribeUrl(
{ url: audioUrl },
{ model: 'nova-2', smart_format: true }
),
client.listen.prerecorded.transcribeUrl(
{ url: audioUrl },
{ model: 'nova-3', smart_format: true }
),
]);
const t2 = nova2.result.results.channels[0].alternatives[0];
const t3 = nova3.result.results.channels[0].alternatives[0];
console.log('=== Nova-2 ===');
console.log(`Confidence: ${t2.confidence}`);
console.log(`Words: ${t2.words?.length}`);
console.log(`Transcript: ${t2.transcript.substring(0, 200)}...`);
console.log('\n=== Nova-3 ===');
console.log(`Confidence: ${t3.confidence}`);
console.log(`Words: ${t3.words?.length}`);
console.log(`Transcript: ${t3.transcript.substring(0, 200)}...`);
// Simple word-level similarity
const words2 = new Set(t2.transcript.toLowerCase().split(/\s+/));
const words3 = new Set(t3.transcript.toLowerCase().split(/\s+/));
const intersection = new Set([...words2].filter(w => words3.has(w)));
const union = new Set([...words2, ...words3]);
const similarity = intersection.size / union.size;
console.log(`\nSimilarity: ${(similarity * 100).toFixed(1)}%`);
console.log(`Nova-3 confidence delta: ${((t3.confidence - t2.confidence) * 100).toFixed(2)}%`);
}
import { describe, it, expect } from 'vitest';
import { createClient } from '@deepgram/sdk';
const SAMPLE_URL = 'https://static.deepgram.com/examples/Bueller-Life-moves-702702706.wav';
describe('Deepgram Migration Validation', () => {
const client = createClient(process.env.DEEPGRAM_API_KEY!);
it('API key is valid', async () => {
const { error } = await client.manage.getProjects();
expect(error).toBeNull();
});
it('Pre-recorded transcription works', async () => {
const { result, error } = await client.listen.prerecorded.transcribeUrl(
{ url: SAMPLE_URL }, { model: 'nova-3', smart_format: true }
);
expect(error).toBeNull();
expect(result.results.channels[0].alternatives[0].transcript).toBeTruthy();
expect(result.results.channels[0].alternatives[0].confidence).toBeGreaterThan(0.8);
}, 30000);
it('Diarization returns speaker labels', async () => {
const { result } = await client.listen.prerecorded.transcribeUrl(
{ url: SAMPLE_URL }, { model: 'nova-3', diarize: true, utterances: true }
);
const words = result.results.channels[0].alternatives[0].words;
expect(words?.[0]).toHaveProperty('speaker');
}, 30000);
it('TTS generates audio', async () => {
const response = await client.speak.request(
{ text: 'Migration test successful.' },
{ model: 'aura-2-thalia-en' }
);
const stream = await response.getStream();
expect(stream).toBeTruthy();
}, 15000);
});
# If issues are found after upgrade:
# 1. Revert SDK version
npm install @deepgram/sdk@3.x.x # Pin to previous working version
# 2. Revert model in config
# Change nova-3 back to nova-2 in environment/config
# 3. Run validation
npx vitest run tests/deepgram-validation.test.ts
# 4. Verify in production
curl -s -X POST 'https://api.deepgram.com/v1/listen?model=nova-2' \
-H "Authorization: Token $DEEPGRAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://static.deepgram.com/examples/Bueller-Life-moves-702702706.wav"}'
| Issue | Cause | Solution |
|---|---|---|
createClient is not a function | v5 installed | Use new DeepgramClient() |
listen.prerecorded is undefined | v5 namespace change | Use listen.v1.media |
| Quality regression after model change | Edge case in Nova-3 | A/B test, report to Deepgram, rollback |
speak.request is undefined | v5 namespace change | Use speak.v1.audio.generate |
评论 (0)
暂无评论,成为第一个评论者吧!