Orca Custom Framework logo

Orca Custom Framework

Organization
orcasecurity
orca-custom-framework

Creates custom compliance frameworks from existing frameworks, alert lists, or security themes — organizes controls into sections, maps alerts, and pushes the framework to Orca. Suggests creating custom discovery alerts for gaps not covered by existing rules. Use when user asks to create, build, or generate a custom compliance framework.

Overview

Publisherorcasecurity
Repositoryorca-skills
Skill nameorca-custom-framework
Stars
56
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 orcasecurity on GitHub. Read the source before you install it.

Installation

Install the Orca Custom Framework 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/orcasecurity/orca-skills/tree/main/skills/orca-custom-framework
  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/orcasecurity/orca-skills.git /tmp/orca-skills
mkdir -p .claude/skills
cp -r /tmp/orca-skills/skills/orca-custom-framework .claude/skills/orca-custom-framework
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Orca Custom Framework 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 Orca Custom Framework 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 Orca Custom Framework 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.

Orca Custom Framework Skill

Answers the question: "How do I create a custom compliance framework tailored to my organization's specific security requirements?"

Given a source (existing framework, list of alert IDs, or a security theme), this skill gathers relevant controls and alerts, organizes them into a structured custom compliance framework with logical sections, and creates it in Orca Security. When gaps exist — controls the user wants but Orca doesn't have a built-in rule for — the skill suggests creating custom discovery alerts to fill them.

Usage

/orca-custom-framework Supply Chain Security Controls
/orca-custom-framework from:cis_docker_v.1.3.1
/orca-custom-framework alerts:orca-1234,orca-5678,orca-9012
/orca-custom-framework "Zero Trust Architecture"

Or natural language:

  • "create a custom compliance framework for supply chain security"
  • "build a framework based on CIS Docker + EKS controls"
  • "generate a custom framework from these alerts: orca-1234, orca-5678"
  • "create a supply chain security framework"
  • "build custom compliance from our failing container controls"

How It Works

The skill operates in three phases, using different tools at each stage:

Phase 1: Read (Orca MCP tools — read-only)

Queries the Orca environment to gather existing controls and alerts:

  • get_enabled_compliance_frameworks — lists all frameworks and their IDs
  • get_compliance_framework_control_tests — pulls controls from relevant source frameworks, each containing a rule_id
  • discovery_search — finds alerts matching the theme (e.g., "container registry", "image scanning")
  • get_alert — gets full alert details when working from alert IDs

These are read-only MCP queries. They provide the rule_id values needed for the framework.

Phase 2: Organize (assistant logic — no API calls)

Groups the gathered rule_id values into logical sections based on alert categories, asset types, and the requested theme. Assigns priority weights (high/medium/low) and dotted-notation IDs (e.g., 1.1, 2.3).

Also identifies gaps — security domains the user wants covered but where no existing Orca rule exists. For these, suggests creating custom discovery alerts (see Step 7).

Phase 3: Create (Orca REST API — via curl)

There is no MCP tool for creating custom frameworks. The skill calls the Orca REST API directly:

POST https://api.orcasecurity.io/api/compliance/frameworks
Authorization: <token from .mcp.json>

The token is extracted from .mcp.json (orca-security.headers.Authorization).

Processing Logic

Step 1: Determine Input Mode

Parse user input to determine the source:

  • Theme/Topic mode: User provides a theme (e.g., "Supply Chain Security", "Zero Trust", "Data Protection Baseline") → search across multiple existing frameworks for relevant controls
  • From-framework mode: User says "from:cis_docker_v.1.3.1" or "based on CIS Docker" → query that framework's controls and adapt/subset them
  • Alert-list mode: User provides alert IDs → query each alert and organize into controls/sections
  • Hybrid mode: User provides a theme + reference framework → combine both sources

Step 2: Gather Source Data (run queries in parallel based on mode)

Theme Mode — run ALL in parallel:

Query 1-5: Discovery searches with different angles

discovery_search:
  search_phrase: "<theme> security alerts"
  limit: 10

Run 5+ searches with different angle terms simultaneously to maximize coverage. Vary the search terms across the theme's domains (infrastructure, IAM, data, network, logging).

Query 6: All enabled frameworks

get_enabled_compliance_frameworks:
  (no filters)

