Runtime Security logo

Runtime Security

Community
nitinjain999
runtime-security

Detect and respond to in-container threats at the syscall level using Falco (eBPF-based, CNCF, open-source, no license cost). Covers Falco installation on EKS/GKE with eBPF driver, custom rule authoring, alert routing via Falcosidekick, rule debugging, and bridging Falco runtime signals to Kyverno admission enforcement. Use when asked to "detect privilege escalation in containers", "set up runtime threat detection", "write a Falco rule", "route Falco alerts to Slack", or "debug why my Falco rule is not firing".

Overview

Publishernitinjain999
Repositoryplatform-skills
Skill nameruntime-security
Stars
71
Forks
14
Bundled files
Instructions only
LicenseApache-2.0
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 nitinjain999 on GitHub. Read the source before you install it.

Installation

Install the Runtime Security 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.
    https://github.com/nitinjain999/platform-skills/tree/main/plugins/platform-skills/skills/runtime-security
  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/nitinjain999/platform-skills.git /tmp/platform-skills
mkdir -p .claude/skills
cp -r /tmp/platform-skills/plugins/platform-skills/skills/runtime-security .claude/skills/runtime-security
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Runtime Security 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 Runtime Security 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 Runtime Security 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.

Detect and respond to threats inside running containers using Falco.


Interactive Wizard (fires when no arguments are provided)

When invoked with no arguments, ask before proceeding:

Q1 — Mode?

What do you need?
  1. install  — deploy Falco on Kubernetes (EKS or GKE) with eBPF driver
  2. rules    — write and test a custom Falco rule
  3. alerts   — configure Falcosidekick to route alerts (Slack, webhook, etc.)
  4. debug    — diagnose why a Falco rule is not firing
  5. harden   — map runtime Falco alerts to Kyverno admission policies

  Alerts on behaviour a container never showed while learning (profile-based,
  no rule writing), or Kubescape already runs → /platform-skills:kubescape-operator runtime

Enter 1–5 or mode name:

Before install, check for another eBPF agent: kubectl get ds -A | grep -iE 'node-agent|tetragon'. Kubescape's node-agent with runtimeDetection overlaps with Falco on the same nodes; pick one per node pool, or disable Kubescape's runtimeDetection and keep its posture and CVE capabilities.

Q2 — Context (after mode selected, one at a time):

  • install: Which cloud platform? EKS / GKE / other (specify node OS if known):
  • rules: Describe the behaviour to detect (e.g. "shell spawned in a container", "unexpected outbound connection"):
  • alerts: Which output destination? Slack / webhook / PagerDuty / other:
  • debug: Describe the symptom — which rule is not firing, and what event should trigger it?
  • harden: Which Falco alert or rule output should block re-admission? (paste the alert or rule name):

Then proceed into the relevant mode below.


Mode: install

Deploy Falco on Kubernetes (EKS or GKE) using the eBPF driver via Helm.

Prerequisites:

  • Helm 3.x
  • kubectl access to the target cluster
  • Node OS: Amazon Linux 2/2023 (EKS) or Container-Optimized OS (GKE) — both support eBPF

Steps:

  1. Add the Falco Helm repository:
    bash
    helm repo add falcosecurity https://falcosecurity.github.io/charts
    helm repo update
  2. Install Falco with eBPF driver (never kernel module on managed K8s):
    bash
    helm install falco falcosecurity/falco \
      --namespace falco \
      --create-namespace \
      -f examples/runtime-security/falco-values.yaml
  3. Verify DaemonSet is running on all nodes:
    bash
    kubectl rollout status daemonset/falco -n falco
    kubectl get pods -n falco -o wide
  4. Confirm Falco is receiving events:
    bash
    kubectl logs -n falco -l app.kubernetes.io/name=falco --tail=20
    Expected: lines like Notice A shell was spawned... (from the default ruleset test events)

EKS-specific note: if using Bottlerocket nodes, set driver.kind: modern_ebpf in Helm values — Bottlerocket does not ship kernel headers for the classic eBPF probe.

GKE-specific note: COS nodes require driver.kind: modern_ebpf. GKE Autopilot does not support Falco (no DaemonSet scheduling).

Mode: rules

Write and test custom Falco rules.

Steps:

  1. Explain the rule structure:
    yaml
    - rule: Shell spawned in container
      desc: A shell was spawned inside a container — potential interactive intrusion
      condition: >
        spawned_process
        and container
        and shell_procs
        and not container.image.repository in (allowed_shell_images)
      output: >
        Shell spawned in container
        (user=%user.name user_id=%user.uid
         container=%container.name image=%container.image.repository
         shell=%proc.name parent=%proc.pname cmdline=%proc.cmdline)
      priority: WARNING
      tags: [container, shell, mitre_execution]
  2. Key condition fields:
    • spawned_process — a new process was exec'd
    • container — event is inside a container (not on the host)
    • proc.name — process name
    • container.image.repository — image name without tag
    • fd.net — network file descriptor (for connection events)
  3. Test with falco-event-generator:
    bash
    kubectl run event-generator \
      --image=falcosecurity/event-generator \
      --restart=Never \
      --rm -it -- run syscall
    Then check logs: kubectl logs -n falco -l app.kubernetes.io/name=falco | grep WARNING
  4. Load custom rules via Helm values:
    yaml
    customRules:
      custom-rules.yaml: |-
        - rule: Shell spawned in container
          ...

Mode: alerts

Configure Falcosidekick to route Falco alerts to Slack, webhooks, or other outputs.

