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.2.9.tar.gz (157.3 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.2.9-py3-none-any.whl (198.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: highflame_policy-2.2.9.tar.gz
  • Upload date:
  • Size: 157.3 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.2.9.tar.gz
Algorithm Hash digest
SHA256 de830f7f238f7147839125d9e493ef6d35a0956730fc45a98277538943e8803e
MD5 f7e2d7de7a199360576393678bff4e45
BLAKE2b-256 2825b2cac1eb0394448255fa629d314103eca11e7a889c793763f3fffe472c3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for highflame_policy-2.2.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.2.9-py3-none-any.whl.

File metadata

File hashes

Hashes for highflame_policy-2.2.9-py3-none-any.whl
Algorithm Hash digest
SHA256 fe86844837dda8c64cdc767febf2ffc5c2dd9d2a7aeb4f572bfa25012ac4208e
MD5 ea6ff66ec9d70da9fd2b12d41860db5e
BLAKE2b-256 7519b68d887ebccc880c15a6fa587373ccaf7cd1fd8d7c57b80bcb0ddd67070d

See more details on using hashes here.

Provenance

The following attestation bundles were made for highflame_policy-2.2.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