Skip to main content

Highflame Cedar policy types and engine wrapper

Project description

Highflame Policy - Python Package

PyPI version Python 3.9+ License

Cedar policy engine and typed constants for the Highflame security platform. Ensures entity/action consistency across all Highflame services.

Features

  • ๐Ÿ”’ Cedar Policy Evaluation - Wraps cedarpy with Highflame-specific types
  • ๐Ÿ“ Typed Constants - Auto-generated entity types, actions, and context keys (prevents typos!)
  • ๐Ÿ”„ Cedar Parser - Convert Cedar text to structured PolicyRule JSON for UI editing
  • โœ… Schema Validation - Validate policies against embedded Cedar schemas
  • ๐ŸŽฏ Service-Specific Schemas - Overwatch (Guardian) and Palisade schemas included
  • ๐ŸŒ Namespace Support - Generic support for namespaced entities and actions

Installation

pip install highflame-policy

Quick Start

Policy Evaluation (Palisade Example)

from highflame_policy import (
    PolicyEngine,
    EntityType,
    ActionType,
    schemas,
)
from highflame_policy.schemas import PalisadeContextKey

# Create engine with Palisade schema
engine = PolicyEngine(schema=schemas.palisade_schema)
engine.load_policies_from_file("palisade_policy.cedar")

# Evaluate with typed constants (no typos!)
decision = engine.evaluate(
    principal_type=EntityType.SCANNER,
    principal_id="palisade",
    action=ActionType.SCAN_ARTIFACT,
    resource_type=EntityType.ARTIFACT,
    resource_id="/model.safetensors",
    context={
        PalisadeContextKey.ARTIFACT_FORMAT: "safetensors",
        PalisadeContextKey.SEVERITY: "HIGH",
        PalisadeContextKey.ENVIRONMENT: "production",
    },
)

if decision.is_denied():
    print(f"Blocked by policies: {decision.determining_policies}")

Service-Specific Schemas

from highflame_policy import PolicyEngine, schemas
from highflame_policy.schemas import OverwatchContextKey

# Use Overwatch (Guardian) schema for IDE security
engine = PolicyEngine(schema=schemas.overwatch_schema)
engine.load_policies(policy)

decision = engine.evaluate(
    principal_type="Overwatch::User",
    principal_id="mcp_client",
    action='Overwatch::Action::"call_tool"',
    resource_type="Overwatch::Tool",
    resource_id="shell",
    context={
        OverwatchContextKey.THREAT_COUNT: 3,
        OverwatchContextKey.TOOL_NAME: "shell",
    },
)

Cedar Parser (Text โ†’ JSON)

from highflame_policy import parse_cedar_to_rules

cedar_text = '''
    @id("allow-read")
    permit(
        principal is User,
        action == Action::"read_file",
        resource is FilePath
    )
    when { context.environment == "production" };
'''

result = parse_cedar_to_rules(cedar_text)

for rule in result.rules:
    print(f"Rule: {rule['id']}, Effect: {rule['effect']}")
    # Use in UI for editing

Available Constants

Entity Types (17 total)

  • EntityType.USER, EntityType.AGENT, EntityType.SCANNER, EntityType.SERVICE
  • EntityType.ARTIFACT, EntityType.TOOL, EntityType.SERVER, EntityType.FILE_PATH
  • EntityType.MODEL, EntityType.REPOSITORY, EntityType.PACKAGE
  • And more...

Actions (38 total)

  • ActionType.SCAN_ARTIFACT, ActionType.CALL_TOOL, ActionType.LOAD_MODEL
  • ActionType.PROCESS_PROMPT, ActionType.PROCESS_RESPONSE
  • ActionType.READ_FILE, ActionType.WRITE_FILE, ActionType.DELETE_FILE
  • ActionType.HTTP_REQUEST, ActionType.EXECUTE_CODE
  • And more...

Context Keys (Service-Specific)

Overwatch (Guardian) Context:

from highflame_policy.schemas import OverwatchContextKey

# 20+ context attributes for IDE security
OverwatchContextKey.THREAT_COUNT
OverwatchContextKey.TOOL_NAME
OverwatchContextKey.USER_EMAIL
OverwatchContextKey.SOURCE
# And more...

Palisade Context:

from highflame_policy.schemas import PalisadeContextKey

# 15+ context attributes for ML security
PalisadeContextKey.ENVIRONMENT
PalisadeContextKey.SEVERITY
PalisadeContextKey.ARTIFACT_FORMAT
PalisadeContextKey.PICKLE_EXEC_PATH_DETECTED
# And more...

Service-Specific Schemas

Overwatch (Guardian) - IDE Security

from highflame_policy import PolicyEngine, schemas
from highflame_policy.schemas import OverwatchContextKey

