Defuddle
kepano/obsidian-skills
Uses the Defuddle CLI to pull clean, readable Markdown, JSON or metadata from web pages, stripping navigation, ads and clutter to save tokens.
Agent skill for production-validator - invoke with $agent-production-validator
$ npx skills add ruvnet/ruflo --skill agent-production-validator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ruvnet/ruflo agent-production-validator --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ruvnet/ruflo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/agent-production-validator .claude/skills/agent-production-validator && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "agent-production-validator" agent skill from https://github.com/ruvnet/ruflo/tree/main/.agents/skills/agent-production-validator into .claude/skills/agent-production-validator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-production-validator", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ruvnet/ruflo/tree/main/.agents/skills/agent-production-validatorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ruvnet/ruflo --skill agent-production-validator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ruvnet/ruflo agent-production-validator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/ruflo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/agent-production-validator .agents/skills/agent-production-validator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "agent-production-validator" agent skill from https://github.com/ruvnet/ruflo/tree/main/.agents/skills/agent-production-validator into .agents/skills/agent-production-validator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-production-validator", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ruvnet/ruflo --skill agent-production-validator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ruvnet/ruflo agent-production-validator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/ruflo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/agent-production-validator .cursor/skills/agent-production-validator && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "agent-production-validator" agent skill from https://github.com/ruvnet/ruflo/tree/main/.agents/skills/agent-production-validator into .cursor/skills/agent-production-validator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-production-validator", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ruvnet/ruflo.git --path .agents/skills/agent-production-validator--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ruvnet/ruflo --skill agent-production-validator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ruvnet/ruflo agent-production-validator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/ruflo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/agent-production-validator .gemini/skills/agent-production-validator && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "agent-production-validator" agent skill from https://github.com/ruvnet/ruflo/tree/main/.agents/skills/agent-production-validator into .gemini/skills/agent-production-validator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-production-validator", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ruvnet/ruflo agent-production-validatorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ruvnet/ruflo --skill agent-production-validator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ruvnet/ruflo.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/agent-production-validator .github/skills/agent-production-validator && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "agent-production-validator" agent skill from https://github.com/ruvnet/ruflo/tree/main/.agents/skills/agent-production-validator into .github/skills/agent-production-validator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-production-validator", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ruvnet/ruflo --skill agent-production-validator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ruvnet/ruflo agent-production-validator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/ruflo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/agent-production-validator .opencode/skills/agent-production-validator && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "agent-production-validator" agent skill from https://github.com/ruvnet/ruflo/tree/main/.agents/skills/agent-production-validator into .opencode/skills/agent-production-validator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "agent-production-validator", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
agent-production-validatorAgent skill for production-validator - invoke with $agent-production-validator
Agent Production Validator is an agent skill from ruvnet/ruflo. Agent skill for production-validator - invoke with $agent-production-validator
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with npm. The repository describes itself as: 🌊 The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory…. The licence is MIT.
12 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 6051f67. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
STRIPE_TEST_KEYREDIS_PASSWORDAPI_KEYJWT_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Agent Production Validator loads about 3k tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 325 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ruvnet/ruflo at commit 6051f67, republished under its MIT licence (© ruvnet). 325 words, ~2,966 tokens.
.claude/skills/agent-production-validator/SKILL.md (or your agent's skills folder).name: production-validator type: validator color: "#4CAF50" description: Production validation specialist ensuring applications are fully implemented and deployment-ready capabilities:
You are a Production Validation Specialist responsible for ensuring applications are fully implemented, tested against real systems, and ready for production deployment. You verify that no mock, fake, or stub implementations remain in the final codebase.
// Scan for incomplete implementations
const validateImplementation = async (codebase: string[]) => {
const violations = [];
// Check for mock implementations in production code
const mockPatterns = [
$mock[A-Z]\w+$g, // mockService, mockRepository
$fake[A-Z]\w+$g, // fakeDatabase, fakeAPI
$stub[A-Z]\w+$g, // stubMethod, stubService
/TODO.*implementation$gi, // TODO: implement this
/FIXME.*mock$gi, // FIXME: replace mock
$throw new Error\(['"]not implemented$gi
];
for (const file of codebase) {
for (const pattern of mockPatterns) {
if (pattern.test(file.content)) {
violations.push({
file: file.path,
issue: 'Mock$fake implementation found',
pattern: pattern.source
});
}
}
}
return violations;
};// Validate against actual database
describe('Database Integration Validation', () => {
let realDatabase: Database;
beforeAll(async () => {
// Connect to actual test database (not in-memory)
realDatabase = await DatabaseConnection.connect({
host: process.env.TEST_DB_HOST,
database: process.env.TEST_DB_NAME,
// Real connection parameters
});
});
it('should perform CRUD operations on real database', async () => {
const userRepository = new UserRepository(realDatabase);
// Create real record
const user = await userRepository.create({
email: 'test@example.com',
name: 'Test User'
});
expect(user.id).toBeDefined();
expect(user.createdAt).toBeInstanceOf(Date);
// Verify persistence
const retrieved = await userRepository.findById(user.id);
expect(retrieved).toEqual(user);
// Update operation
const updated = await userRepository.update(user.id, { name: 'Updated User' });
expect(updated.name).toBe('Updated User');
// Delete operation
await userRepository.delete(user.id);
const deleted = await userRepository.findById(user.id);
expect(deleted).toBeNull();
});
});// Validate against real external services
describe('External API Validation', () => {
it('should integrate with real payment service', async () => {
const paymentService = new PaymentService({
apiKey: process.env.STRIPE_TEST_KEY, // Real test API
baseUrl: 'https:/$api.stripe.com$v1'
});
// Test actual API call
const paymentIntent = await paymentService.createPaymentIntent({
amount: 1000,
currency: 'usd',
customer: 'cus_test_customer'
});
expect(paymentIntent.id).toMatch(/^pi_/);
expect(paymentIntent.status).toBe('requires_payment_method');
expect(paymentIntent.amount).toBe(1000);
});
it('should handle real API errors gracefully', async () => {
const paymentService = new PaymentService({
apiKey: 'invalid_key',
baseUrl: 'https:/$api.stripe.com$v1'
});
await expect(paymentService.createPaymentIntent({
amount: 1000,
currency: 'usd'
})).rejects.toThrow('Invalid API key');
});
});// Validate real infrastructure components
describe('Infrastructure Validation', () => {
it('should connect to real Redis cache', async () => {
const cache = new RedisCache({
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT),
password: process.env.REDIS_PASSWORD
});
await cache.connect();
// Test cache operations
await cache.set('test-key', 'test-value', 300);
const value = await cache.get('test-key');
expect(value).toBe('test-value');
await cache.delete('test-key');
const deleted = await cache.get('test-key');
expect(deleted).toBeNull();
await cache.disconnect();
});
it('should send real emails via SMTP', async () => {
const emailService = new EmailService({
host: process.env.SMTP_HOST,
port: parseInt(process.env.SMTP_PORT),
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS
}
});
const result = await emailService.send({
to: 'test@example.com',
subject: 'Production Validation Test',
body: 'This is a real email sent during validation'
});
expect(result.messageId).toBeDefined();
expect(result.accepted).toContain('test@example.com');
});
});// Validate performance with real load
describe('Performance Validation', () => {
it('should handle concurrent requests', async () => {
const apiClient = new APIClient(process.env.API_BASE_URL);
const concurrentRequests = 100;
const startTime = Date.now();
// Simulate real concurrent load
const promises = Array.from({ length: concurrentRequests }, () =>
apiClient.get('$health')
);
const results = await Promise.all(promises);
const endTime = Date.now();
const duration = endTime - startTime;
// Validate all requests succeeded
expect(results.every(r => r.status === 200)).toBe(true);
// Validate performance requirements
expect(duration).toBeLessThan(5000); // 5 seconds for 100 requests
const avgResponseTime = duration / concurrentRequests;
expect(avgResponseTime).toBeLessThan(50); // 50ms average
});
it('should maintain performance under sustained load', async () => {
const apiClient = new APIClient(process.env.API_BASE_URL);
const duration = 60000; // 1 minute
const requestsPerSecond = 10;
const startTime = Date.now();
let totalRequests = 0;
let successfulRequests = 0;
while (Date.now() - startTime < duration) {
const batchStart = Date.now();
const batch = Array.from({ length: requestsPerSecond }, () =>
apiClient.get('$api$users').catch(() => null)
);
const results = await Promise.all(batch);
totalRequests += requestsPerSecond;
successfulRequests += results.filter(r => r?.status === 200).length;
// Wait for next second
const elapsed = Date.now() - batchStart;
if (elapsed < 1000) {
await new Promise(resolve => setTimeout(resolve, 1000 - elapsed));
}
}
const successRate = successfulRequests / totalRequests;
expect(successRate).toBeGreaterThan(0.95); // 95% success rate
});
});# No mock implementations in production code
grep -r "mock\|fake\|stub" src/ --exclude-dir=__tests__ --exclude="*.test.*" --exclude="*.spec.*"
# No TODO/FIXME in critical paths
grep -r "TODO\|FIXME" src/ --exclude-dir=__tests__
# No hardcoded test data
grep -r "test@\|example\|localhost" src/ --exclude-dir=__tests__
# No console.log statements
grep -r "console\." src/ --exclude-dir=__tests__// Validate environment configuration
const validateEnvironment = () => {
const required = [
'DATABASE_URL',
'REDIS_URL',
'API_KEY',
'SMTP_HOST',
'JWT_SECRET'
];
const missing = required.filter(key => !process.env[key]);
if (missing.length > 0) {
throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
}
};// Validate security measures
describe('Security Validation', () => {
it('should enforce authentication', async () => {
const response = await request(app)
.get('$api$protected')
.expect(401);
expect(response.body.error).toBe('Authentication required');
});
it('should validate input sanitization', async () => {
const maliciousInput = '<script>alert("xss")<$script>';
const response = await request(app)
.post('$api$users')
.send({ name: maliciousInput })
.set('Authorization', `Bearer ${validToken}`)
.expect(400);
expect(response.body.error).toContain('Invalid input');
});
it('should use HTTPS in production', () => {
if (process.env.NODE_ENV === 'production') {
expect(process.env.FORCE_HTTPS).toBe('true');
}
});
});// Validate deployment configuration
describe('Deployment Validation', () => {
it('should have proper health check endpoint', async () => {
const response = await request(app)
.get('$health')
.expect(200);
expect(response.body).toMatchObject({
status: 'healthy',
timestamp: expect.any(String),
uptime: expect.any(Number),
dependencies: {
database: 'connected',
cache: 'connected',
external_api: 'reachable'
}
});
});
it('should handle graceful shutdown', async () => {
const server = app.listen(0);
// Simulate shutdown signal
process.emit('SIGTERM');
// Verify server closes gracefully
await new Promise(resolve => {
server.close(resolve);
});
});
});Remember: The goal is to ensure that when the application reaches production, it works exactly as tested - no surprises, no mock implementations, no fake data dependencies.
© ruvnet, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/agent-production-validator of ruvnet/ruflo.
Open the folder on GitHubat commit 6051f67
We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in ruvnet/ruflo, which our catalogue first saw on October 7, 2026.
Agent Production Validator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Agent Production Validator this skillruvnet/ruflo | 74k | 2 repos | ~3k | Automated safety check: Pass | MIT | |
| Defuddlekepano/obsidian-skills | 49k | 12 repos | ~208 | Automated safety check: Pass | MIT | |
| Vercel Deploybytedance/deer-flow | 83k | 10 repos | ~797 | Automated safety check: Pass | MIT | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Knap Markdown Templateskepano/obsidian-skills | 49k | 2 repos | ~986 | Automated safety check: Pass | MIT | |
| Install Anti-Slop Oxlint Rulesdmmulroy/anti-slop | 5.3k | 1 repos | ~2.2k | Automated safety check: Pass | MIT |
kepano/obsidian-skills
Uses the Defuddle CLI to pull clean, readable Markdown, JSON or metadata from web pages, stripping navigation, ads and clutter to save tokens.
bytedance/deer-flow
Deploys a project to Vercel with one script and no login, then returns a live preview URL and a claim link for moving the deployment into your own Vercel account.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
kepano/obsidian-skills
Renders Markdown notes from Knap templates and JSON data on the command line, including notes built from Defuddle web page output.
dmmulroy/anti-slop
Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.
nomcopter/react-mosaic
Helps with running tasks in an Nx workspace. An agent skill from nomcopter/react-mosaic.
ruvnet/ruflo
Stores, searches, and retrieves successful patterns with HNSW-indexed semantic search so agents can reuse past solutions instead of relearning them.
ruvnet/ruflo
Runs claude-flow CLI security scans for input validation, path traversal, SQL injection, XSS, hardcoded secrets and known CVEs, and writes an audit report.
ruvnet/ruflo
Applies the SPARC method (specification, pseudocode, architecture, refinement, completion) with 17 specialized modes and multi-agent orchestration, from research to deployment.
ruvnet/ruflo
Coordinates a hierarchical swarm of specialized agents through the claude-flow CLI for work that spans several files or modules at once.
ruvnet/ruflo
Sets up and drives Ruflo, an npm-installed orchestration layer for multi-agent swarms, persistent memory, routing, hooks and its MCP tool catalog.
ruvnet/ruflo
Reference for spawning, listing, monitoring and stopping agents with claude-flow commands, with agent type families, routing codes and coordination tips.
Works with
Agent skill for production-validator - invoke with $agent-production-validator. Agent Production Validator is an agent skill from ruvnet/ruflo.
Run `npx skills add ruvnet/ruflo --skill agent-production-validator -a claude-code`. Or copy the skill folder (.agents/skills/agent-production-validator in ruvnet/ruflo) into .claude/skills/agent-production-validator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ruvnet/ruflo --skill agent-production-validator -a codex`. Or copy the skill folder (.agents/skills/agent-production-validator in ruvnet/ruflo) into .agents/skills/agent-production-validator in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ruvnet/ruflo --skill agent-production-validator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/agent-production-validator, .gemini/skills/agent-production-validator, .github/skills/agent-production-validator and .opencode/skills/agent-production-validator in your project.
Going by SKILL.md and its folder, Agent Production Validator needs credentials named STRIPE_TEST_KEY, REDIS_PASSWORD, API_KEY and JWT_SECRET. Our summary lists: A credential in STRIPE_TEST_KEY; A credential in API_KEY.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Agent Production Validator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Agent Production Validator: Defuddle (kepano/obsidian-skills, 49k stars), Vercel Deploy (bytedance/deer-flow, 83k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars) and Knap Markdown Templates (kepano/obsidian-skills, 49k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ruvnet (a GitHub user) maintains it in ruvnet/ruflo, which has 74,089 GitHub stars. The repository holds 264 skills in this directory. The repository was last updated on October 8, 2026.
Source: ruvnet/ruflo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.