MCPInstall

agent-security-manager

Agent skill for security-manager - invoke with $agent-security-manager

Installs
1.1K
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/ruvnet/ruflo --skill agent-security-manager
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads agent-security-manager automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.


name: security-manager type: security color: "#F44336" description: Implements comprehensive security mechanisms for distributed consensus protocols capabilities:

  • cryptographic_security
  • attack_detection
  • key_management
  • secure_communication
  • threat_mitigation priority: critical hooks: pre: | echo "🔐 Security Manager securing: $TASK"

    Initialize security protocols

    if [[ "$TASK" == "consensus" ]]; then echo "🛡️ Activating cryptographic verification" fi post: | echo "✅ Security protocols verified"

    Run security audit

    echo "🔍 Conducting post-operation security audit"

Consensus Security Manager

Implements comprehensive security mechanisms for distributed consensus protocols with advanced threat detection.

Core Responsibilities

  1. Cryptographic Infrastructure: Deploy threshold cryptography and zero-knowledge proofs
  2. Attack Detection: Identify Byzantine, Sybil, Eclipse, and DoS attacks
  3. Key Management: Handle distributed key generation and rotation protocols
  4. Secure Communications: Ensure TLS 1.3 encryption and message authentication
  5. Threat Mitigation: Implement real-time security countermeasures

Technical Implementation

Threshold Signature System

class ThresholdSignatureSystem {
  constructor(threshold, totalParties, curveType = 'secp256k1') {
    this.t = threshold; // Minimum signatures required
    this.n = totalParties; // Total number of parties
    this.curve = this.initializeCurve(curveType);
    this.masterPublicKey = null;
    this.privateKeyShares = new Map();
    this.publicKeyShares = new Map();
    this.polynomial = null;
  }

  // Distributed Key Generation (DKG) Protocol
  async generateDistributedKeys() {
    // Phase 1: Each party generates secret polynomial
    const secretPolynomial = this.generateSecretPolynomial();
    const commitments = this.generateCommitments(secretPolynomial);
    
    // Phase 2: Broadcast commitments
    await this.broadcastCommitments(commitments);
    
    // Phase 3: Share secret values
    const secretShares = this.generateSecretShares(secretPolynomial);
    await this.distributeSecretShares(secretShares);
    
    // Phase 4: Verify received shares
    const validShares = await this.verifyReceivedShares();
    
    // Phase 5: Combine to create master keys
    this.masterPublicKey = this.combineMasterPublicKey(validShares);
    
    return {
      masterPublicKey: this.masterPublicKey,
      privateKeyShare: this.privateKeyShares.get(this.nodeId),
      publicKeyShares: this.publicKeyShares
    };
  }

  // Threshold Signature Creation
  async createThresholdSignature(message, signatories) {
    if (signatories.length < this.t) {
      throw new Error('Insufficient signatories for threshold');
    }

    const partialSignatures = [];
    
    // Each signatory creates partial signature
    for (const signatory of signatories) {
      const partialSig = await this.createPartialSignature(message, signatory);
      partialSignatures.push({
        signatory: signatory,
        signature: partialSig,
        publicKeyShare: this.publicKeyShares.get(signatory)
      });
    }

    // Verify partial signatures
    const validPartials = partialSignatures.filter(ps => 
      this.verifyPartialSignature(message, ps.signature, ps.publicKeyShare)
    );

    if (validPartials.length < this.t) {
      throw new Error('Insufficient valid partial signatures');
    }

    // Combine partial signatures using Lagrange interpolation
    return this.combinePartialSignatures(message, validPartials.slice(0, this.t));
  }

  // Signature Verification
  verifyThresholdSignature(message, signature) {
    return this.curve.verify(message, signature, this.masterPublicKey);
  }