Query 7+: Control tests from relevant frameworks For each framework that relates to the theme, pull all controls:

get_compliance_framework_control_tests:
  framework_id: <id>

Identify which existing frameworks are most relevant to the theme and pull their controls. For example, a container-focused theme would query cis_docker_v.1.3.1 and cis_eks_1.5.0, while an IAM-focused theme would query aws_cis_6.0.0 and orca_best_practices_2.0.0.

From-Framework Mode — run in parallel:
get_enabled_compliance_frameworks → get framework IDs
get_compliance_framework_control_tests → pull source controls
get_framework_assets_with_failed_controls_count → context on impact
Alert-List Mode — run in parallel:
get_alert → for each alert ID, extract rule_id and metadata
get_enabled_compliance_frameworks → for cross-referencing

Step 3: Extract rule_ids and Organize into Sections

CRITICAL: The Orca custom framework API requires rule_id values (internal Orca rule identifiers like r40aa617ef4), NOT alert IDs. Extract rule_ids from:

  1. From framework control tests: Each test returned by get_compliance_framework_control_tests has a rule_id field — use these directly. This is the primary and most reliable method.
  2. From alerts: Each Orca alert has a RuleId field in its data — query with get_alert and extract it.
  3. From discovery_search: Results may reference rules — extract rule IDs from the returned data.
Section Generation

Group controls into logical sections using alert categories, asset types, and domain keywords. Adapt sections to the user's theme — the section names, groupings, and keyword mappings should all reflect what the user asked for.

Default section taxonomy (adapt based on theme):

SectionMaps to Alert CategoriesExample Controls
Identity & Access ManagementIAM, permissions, roles, service accountsLeast-privilege, MFA enforcement, key rotation
Compute SecurityVMs, instances, containers, serverlessInstance hardening, patching, secure boot
Network SecurityVPC, firewalls, endpoints, load balancersNetwork segmentation, TLS enforcement, ingress rules
Data ProtectionStorage, databases, encryption, secretsEncryption at rest, key management, data classification
Logging & MonitoringAudit logs, alerts, metricsAudit trail completeness, log retention
Vulnerability ManagementCVEs, packages, imagesPatch management, image scanning, dependency updates
Configuration ManagementMisconfigurations, best practicesSecure defaults, hardened configurations

Use the alert category, description, and asset_types fields from control tests to assign each rule_id to the appropriate section. When the user's theme implies specialized sections (e.g., "Container Image Security" for supply chain, "Training Infrastructure" for AI/ML), create those instead of the generic defaults.

Step 4: Present Framework Preview

ALWAYS show a preview before creating. Display the framework structure, control counts, priority breakdown, and source frameworks.

Step 5: Create Custom Framework via REST API

Only proceed after user confirms the preview.

API Endpoint

Create: POST /api/compliance/frameworks Update: PUT /api/compliance/frameworks/{id} Delete: DELETE /api/compliance/frameworks/{id}

Request Body
json
{
  "name": "<framework_name>",
  "description": "<framework_description>",
  "checkedKeys": [],
  "sections": [
    {
      "name": "1. <Section Name>",
      "section_id_in_framework": "1",
      "tests": [
        {
          "rule_id": "<orca_rule_id>",
          "rule_id_in_framework": "1.1",
          "reference_id": "1.1",
          "origin_framework_id": "<source_framework_id>",
          "priority": "high"
        }
      ],
      "sections": []
    }
  ]
}

Field reference:

  • rule_id (required) — Orca internal rule ID, NOT an alert ID
  • rule_id_in_framework (required) — Dotted control number (e.g., "1.1", "3.4")
  • reference_id (optional) — Typically same as rule_id_in_framework
  • origin_framework_id (optional) — Source framework ID for traceability
  • priority (optional) — "high" / "medium" / "low" — affects framework scoring weight
  • section_id_in_framework (optional) — Dotted section number
  • sections can be nested recursively for hierarchical frameworks
  • checkedKeys — pass [] for API-created frameworks
Execution
bash
curl -X POST "https://api.orcasecurity.io/api/compliance/frameworks" \
  -H "Authorization: <token>" \
  -H "Content-Type: application/json" \
  -d '<json_body>'

Response: {"data": {"id": <framework_id>, "name": "<framework_name>", ...}}