Steps:

  1. Install Falcosidekick alongside Falco:
    bash
    helm upgrade --install falco falcosecurity/falco \
      --namespace falco \
      --create-namespace \
      --set falcosidekick.enabled=true \
      --set falcosidekick.webui.enabled=true \
      -f examples/runtime-security/falcosidekick-values.yaml
  2. Configure Slack output in Falcosidekick values:
    yaml
    falcosidekick:
      config:
        slack:
          webhookurl: "https://hooks.slack.com/services/<token>"
          minimumpriority: warning
          messageformat: >
            Alert: *{{ .Rule }}* (Priority: {{ .Priority }})
            Container: `{{ index .OutputFields "container.name" }}`
            Image: `{{ index .OutputFields "container.image.repository" }}`
  3. Verify alerts are routing:
    bash
    kubectl port-forward -n falco svc/falco-falcosidekick-ui 2802:2802
    # Open http://localhost:2802 — events appear in the UI
  4. Deduplication: set slack.minimumpriority: warning to suppress DEBUG/INFO noise

Mode: debug

If you need deeper context on any Falco component, load references/runtime-security.md.

Diagnose why a Falco rule is not firing.

Checklist (work through in order):

  1. Is Falco running?
    bash
    kubectl get pods -n falco -o wide
    kubectl logs -n falco -l app.kubernetes.io/name=falco | tail -20
  2. Is the rule loaded?
    bash
    kubectl logs -n falco -l app.kubernetes.io/name=falco | grep -i "Loading rules"
    kubectl exec -n falco daemonset/falco -- cat /etc/falco/rules.d/custom-rules.yaml 2>/dev/null \
      || kubectl exec -n falco daemonset/falco -- ls /etc/falco/
  3. Is the condition correct? Test the event type:
    bash
    kubectl exec -n falco daemonset/falco -- falco --validate /etc/falco/rules.d/custom-rules.yaml
  4. Is the event being generated? Use event-generator for syscall rules:
    bash
    kubectl run test --image=falcosecurity/event-generator --rm -it -- run syscall
  5. Is the priority too low? If falcosidekick.config.slack.minimumpriority: error, rules with priority: WARNING are silently dropped. Adjust priority or threshold.
  6. Is there a macro override? Check if a built-in macro like never_true is shadowing your condition:
    bash
    kubectl exec -n falco daemonset/falco -- cat /etc/falco/falco_rules.yaml | grep -A3 "macro: <macro name>"
    kubectl exec -n falco daemonset/falco -- ls /etc/falco/rules.d/

Mode: harden

Map Falco runtime alerts to Kyverno admission policies to prevent redeployment of flagged workloads.

Steps:

  1. Explain the bridge pattern: Falco detects a runtime violation → alert metadata is added as a label/annotation to the offending Pod or Deployment → Kyverno admission policy blocks future admission of workloads with that label
  2. Label the offending workload (from an alert webhook handler or manual response):
    bash
    kubectl label deployment <name> -n <namespace> \
      security.platform/falco-alert=critical
  3. Apply the Kyverno policy to block re-admission:
    yaml
    apiVersion: policies.kyverno.io/v1
    kind: ValidatingPolicy
    metadata:
      name: block-falco-flagged-workloads
    spec:
      validationActions: [Deny]
      matchConstraints:
        resourceRules:
        - apiGroups: ["apps"]
          apiVersions: ["v1"]
          operations: ["CREATE", "UPDATE"]
          resources: ["deployments"]
      validations:
      - expression: >
          !has(object.metadata.labels) ||
          !('security.platform/falco-alert' in object.metadata.labels) ||
          object.metadata.labels['security.platform/falco-alert'] != 'critical'
        message: "Deployment is flagged by a Falco critical alert and cannot be re-admitted. Remove the flag after remediation."
  4. Important: Kyverno blocks new pod admissions only — it does not terminate existing running pods that violate the policy. After applying the policy, manually identify and terminate flagged pods:

bash
# Find pods matching the label that triggered the alert
kubectl get pods -n <namespace> -l <label-key>=<label-value>
# Terminate with grace period to allow in-flight requests to drain
kubectl delete pod <name> -n <namespace> --grace-period=30
  1. Remediation workflow: fix the workload → remove the label → re-admit

Recovery: If a Kyverno policy blocks a legitimate workload, remove the triggering label immediately:

bash
kubectl label deployment <name> -n <namespace> security.platform/falco-alert-

The workload will be re-admitted on next rollout. Fix the underlying security issue, then re-apply the label to re-admit under policy enforcement.


After completing this task, log errors and learnings via /platform-skills:self-improve log.

Frequently asked questions

What does the Runtime Security AI skill do?

Detect and respond to in-container threats at the syscall level using Falco (eBPF-based, CNCF, open-source, no license cost). Covers Falco installation on EKS/GKE with eBPF driver, custom rule authoring, alert routing via Falcosidekick, rule debugging, and bridging Falco runtime signals to Kyverno admission enforcement. Use when asked to "detect privilege escalation in containers", "set up runtime threat detection", "write a Falco rule", "route Falco alerts to Slack", or "debug why my Falco rule is not firing".

Why use Runtime Security on TypingMind?

Because you install it once and use it with any model. Runtime Security 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 Runtime Security in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/nitinjain999/platform-skills/tree/main/plugins/platform-skills/skills/runtime-security. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Runtime Security?

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 Runtime Security?

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

Is the Runtime Security AI skill free?

Yes. It is published on GitHub by nitinjain999 under the Apache-2.0 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 👇