  // Lagrange Interpolation for Signature Combination
  combinePartialSignatures(message, partialSignatures) {
    const lambda = this.computeLagrangeCoefficients(
      partialSignatures.map(ps => ps.signatory)
    );

    let combinedSignature = this.curve.infinity();
    
    for (let i = 0; i < partialSignatures.length; i++) {
      const weighted = this.curve.multiply(
        partialSignatures[i].signature,
        lambda[i]
      );
      combinedSignature = this.curve.add(combinedSignature, weighted);
    }

    return combinedSignature;
  }
}

Zero-Knowledge Proof System

class ZeroKnowledgeProofSystem {
  constructor() {
    this.curve = new EllipticCurve('secp256k1');
    this.hashFunction = 'sha256';
    this.proofCache = new Map();
  }

  // Prove knowledge of discrete logarithm (Schnorr proof)
  async proveDiscreteLog(secret, publicKey, challenge = null) {
    // Generate random nonce
    const nonce = this.generateSecureRandom();
    const commitment = this.curve.multiply(this.curve.generator, nonce);
    
    // Use provided challenge or generate Fiat-Shamir challenge
    const c = challenge || this.generateChallenge(commitment, publicKey);
    
    // Compute response
    const response = (nonce + c * secret) % this.curve.order;
    
    return {
      commitment: commitment,
      challenge: c,
      response: response
    };
  }

  // Verify discrete logarithm proof
  verifyDiscreteLogProof(proof, publicKey) {
    const { commitment, challenge, response } = proof;
    
    // Verify: g^response = commitment * publicKey^challenge
    const leftSide = this.curve.multiply(this.curve.generator, response);
    const rightSide = this.curve.add(
      commitment,
      this.curve.multiply(publicKey, challenge)
    );
    
    return this.curve.equals(leftSide, rightSide);
  }

  // Range proof for committed values
  async proveRange(value, commitment, min, max) {
    if (value < min || value > max) {
      throw new Error('Value outside specified range');
    }

    const bitLength = Math.ceil(Math.log2(max - min + 1));
    const bits = this.valueToBits(value - min, bitLength);
    
    const proofs = [];
    let currentCommitment = commitment;
    
    // Create proof for each bit
    for (let i = 0; i < bitLength; i++) {
      const bitProof = await this.proveBit(bits[i], currentCommitment);
      proofs.push(bitProof);
      
      // Update commitment for next bit
      currentCommitment = this.updateCommitmentForNextBit(currentCommitment, bits[i]);
    }
    
    return {
      bitProofs: proofs,
      range: { min, max },
      bitLength: bitLength
    };
  }

  // Bulletproof implementation for range proofs
  async createBulletproof(value, commitment, range) {
    const n = Math.ceil(Math.log2(range));
    const generators = this.generateBulletproofGenerators(n);
    
    // Inner product argument
    const innerProductProof = await this.createInnerProductProof(
      value, commitment, generators
    );
    
    return {
      type: 'bulletproof',
      commitment: commitment,
      proof: innerProductProof,
      generators: generators,
      range: range
    };
  }
}

Attack Detection System

class ConsensusSecurityMonitor {
  constructor() {
    this.attackDetectors = new Map();
    this.behaviorAnalyzer = new BehaviorAnalyzer();
    this.reputationSystem = new ReputationSystem();
    this.alertSystem = new SecurityAlertSystem();
    this.forensicLogger = new ForensicLogger();
  }

  // Byzantine Attack Detection
  async detectByzantineAttacks(consensusRound) {
    const participants = consensusRound.participants;
    const messages = consensusRound.messages;
    
    const anomalies = [];
    
    // Detect contradictory messages from same node
    const contradictions = this.detectContradictoryMessages(messages);
    if (contradictions.length > 0) {
      anomalies.push({
        type: 'CONTRADICTORY_MESSAGES',
        severity: 'HIGH',
        details: contradictions
      });
    }
    
    // Detect timing-based attacks
    const timingAnomalies = this.detectTimingAnomalies(messages);
    if (timingAnomalies.length > 0) {
      anomalies.push({
        type: 'TIMING_ATTACK',
        severity: 'MEDIUM',
        details: timingAnomalies
      });
    }
    
    // Detect collusion patterns
    const collusionPatterns = await this.detectCollusion(participants, messages);
    if (collusionPatterns.length > 0) {
      anomalies.push({
        type: 'COLLUSION_DETECTED',
        severity: 'HIGH',
        details: collusionPatterns
      });
    }
    
    // Update reputation scores
    for (const participant of participants) {
      await this.reputationSystem.updateReputation(
        participant,
        anomalies.filter(a => a.details.includes(participant))
      );
    }
    
    return anomalies;
  }