Important Notes
  • Sections are write-only — GET responses return tests as a flat list, not the section hierarchy
  • Priority affects scoring — "high" priority controls impact the overall score more heavily
  • Show preview and get explicit user confirmation before creating
  • Extract the auth token from .mcp.json (orca-security.headers.Authorization)

Step 6: Post-Creation Validation

Query get_enabled_compliance_frameworks to verify the framework appears. Show the user:

  • Framework ID and name
  • Initial compliance score
  • Number of controls mapped
  • Suggest next steps: /orca-compliance-gap <framework_name>

Step 7: Suggest Custom Alerts for Coverage Gaps

After organizing controls, identify security domains the user wants covered but where no existing Orca rule exists. For these gaps, suggest creating custom discovery alerts.

When to Suggest
  • The user's theme includes a domain (e.g., "SBOM validation", "code signing verification") but no matching rule_id was found in any framework
  • The coverage map shows unmapped areas
  • The user explicitly asks for more controls
How to Suggest

Present the gap and offer to create a custom discovery alert:

GAP DETECTED: No existing Orca rule for "SBOM generation validation"

You can fill this gap by creating a custom discovery alert:
  POST /api/sonar/rules

  {
    "name": "Container image deployed without SBOM attestation",
    "details": "Detects container images in production registries that lack
                an associated SBOM attestation or provenance record.",
    "category": "Best practices",
    "orca_score": 6.0,
    "context_score": false,
    "rule_json": {
      "models": ["ContainerImage"],
      "type": "object_set",
      "with": { ... discovery query ... }
    },
    "compliance_frameworks": [
      {
        "compliance_framework": "<framework_name>",
        "category": "5. Build Pipeline & Artifact Integrity",
        "priority": "high"
      }
    ]
  }

This creates a custom alert AND automatically maps it to the framework.
Want me to create this custom alert?
Custom Discovery Alert API Reference
MethodEndpointPurpose
POST/api/sonar/rulesCreate custom alert rule
GET/api/sonar/rules/{rule_id}Read alert rule
PUT/api/sonar/rules/{rule_id}Update alert rule
DELETE/api/sonar/rules/{rule_id}Delete alert rule
GET/api/alerts/catalog/categoryList available alert categories

Key fields:

  • name — Alert title
  • details — Description (note: API uses details, not description)
  • category — From /api/alerts/catalog/category (e.g., "Best practices", "Network misconfigurations")
  • orca_score — Severity score (float, e.g., 6.0)
  • rule_json — Discovery query in Orca sonar DSL (object_set with models, keys, operators)
  • compliance_frameworks[] — Auto-map to framework sections:
    • compliance_framework — Framework name (must match exactly)
    • category — Section name within the framework
    • priority — "high" / "medium" / "low"

The response returns a rule_id which can then be added to the custom framework via PUT /api/compliance/frameworks/{id}.

Example: Supply Chain Security Controls

This example was tested live and created as framework ID 3104 with a 28% initial score.

Input: "create a custom compliance framework for supply chain security"

Source frameworks queried:

  • cis_docker_v.1.3.1 — Container/Docker controls
  • cis_eks_1.5.0 — Kubernetes/EKS controls
  • stig_k8s — Kubernetes STIG controls
  • aws_cis_6.0.0 — AWS infrastructure controls
  • aws_foundational_security_best_practices — AWS security baselines

Result: 39 controls across 6 sections:

SectionControlsSource
1. Container Image & Registry Security6CIS Docker, EKS, K8s STIG
2. Container Runtime Protection8CIS Docker, EKS
3. Kubernetes Admission & Policy Controls8K8s STIG, EKS
4. Secrets & Credential Management7EKS, AWS Foundational, AWS CIS
5. Build Pipeline & Artifact Integrity4AWS Foundational, EKS, AWS CIS
6. Audit Logging & Monitoring6CIS Docker, K8s STIG, EKS

Coverage gaps identified (candidates for custom discovery alerts):

  • SBOM generation and validation
  • Container image signing and provenance verification (SLSA)
  • Dependency vulnerability scanning in CI/CD pipelines
  • Third-party library allowlist enforcement
  • Build environment isolation and reproducibility

Output Format

Layer 1: Framework Preview (before creation)

=====================================================================
CUSTOM FRAMEWORK BUILDER
=====================================================================