# Schema: schemas.overwatch_schema
# Context: schemas.overwatch_context (JSON metadata for UI)

# Namespaced entities and actions
engine = PolicyEngine(schema=schemas.overwatch_schema)
decision = engine.evaluate(
    principal_type="Overwatch::User",
    principal_id="claude-code-user",
    action='Overwatch::Action::"call_tool"',
    resource_type="Overwatch::Tool",
    resource_id="bash",
    context={
        OverwatchContextKey.THREAT_COUNT: 0,
        OverwatchContextKey.TOOL_NAME: "bash",
        OverwatchContextKey.SOURCE: "claude-code",
    },
)

Palisade - ML Supply Chain Security

from highflame_policy import PolicyEngine, schemas
from highflame_policy.schemas import PalisadeContextKey

# Schema: schemas.palisade_schema
# Context: schemas.palisade_context (JSON metadata for UI)

engine = PolicyEngine(schema=schemas.palisade_schema)
decision = engine.evaluate(
    principal_type="Palisade::Scanner",
    principal_id="palisade",
    action='Palisade::Action::"scan_artifact"',
    resource_type="Palisade::Artifact",
    resource_id="/model.safetensors",
    context={
        PalisadeContextKey.SEVERITY: "HIGH",
        PalisadeContextKey.ARTIFACT_FORMAT: "safetensors",
        PalisadeContextKey.ENVIRONMENT: "production",
    },
)

Input Validation

Protect against DoS attacks with built-in validation:

from highflame_policy import (
    PolicyEngine,
    EngineOptions,
    ValidationLimits,
    InputValidationError,
)

engine = PolicyEngine(
    options=EngineOptions(
        limits=ValidationLimits(
            max_context_keys=200,
            max_string_length=1_000_000,
            max_nesting_depth=10,
        )
    )
)

try:
    decision = engine.evaluate(...)
except InputValidationError as e:
    print(f"Validation failed: {e}")

Why Typed Constants?

Without typed constants (error-prone):

context = {
    "enviroment": "production",  # Typo! Policy won't match
    "severety": "HIGH",           # Typo! Policy won't match
}

With typed constants (compile-time safety):

from highflame_policy.schemas import PalisadeContextKey

context = {
    PalisadeContextKey.ENVIRONMENT: "production",  # โœ“ Autocomplete + type checking
    PalisadeContextKey.SEVERITY: "HIGH",           # โœ“ Can't typo!
}

Architecture

This package wraps the official Cedar Python engine (cedarpy) with Highflame-specific types generated from the Cedar schema. All services use identical entity/action names, ensuring policy consistency.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  schema/highflame.cedarschema           โ”‚  โ† Source of truth
โ”‚  (Cedar schema)                         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚  Rust codegen tool  โ”‚
         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ–ผ               โ–ผ               โ–ผ
 Python          Go          TypeScript
cedarpy      cedar-go     cedar-wasm
    โ”‚               โ”‚               โ”‚
    โ–ผ               โ–ผ               โ–ผ
Palisade      Guardrails      Guardian
(scanner)      (proxy)          (IDE)

Related Packages

  • Go: github.com/highflame-ai/highflame-policy/packages/go
  • TypeScript: @highflame/policy on npm
  • Rust: highflame-policy on crates.io

Documentation

Full documentation: CLAUDE.md

License

Apache 2.0 - See LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

highflame_policy-2.1.9.tar.gz (118.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

highflame_policy-2.1.9-py3-none-any.whl (140.4 kB view details)

Uploaded Python 3

File details

Details for the file highflame_policy-2.1.9.tar.gz.

File metadata

  • Download URL: highflame_policy-2.1.9.tar.gz
  • Upload date:
  • Size: 118.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for highflame_policy-2.1.9.tar.gz
Algorithm Hash digest
SHA256 a4c283b5d86247ddc8043b9e2bcf15ebcc4969a586b490bebe11b55d5fe454b2
MD5 163881b687d12a44a26fa2dc2e255689
BLAKE2b-256 690a62d3bd097d0e51881b27f739f793c6709eaf722884392933db883f892019

See more details on using hashes here.

Provenance

The following attestation bundles were made for highflame_policy-2.1.9.tar.gz:

Publisher: release.yml on highflame-ai/highflame-policy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file highflame_policy-2.1.9-py3-none-any.whl.

File metadata

File hashes

Hashes for highflame_policy-2.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 7cf9b6f0c3ccf13538724dc786c9165e26de73cb94026f6131a372c5e65b1a6a
MD5 60ce3efdbc6e68d64679715b706acdf3
BLAKE2b-256 97d443fb9794f069d4314364d998cfe472aff9b900e74a0f143cebb5312c02ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for highflame_policy-2.1.9-py3-none-any.whl:

Publisher: release.yml on highflame-ai/highflame-policy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page