  // Sybil Attack Prevention
  async preventSybilAttacks(nodeJoinRequest) {
    const identityVerifiers = [
      this.verifyProofOfWork(nodeJoinRequest),
      this.verifyStakeProof(nodeJoinRequest),
      this.verifyIdentityCredentials(nodeJoinRequest),
      this.checkReputationHistory(nodeJoinRequest)
    ];
    
    const verificationResults = await Promise.all(identityVerifiers);
    const passedVerifications = verificationResults.filter(r => r.valid);
    
    // Require multiple verification methods
    const requiredVerifications = 2;
    if (passedVerifications.length < requiredVerifications) {
      throw new SecurityError('Insufficient identity verification for node join');
    }
    
    // Additional checks for suspicious patterns
    const suspiciousPatterns = await this.detectSybilPatterns(nodeJoinRequest);
    if (suspiciousPatterns.length > 0) {
      await this.alertSystem.raiseSybilAlert(nodeJoinRequest, suspiciousPatterns);
      throw new SecurityError('Potential Sybil attack detected');
    }
    
    return true;
  }

  // Eclipse Attack Protection
  async protectAgainstEclipseAttacks(nodeId, connectionRequests) {
    const diversityMetrics = this.analyzePeerDiversity(connectionRequests);
    
    // Check for geographic diversity
    if (diversityMetrics.geographicEntropy < 2.0) {
      await this.enforceGeographicDiversity(nodeId, connectionRequests);
    }
    
    // Check for network diversity (ASNs)
    if (diversityMetrics.networkEntropy < 1.5) {
      await this.enforceNetworkDiversity(nodeId, connectionRequests);
    }
    
    // Limit connections from single source
    const maxConnectionsPerSource = 3;
    const groupedConnections = this.groupConnectionsBySource(connectionRequests);
    
    for (const [source, connections] of groupedConnections) {
      if (connections.length > maxConnectionsPerSource) {
        await this.alertSystem.raiseEclipseAlert(nodeId, source, connections);
        // Randomly select subset of connections
        const allowedConnections = this.randomlySelectConnections(
          connections, maxConnectionsPerSource
        );
        this.blockExcessConnections(
          connections.filter(c => !allowedConnections.includes(c))
        );
      }
    }
  }

  // DoS Attack Mitigation
  async mitigateDoSAttacks(incomingRequests) {
    const rateLimiter = new AdaptiveRateLimiter();
    const requestAnalyzer = new RequestPatternAnalyzer();
    
    // Analyze request patterns for anomalies
    const anomalousRequests = await requestAnalyzer.detectAnomalies(incomingRequests);
    
    if (anomalousRequests.length > 0) {
      // Implement progressive response strategies
      const mitigationStrategies = [
        this.applyRateLimiting(anomalousRequests),
        this.implementPriorityQueuing(incomingRequests),
        this.activateCircuitBreakers(anomalousRequests),
        this.deployTemporaryBlacklisting(anomalousRequests)
      ];
      
      await Promise.all(mitigationStrategies);
    }
    
    return this.filterLegitimateRequests(incomingRequests, anomalousRequests);
  }
}

Secure Key Management

class SecureKeyManager {
  constructor() {
    this.keyStore = new EncryptedKeyStore();
    this.rotationScheduler = new KeyRotationScheduler();
    this.distributionProtocol = new SecureDistributionProtocol();
    this.backupSystem = new SecureBackupSystem();
  }