FRAMEWORK: <framework_name>
DESCRIPTION: <1-2 sentence description>
SOURCE: <theme | framework_name | alert list>

---------------------------------------------------------------------
FRAMEWORK STRUCTURE
---------------------------------------------------------------------

  Section                          Controls    Priority Breakdown
  -----------------------------------------------------------------
  <section 1>                      <N>         <H> high, <M> med
  <section 2>                      <N>         <H> high, <M> med
  ...
  -----------------------------------------------------------------
  TOTAL                            <N>         <H> high, <M> med

SOURCES: <framework_1> (<N> rules), <framework_2> (<N> rules), ...

COVERAGE GAPS (no existing rule — can create custom alerts):
  - <gap 1 description>
  - <gap 2 description>

=====================================================================
Ready to create? (yes / modify / add section / remove)
Drill down: all controls | <section name> | coverage gaps
=====================================================================

Layer 2: Post-Creation Confirmation

=====================================================================
CUSTOM FRAMEWORK CREATED
=====================================================================

  FRAMEWORK     <framework_name>
  ID            <framework_id>
  CONTROLS      <N> total across <M> sections
  INITIAL SCORE <X>%
  CLOUD         <vendors>

NEXT STEPS:
  - View in Orca Console: Compliance -> <framework_name>
  - Run /orca-compliance-gap <framework_name> for gap analysis
  - Create custom alerts for coverage gaps (see below)

COVERAGE GAPS — fill with custom alerts:
  [1] <gap description>
      Want me to create a custom discovery alert for this? (yes/no)
  [2] <gap description>
      ...

=====================================================================

Edge Cases

No Matching Controls Found

No controls found matching "<theme>" in any enabled framework.

Try:
  - /orca-custom-framework with specific alert IDs
  - /orca-custom-framework from:<existing_framework>
  - Provide more specific terms

Duplicate Framework Name

Framework "<name>" already exists (ID: <id>, Score: <X>%).

Options:
  1. Choose a different name
  2. Update existing: PUT /api/compliance/frameworks/<id>
  3. View it: /orca-compliance-gap <name>

MCP Tools Used

Reading data (MCP — read-only)

ToolPurposeParameters
discovery_searchFind alerts matching a themesearch_phrase, limit (1-10)
get_enabled_compliance_frameworksList all frameworksoptional filters
get_compliance_framework_control_testsGet controls from a frameworkframework_id, optional filters
get_alertGet alert detailsalert_id (e.g., "orca-1234")

Writing data (REST API — no MCP tool available)

MethodEndpointPurpose
POST/api/compliance/frameworksCreate custom framework
PUT/api/compliance/frameworks/{id}Update custom framework
DELETE/api/compliance/frameworks/{id}Delete custom framework
POST/api/sonar/rulesCreate custom discovery alert
PUT/api/sonar/rules/{rule_id}Update custom discovery alert

Framework creation and custom alert creation both use the Orca REST API via curl. The auth token is extracted from .mcp.json.

Implementation Notes

  1. Parallelize queries — run discovery searches and framework control queries simultaneously.
  2. Deduplicate rule_ids — the same rule may appear in multiple frameworks. Deduplicate before building sections.
  3. Smart section assignment — use alert category, asset type, and title keywords to assign controls to the correct section.
  4. Cross-framework traceability — always set origin_framework_id so users know where each control came from.
  5. Preview before create — ALWAYS show the preview and get user confirmation. This is a write operation.
  6. Identify gaps proactively — after organizing, compare the framework sections against the user's theme to find missing domains. Suggest custom discovery alerts for each gap.
  7. Link to other skills — after creation, suggest /orca-compliance-gap <framework> for gap analysis and /orca-impact-analysis for fix planning.

Frequently asked questions

What does the Orca Custom Framework AI skill do?

Creates custom compliance frameworks from existing frameworks, alert lists, or security themes — organizes controls into sections, maps alerts, and pushes the framework to Orca. Suggests creating custom discovery alerts for gaps not covered by existing rules. Use when user asks to create, build, or generate a custom compliance framework.

Why use Orca Custom Framework on TypingMind?

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

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/orcasecurity/orca-skills/tree/main/skills/orca-custom-framework. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Orca Custom Framework?

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 Orca Custom Framework?

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

Is the Orca Custom Framework AI skill free?

Yes. It is published on GitHub by orcasecurity 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 👇