  // Distributed Key Generation
  async generateDistributedKey(participants, threshold) {
    const dkgProtocol = new DistributedKeyGeneration(threshold, participants.length);
    
    // Phase 1: Initialize DKG ceremony
    const ceremony = await dkgProtocol.initializeCeremony(participants);
    
    // Phase 2: Each participant contributes randomness
    const contributions = await this.collectContributions(participants, ceremony);
    
    // Phase 3: Verify contributions
    const validContributions = await this.verifyContributions(contributions);
    
    // Phase 4: Combine contributions to generate master key
    const masterKey = await dkgProtocol.combineMasterKey(validContributions);
    
    // Phase 5: Generate and distribute key shares
    const keyShares = await dkgProtocol.generateKeyShares(masterKey, participants);
    
    // Phase 6: Secure distribution of key shares
    await this.securelyDistributeShares(keyShares, participants);
    
    return {
      masterPublicKey: masterKey.publicKey,
      ceremony: ceremony,
      participants: participants
    };
  }

  // Key Rotation Protocol
  async rotateKeys(currentKeyId, participants) {
    // Generate new key using proactive secret sharing
    const newKey = await this.generateDistributedKey(participants, Math.floor(participants.length / 2) + 1);
    
    // Create transition period where both keys are valid
    const transitionPeriod = 24 * 60 * 60 * 1000; // 24 hours
    await this.scheduleKeyTransition(currentKeyId, newKey.masterPublicKey, transitionPeriod);
    
    // Notify all participants about key rotation
    await this.notifyKeyRotation(participants, newKey);
    
    // Gradually phase out old key
    setTimeout(async () => {
      await this.deactivateKey(currentKeyId);
    }, transitionPeriod);
    
    return newKey;
  }

  // Secure Key Backup and Recovery
  async backupKeyShares(keyShares, backupThreshold) {
    const backupShares = this.createBackupShares(keyShares, backupThreshold);
    
    // Encrypt backup shares with different passwords
    const encryptedBackups = await Promise.all(
      backupShares.map(async (share, index) => ({
        id: `backup_${index}`,
        encryptedShare: await this.encryptBackupShare(share, `password_${index}`),
        checksum: this.computeChecksum(share)
      }))
    );
    
    // Distribute backups to secure locations
    await this.distributeBackups(encryptedBackups);
    
    return encryptedBackups.map(backup => ({
      id: backup.id,
      checksum: backup.checksum
    }));
  }

  async recoverFromBackup(backupIds, passwords) {
    const backupShares = [];
    
    // Retrieve and decrypt backup shares
    for (let i = 0; i < backupIds.length; i++) {
      const encryptedBackup = await this.retrieveBackup(backupIds[i]);
      const decryptedShare = await this.decryptBackupShare(
        encryptedBackup.encryptedShare,
        passwords[i]
      );
      
      // Verify integrity
      const checksum = this.computeChecksum(decryptedShare);
      if (checksum !== encryptedBackup.checksum) {
        throw new Error(`Backup integrity check failed for ${backupIds[i]}`);
      }
      
      backupShares.push(decryptedShare);
    }
    
    // Reconstruct original key from backup shares
    return this.reconstructKeyFromBackup(backupShares);
  }
}

MCP Integration Hooks

Security Monitoring Integration

// Store security metrics in memory
await this.mcpTools.memory_usage({
  action: 'store',
  key: `security_metrics_${Date.now()}`,
  value: JSON.stringify({
    attacksDetected: this.attacksDetected,
    reputationScores: Array.from(this.reputationSystem.scores.entries()),
    keyRotationEvents: this.keyRotationHistory
  }),
  namespace: 'consensus_security',
  ttl: 86400000 // 24 hours
});

// Performance monitoring for security operations
await this.mcpTools.metrics_collect({
  components: [
    'signature_verification_time',
    'zkp_generation_time',
    'attack_detection_latency',
    'key_rotation_overhead'
  ]
});

Neural Pattern Learning for Security

// Learn attack patterns
await this.mcpTools.neural_patterns({
  action: 'learn',
  operation: 'attack_pattern_recognition',
  outcome: JSON.stringify({
    attackType: detectedAttack.type,
    patterns: detectedAttack.patterns,
    mitigation: appliedMitigation
  })
});

// Predict potential security threats
const threatPrediction = await this.mcpTools.neural_predict({
  modelId: 'security_threat_model',
  input: JSON.stringify(currentSecurityMetrics)
});

Integration with Consensus Protocols

Byzantine Consensus Security

class ByzantineConsensusSecurityWrapper {
  constructor(byzantineCoordinator, securityManager) {
    this.consensus = byzantineCoordinator;
    this.security = securityManager;
  }

  async secureConsensusRound(proposal) {
    // Pre-consensus security checks
    await this.security.validateProposal(proposal);
    
    // Execute consensus with security monitoring
    const result = await this.executeSecureConsensus(proposal);
    
    // Post-consensus security analysis
    await this.security.analyzeConsensusRound(result);
    
    return result;
  }

  async executeSecureConsensus(proposal) {
    // Sign proposal with threshold signature
    const signedProposal = await this.security.thresholdSignature.sign(proposal);
    
    // Monitor consensus execution for attacks
    const monitor = this.security.startConsensusMonitoring();
    
    try {
      // Execute Byzantine consensus
      const result = await this.consensus.initiateConsensus(signedProposal);
      
      // Verify result integrity
      await this.security.verifyConsensusResult(result);
      
      return result;
    } finally {
      monitor.stop();
    }
  }
}

Security Testing and Validation

Penetration Testing Framework

class ConsensusPenetrationTester {
  constructor(securityManager) {
    this.security = securityManager;
    this.testScenarios = new Map();
    this.vulnerabilityDatabase = new VulnerabilityDatabase();
  }

  async runSecurityTests() {
    const testResults = [];
    
    // Test 1: Byzantine attack simulation
    testResults.push(await this.testByzantineAttack());
    
    // Test 2: Sybil attack simulation
    testResults.push(await this.testSybilAttack());
    
    // Test 3: Eclipse attack simulation
    testResults.push(await this.testEclipseAttack());
    
    // Test 4: DoS attack simulation
    testResults.push(await this.testDoSAttack());
    
    // Test 5: Cryptographic security tests
    testResults.push(await this.testCryptographicSecurity());
    
    return this.generateSecurityReport(testResults);
  }

  async testByzantineAttack() {
    // Simulate malicious nodes sending contradictory messages
    const maliciousNodes = this.createMaliciousNodes(3);
    const attack = new ByzantineAttackSimulator(maliciousNodes);
    
    const startTime = Date.now();
    const detectionTime = await this.security.detectByzantineAttacks(attack.execute());
    const endTime = Date.now();
    
    return {
      test: 'Byzantine Attack',
      detected: detectionTime !== null,
      detectionLatency: detectionTime ? endTime - startTime : null,
      mitigation: await this.security.mitigateByzantineAttack(attack)
    };
  }
}

This security manager provides comprehensive protection for distributed consensus protocols with enterprise-grade cryptographic security, advanced threat detection, and robust key management capabilities.

FAQ

What does the agent-security-manager skill do?

Agent skill for security-manager - invoke with $agent-security-manager

How do I install agent-security-manager?

Run npx skills add https://github.com/ruvnet/ruflo --skill agent-security-manager in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/agent-security-manager/ (personal) or .claude/skills/agent-security-manager/ (project).

Which AI agents can use agent-security-manager?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is agent-security-manager safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains agent-security-manager?

It is published by ruvnet in ruvnet/ruflo. It has 1,125 recorded installs.

More from ruvnet/ruflo

View all →

ruflo

ruvnet/ruflo

Open the skill to read its SKILL.md instructions.

4K installs

Multi-agent swarm coordination for complex tasks. Uses hierarchical topology with specialized agents to break down and execute complex work across multiple files and modules. Use when: 3+ files need changes, new feature implementation, cross-module refactoring, API changes with tests, security-related changes, performance optimization across codebase, database schema changes. Skip when: single file edits, simple bug fixes (1-2 lines), documentation updates, configuration changes, quick exploration.

Agent skill for arch-system-design - invoke with $agent-arch-system-design

1.4K installs

agent-workflow

ruvnet/ruflo

Agent skill for workflow - invoke with $agent-workflow

security-audit

ruvnet/ruflo

Comprehensive security scanning and vulnerability detection. Includes input validation, path traversal prevention, CVE detection, and secure coding pattern enforcement. Use when: authentication implementation, authorization logic, payment processing, user data handling, API endpoint creation, file upload handling, database queries, external API integration. Skip when: read-only operations on public data, internal development tooling, static documentation, styling changes.

Security1.4K installs

Comprehensive GitHub project management with swarm-coordinated issue tracking, project board automation, and sprint planning

Popular security skills

View category →

azure-compliance

microsoft/azure-skills

Run Azure compliance and security audits with azqr plus Key Vault expiration checks. Covers best-practice assessment, resource review, policy/compliance validation, and security posture checks. WHEN: compliance scan, security audit, BEFORE running azqr (compliance cli tool), Azure best practices, Key Vault expiration check, expired certificates, expiring secrets, orphaned resources, compliance assessment.

OfficialSecurity567K installs

minimal-run-and-audit

lllllllama/rigorpilot-skills

Rigor Run skill for README-first deep learning repo reproduction. Use when the task is specifically to capture or normalize evidence from the selected smoke test or documented inference or evaluation command and write standardized reprooutputs/ files, including patch notes when repository files changed. Do not use for training execution, initial repo intake, generic environment setup, paper lookup, target selection, hidden scientific-meaning changes, or end-to-end orchestration by itself.

Security477.4K installs

seo-audit

coreyhaines31/marketingskills

When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions "SEO audit," "technical SEO," "why am I not ranking," "SEO issues," "on-page SEO," "meta tags review," "SEO health check," "my traffic dropped," "lost rankings," "not showing up in Google," "site isn't ranking," "Google update hit me," "page speed," "core web vitals," "crawl errors," "indexing issues," "stuck on page 2," "striking distance keywords," "title tag rewrite," "low CTR," "local SEO," "Google Business Profile," or "map pack." Use this even if the user just says something vague like "my SEO is bad" or "help with SEO" — start with an audit. For building pages at scale to target keywords, see programmatic-seo. For adding structured data, see schema. For AI search optimization, see ai-seo.

Security238.7K installs

firebase-security-rules-auditor

firebase/agent-skills

Audits Firebase (Firestore, Cloud Storage) security rules for vulnerabilities, privilege escalation, role bypasses, create vs update inconsistencies, resource exhaustion, type safety, size limits, and hasOnly ownership checks. Use when auditing/reviewing rules, running red-team rule assessments, or scoring against auditor checklists. Don't use for Firebase CLI (login, deploy), Auth, Crashlytics, Remote Config, or database queries.

OfficialSecurity139.1K installs

audit

pbakaus/impeccable

Run technical quality checks across accessibility, performance, theming, responsive design, and anti-patterns. Generates a scored report with P0-P3 severity ratings and actionable plan. Use when the user wants an accessibility check, performance audit, or technical quality review.

Security81.9K installs

competitors

coreyhaines31/marketingskills

When the user wants to create competitor comparison or alternative pages for SEO and buyer-facing use. Also use when the user mentions 'alternative page,' 'vs page,' 'competitor comparison,' 'comparison page,' '[Product] vs [Product],' '[Product] alternative,' 'competitive landing pages,' 'how do we compare to X,' 'competitor teardown,' 'audit our competitor pages,' 'are our comparison pages out of date,' or 'competitive asset audit.' Use this for any content that positions your product against competitors. Covers four formats: singular alternative, plural alternatives, you vs competitor, and competitor vs competitor. For auditing existing claims (not researching competitors from scratch, which is competitor-profiling; not technical SEO on these pages, which is seo-audit), use the asset audit here. For internal battle cards and sales-specific competitor docs, see sales-enablement.

Security79.3K installs