Skip to main content

WebCortex

pip install web-cortex-framework

Installs as web-cortex-framework, imports as webcortex — the same split as djangorestframework → import rest_framework.

Python 3.12, 3.13 and 3.14, including the free-threaded build (3.14t), which is the fast path for Python-backed routes.

📖 Documentation · Tutorial · Orchestration · Token economy · Security

A Python web framework with a Rust core, built on one idea:

If you declared it, Rust can run it — and an agent can call it.

Django and Rails were designed when the only client was a browser and the only author was a person. Today the client is just as likely to be a model, and so is the author. WebCortex treats both as the primary case: every declaration is simultaneously a REST route, an OpenAPI operation and an MCP tool; agents, behaviours and flows are first-class and compose; and the whole application can describe itself to the model that is writing it.

# api.py
from webcortex import WebCortex

app = WebCortex("bookstore", database="sqlite://./app.db")

app.api_key("WEBCORTEX_API_KEY", id="service", scopes=["read", "write"])
app.rate_limit(per_second=50)
app.anonymous_scopes("read")

app.resource(
    "books",
    fields={"id": int, "title": str, "author": str, "year": int},
    tools=True,
    read_scopes=["read"],
    write_scopes=["write"],
)

@app.get("/books/{id}/blurb", tool=True, scopes=["read"])
def blurb(id: int) -> str:
    """One-line pitch for a book."""
    return f"Book {id} — highly recommended."
$ webcortex dev

You now have a REST API, an OpenAPI 3.1 document, a live MCP server exposing all six endpoints as tools, authentication, rate limiting, and security headers. No second file, no schema written twice, no drift.

Twenty more lines make it a multi-agent system:

app.models(default="claude-opus-5", fast="ollama/qwen3.5:9b")   # tiers, not models

app.context("policy", data={"max_discount": 0.2})              # what agents know at step one
notes = app.memory("notes", scopes=["read"])                     # a durable, per-user scratchpad

app.agent("librarian", description="Finds and pitches books.",
          tools=["list_books", "get_books_by_id_blurb"], context=["policy"],
          memory="notes", scopes=["read"], token_budget=60_000)

app.agent("front_desk", handoffs=["librarian"], scopes=["read"],
          context_window=40_000, expose_at="/ask")             # hands off; compacts

app.flow("pitch_all", parallel=["librarian", "librarian"])      # orchestration as data

Every one of those is a route, a tool, and an MCP entry. The front desk hands a conversation to the librarian; the librarian remembers what it learned about the caller; the whole run is bounded by one budget; and webcortex context prints the lot in a form a coding model can extend.


Start here

uv venv --python 3.13 && uv pip install web-cortex-framework

webcortex new myapp                # --template api | fullstack | agent | behaviour | orchestration
cd myapp
export WEBCORTEX_API_KEY=$(webcortex keygen)
webcortex dev

Why a Rust core, specifically

Most Rust-accelerated Python servers put Rust at the socket and call Python for every request. You get faster parsing; your handler is still interpreted.

WebCortex puts the boundary somewhere more useful. Python is a declaration language that compiles to a plan the Rust runtime executes. A route whose work is expressible as data — a query, a proxy, a rendered page, a static file, an agent invocation, a flow — runs entirely in Rust and never enters the interpreter at request time. In practice that is most of a CRUD API and all of an orchestration.

$ webcortex check
  19 routes, 17 served without touching Python

When a route genuinely needs Python, it crosses onto a pool of free-threaded interpreter workers (free-threaded CPython 3.14, GIL disabled), each running its own event loop. Handlers run in real parallel — measured at 4.82× vs 1.38× under the GIL (DESIGN.md has the numbers and their caveats).

WebCortex runs correctly on a GIL build too, and tells you which mode it is in.

Behaviours

A "skill" written as a prompt is a suggestion. The model reads it and may ignore it, and "if X then Y" fails silently when it does.

A Behaviour inverts that. The control flow is real Python — a for loop is a loop, an if is a branch, and both execute whether or not a model would have chosen to. Only the leaves are probabilistic, and in v2 the leaves run concurrently:

@app.behaviour("triage", tools=["list_tickets", "update_tickets"],
               model="fast", max_steps=200, token_budget=100_000)
def triage(ctx, input):
    """Classify every open ticket at once and escalate the urgent ones."""
    tickets = [t for t in ctx.call("list_tickets", limit=50) if t["state"] == "open"]

    verdicts = ctx.ask_many(                                   # fifty model calls, one wait
        [f"Grade this ticket:\n{t['body']}" for t in tickets],
        schema={"type": "object",
                "properties": {"urgency": {"type": "integer"},
                               "category": {"enum": ["bug", "billing", "other"]}},
                "required": ["urgency", "category"]},
    )

    escalated = [t["id"] for t, v in zip(tickets, verdicts)     # a real branch
                 if v["urgency"] >= input.get("threshold", 7)]

    ctx.gather(*[                                                # fifty writes, one wait
        ("update_tickets", {"id": t["id"], "body": t["body"], "urgency": v["urgency"],
                            "state": "escalated" if t["id"] in escalated else "triaged"})
        for t, v in zip(tickets, verdicts)
    ])
    return {"escalated": escalated, "usage": ctx.usage}

You get a procedure with deterministic structure and probabilistic steps, rather than a probabilistic procedure.

ctx is how a behaviour reaches the world:

ctx.call(tool, **kwargs) invoke one of the app's tools, in-process
ctx.gather((tool, kwargs), ...) several tool calls, concurrently
ctx.ask(prompt, schema=..., model="fast") a model call; a schema forces the shape; the model may be a tier
ctx.ask_many([prompts], schema=...) the classification loop collapsed into one wait
ctx.context(name) a declared context provider, resolved on demand
ctx.log(msg) / ctx.halt(reason) narrate or stop deliberately
ctx.usage / ctx.trace budget consumed (this run and the whole tree) and every leaf executed
ctx.user / ctx.tools the delegated principal and what it may call

A behaviour is a tool. It registers as a route, so it is automatically an MCP tool, an OpenAPI operation, and something an agent — or another behaviour, or a flow — can call.

The runtime enforces the limits, not your diligence: max_steps caps leaf operations; token_budget caps spend for the run and everything it calls; a behaviour cannot call a tool it did not declare; an approval-gated tool cannot be laundered through a behaviour or a gather; scopes are delegated by intersection, never unioned.

Orchestration

One agent is a tool loop. Several are a system, and a system needs answers a loop never asks: who is in control, what may it do, how much may the whole thing cost, what happens when a human has to decide. Four primitives, all executed by the runtime:

Every agent is a tool. An agent is mounted at /agents/<name> (underscores become hyphens) and exposed under its own name, so app.agent("editor", tools=["researcher", "writer"]) is the entire supervisor/worker pattern. Workers run under a principal delegated from the supervisor's, one nesting level deeper, against the supervisor's budget.

Handoffs. app.agent("front_desk", handoffs=["billing", "technical"]) gives the front desk transfer_to_* tools. Calling one moves the conversation to the specialist — its system prompt, tools and context apply from the next step — while the budget and the caller's authority carry over. Authority can only shrink along a chain.

Flows: orchestration as data.

app.flow("briefing", pipeline=["researcher", "writer"], token_budget=150_000)
app.flow("review",   parallel=["security_review", "style_review"], merge="collect")
app.flow("desk",     route={"billing": "billing", "technical": "technical"},
                     default="front_desk", classify_with="fast")

Every step is a tool — an agent, a behaviour, another flow, a plain route — so composition is uniform, and a flow is itself a tool. Steps map arguments with {"tool": "x", "input": {"id": "$.id", "q": "$input.query"}}.

Sessions. Post {"input": "...", "session_id": "..."} and the conversation continues; the key includes the principal, so callers never see each other's history, and anonymous callers, who share one identity, cannot open one. Long sessions are compacted, not truncated.

Approvals that resume. A gated tool suspends the run; a human decides at POST /_webcortex/approvals/{id} with {"approve": true|false, "note": "..."}; the run continues — including the rest of the turn it was interrupted in. A denial is a tool error the model reads and reacts to.

Budgets compose. The outermost run's token_budget is shared by every agent, behaviour and flow it calls. usage.tree_tokens reports the total.

Token economy

The cost of an agent system is which model answers, how much context each call carries, and how many calls are made. Each has a declaration.

app.models(default="claude-opus-5", fast="claude-haiku-4-5-20251001",
           local="ollama/qwen3.5:9b")
app.provider("groq", base_url="https://api.groq.com/openai/v1", api_key_env="GROQ_API_KEY")
app.pricing("claude-opus-5", input_per_mtok=5, output_per_mtok=25)
  • Tiers, not models. Judgement uses default; classification, extraction and routing use fast. Moving a workload to a cheaper or local model is one edit.
  • Two wire formats, chosen by prefix. Anthropic Messages and OpenAI Chat Completions — which is what Ollama, vLLM, LM Studio, Groq and OpenRouter all speak. ollama/qwen3.5:9b needs no key. Deliberately not a universal LLM abstraction.
  • Prompt caching on by default: the system prompt, context and tool definitions are cached across the steps of a run.
  • Bounded context. tool_result_limit caps what the model sees of any tool result; context_window compacts older turns with the fast model when the measured input exceeds it.
  • A ledger. GET /_webcortex/usage reports tokens by agent, behaviour, flow and model, and dollars where you declared prices — null, not zero, where you did not.

Context and memory

app.context("policy", data={"refund_days": 30})
app.context("open_queue", sql="SELECT id, kind FROM tickets WHERE state='open' LIMIT 20")
app.context("my_orders", sql="SELECT * FROM orders WHERE customer = ?", params=["@principal"])

@app.context("account")
def account(req) -> dict: ...

notes = app.memory("notes", read_scopes=["read"], write_scopes=["write"])
app.agent("assistant", context=["policy", "my_orders"], memory="notes", ...)

A context provider is resolved when a run starts and injected into the system prompt, bounded by max_chars. @principal binds to the human behind however many agents deep the call is. A memory is four Rust-executed tools — remember, recall, search, forget — keyed by that same principal, so an agent writing on someone's behalf writes to that someone's memory and can never read another's.

The nine kinds of route

Kind Declared with Runs in
Static app.static(...) Rust
Query app.query(...), app.resource(...), app.memory(...) Rust
Page app.page(...) Rust (minijinja)
Files app.static_files(...) Rust
Proxy app.proxy(...) Rust
Agent app.agent(...) Rust
Flow app.flow(...) Rust
Behaviour @app.behaviour(...) Python worker pool
Python @app.get(...) Python worker pool

Every route is a tool

Mark a route tool=True and it appears in MCP tools/list, with an input schema derived from the handler's own type hints. Agents declared in the same app call those tools in-process — a function call through the same dispatcher the HTTP server uses, not a loopback request. A typo in tools, handoffs or context fails at boot with a "did you mean" suggestion.

What makes agents safe to deploy

Enforced by the runtime, not by your diligence:

Delegated authority. A run executes as caller.delegate_to_agent(...), whose scopes are intersected with the caller's — never unioned — and a handoff intersects again. An anonymous caller cannot launch a privileged agent.

Human approval gates. Mark a route approval="required" and an agent asking for it does not get it. An agent's run suspends until a human decides, then resumes with the rest of its turn. Every other path is refused: a direct MCP call is rejected, a behaviour (alone or in gather) halts, and a flow step fails. Resuming continues the agent that hit the gate, not a supervisor that called it, so give gated tools to the agents people call directly.

Runtime-enforced budgets that compose. max_steps per run; token_budget for the run and everything under it.

Scope-filtered tool lists. tools/list shows only what that caller can invoke.

A full audit trail, including refused calls, handoffs, compactions and approval decisions, at GET /_webcortex/audit.

Agents that see, machines that move

WebCortex embeds no vision model — it carries pixels to the model that has one, and puts the guard rails a physical system needs around the tools that move it.

from webcortex import HTTPError, Image, WebCortex

app = WebCortex("cell", start_halted=True)            # boots with the e-stop engaged

@app.get("/camera", tool=True, tool_name="camera", scopes=["observe"])
def camera() -> dict:
    frame = cam.read()                                 # an OpenCV / NumPy frame
    return {"frame": Image.from_array(frame, bgr=True), "exposure_ms": 8}

@app.post("/arm/move", tool=True, tool_name="move_arm", scopes=["operate"],
          actuator=True, approval="required")
def move(joint: str, degrees: float) -> dict:
    if not -90 <= degrees <= 90:
        raise HTTPError(422, "out of range")           # limits live in code, not prompts
    return arm.move(joint, degrees)

app.agent("operator", tools=["camera", "move_arm"], scopes=["observe", "operate"], max_images=3)
  • The agent sees the frame. A tool that returns a webcortex.Image — anywhere in its result — hands the model the picture itself, over both wire formats (Anthropic and OpenAI-compatible, so local vision models too) and over MCP, where Claude Code and other clients receive it as image content. Agent endpoints also take "images": [...] with the input.
  • Frames do not become a token leak. Images are lifted out before tool-result bounding, step records keep their size rather than their base64, and only the last max_images stay in context as pixels.
  • An emergency stop that cannot be routed around. actuator=True routes refuse with 423 while halted — over HTTP, from an agent, a behaviour, a flow, MCP, or an approval granted after the stop. webcortex halt / webcortex release, or POST /_webcortex/halt and /release.
  • webcortex new cell -t robotics scaffolds a simulated arm and camera with an inspector agent and an operator agent, gated, scoped and booting halted. Swap the Cell class for your driver — serial, ROS 2, Modbus, a vendor SDK.

See Vision and robotics.

Security defaults

Deny-by-default throughout; relaxing something costs a line, tightening it costs nothing. API keys are referenced by environment variable, hashed with SHA-256, and compared in constant time. JWT (HS/RS) with mandatory expiry validation. Per-principal token-bucket rate limiting. Security headers on every response. CORS that refuses * with credentials at boot. Path traversal, symlink escapes, and dotfiles refused by the static server. The control plane — including approvals, usage and models — requires webcortex:admin once any authentication is configured.

The frontend, without the mess

Two clean paths sharing one data layer, chosen per route: server-rendered pages executed in Rust (app.page("/", "index.html", sql=..., bind="books")), where a template receives a data object and nothing else; and a typed TypeScript client for SPA frontends, generated from the same route table by webcortex typegen.

AI-native development

webcortex new writes an AGENTS.md (read by Codex, Cursor and most agents) and a CLAUDE.md that imports it, so the rules travel with the project; webcortex context describes the running app for the model extending it; webcortex mcp-config prints the one command that plugs the app into Claude Code, Claude Desktop or Cursor.

$ webcortex context                     # the app, described for a coding model
$ webcortex evolve "add reviews tied to books and a behaviour that summarises them" --model fast
$ webcortex check                       # boot-time validation, with hints

The context pack is the app's shape — routes, tools and schemas, agents, behaviours, flows, context, memory, models, security posture — derived from the manifest in a few thousand tokens, plus a cheat sheet of the framework's API. evolve feeds it to a model (with the app's own aliases, so --model fast can be a local Ollama model) and prints a proposal to review. The loop is describe → propose → check → run, and boot-time validation is what makes it safe to repeat.

AGENTS.md is the machine-facing reference for tools that edit this repository or write apps on it. scout/ is a local-model reviewer that leaves suggestions for the framework's own next iteration.

Commands

webcortex new <name>      scaffold a project (api | fullstack | agent | behaviour | orchestration)
webcortex dev             run with a startup report
webcortex check           routes, tools, agents, flows, and the public attack surface
webcortex security        what is reachable without a credential
webcortex tools           the agent tool manifest
webcortex context         the context pack, for an AI coding tool
webcortex evolve "…"      ask a model to propose an extension
webcortex typegen         generate a typed TypeScript client
webcortex openapi         the OpenAPI 3.1 document
webcortex sql             DDL for declared resources and memories
webcortex keygen          mint an API key

Security

WebCortex has been through an adversarial review of its own controls — auth, authorization, injection, traversal, SSRF, exhaustion, disclosure — plus stress and soak testing. Six issues were found and fixed, each with a regression test in tests/test_pentest.py:

Severity
Remote DoS + total auth failure via a JWT library panic Critical
No panic boundary on the request path High
Proxy path traversal usable as an SSRF primitive High
Unbounded behaviour recursion exhausting the worker pool High
Python tracebacks returned to clients Medium
Client input faults reported as 500s Low

Soak: 1,786,805 requests, 0 errors, 0 panics, memory at steady state.

SECURITY.md has the full report — including what was not tested, the known limits, and what v2 added to the surface.

Status

v2.2.0. Working and tested: the manifest IR, router, native ops (static / query / proxy / page / files / flow), the free-threaded Python bridge, authentication and scopes, rate limiting, CORS, security headers, graceful shutdown, Behaviours with concurrent leaves, the agent runtime with handoffs, sessions, resumable approval gates, composing budgets, tool-result bounding and compaction, context providers, memory, flows, two providers (Anthropic and OpenAI-compatible, which covers local models), prompt caching, the spend ledger, the audit trail, OpenAPI, the MCP server, TypeScript generation, the context pack and evolve, images in and out of agent runs and MCP, actuators and the emergency stop. 403 tests (124 Rust, 279 Python, including a 54-test adversarial suite and offline end-to-end suites that drive the whole agent stack over HTTP), clippy clean.

Not yet: Postgres, token-level SSE streaming, durable agent runs that survive a restart. See DESIGN.md for the roadmap, honest risk grading, and — just as importantly — what is deliberately not being built.

For AI coding tools

AGENTS.md is the machine-facing reference: the complete API surface with exact signatures and defaults, the binding and scope rules, the constraints the runtime enforces, and the specific mistakes that are cheap to make and expensive to debug. Claude Code, Cursor, Codex, Aider and Copilot Workspace all read it by convention.

It is written to be correct rather than welcoming. Humans should start with the docs site instead.

Building from source

uv venv --python 3.13
uv pip install maturin pytest
.venv/bin/maturin develop --uv
.venv/bin/python -m pytest tests/

The free-threaded build is also supported and is the configuration the bridge was designed around:

uv venv --python 3.14t

License

Apache-2.0

Metadata

Release files for web-cortex-framework 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for web-cortex-framework 2.2.0
File Size Uploaded
web_cortex_framework-2.2.0.tar.gz 203.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for web-cortex-framework 2.2.0
File
web_cortex_framework-2.2.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
web_cortex_framework-2.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
web_cortex_framework-2.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details
web_cortex_framework-2.2.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
web_cortex_framework-2.2.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
web_cortex_framework-2.2.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
web_cortex_framework-2.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
web_cortex_framework-2.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details
web_cortex_framework-2.2.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
web_cortex_framework-2.2.0-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details
web_cortex_framework-2.2.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
web_cortex_framework-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
web_cortex_framework-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details
web_cortex_framework-2.2.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
web_cortex_framework-2.2.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details
web_cortex_framework-2.2.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
web_cortex_framework-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
web_cortex_framework-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
web_cortex_framework-2.2.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
web_cortex_framework-2.2.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details

Total release size: 112.5 MB

Release files / web_cortex_framework-2.2.0.tar.gz

Download URL web_cortex_framework-2.2.0.tar.gz
Size 203.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5cae1a8ac8be145c4cafb9571ae8963d2c9430a7140c91402eaaa1c2004e3b99
BLAKE2b-256 checksum
How to use checksums
6cb26b2c710214586325e6e321e388613115f445cfdeb9f783d7a5438537a788
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314t-win_amd64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314t-win_amd64.whl
Size 5.6 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
4a1ee7ad7fcd09302ad521b8c9a46424df5e43c16ba7a0b396ccc83507cb9049
BLAKE2b-256 checksum
How to use checksums
dbc1d5e03078ef9db54331591ff344f2a6ecacd51ca9ca006ae63ca9d786ffd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
445850a98c516b48887b32d64fe09ff4489942d0e9dd873ca773ddfd44b2bdfd
BLAKE2b-256 checksum
How to use checksums
152c18011c94fa7d2692293e86dcdda8b6d018b01710edfa72a898c7f938edfe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.6 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
42d6c7d69f68a9216ccef701cf6dca4be585567678c4ea224eed860a94b1fa66
BLAKE2b-256 checksum
How to use checksums
688ebc7a2286ab09ab6da5c5d2b99dbca81f8d343248e02c7aae564a9ff50449
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 5.3 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7617d267eaeaab90c779806f41ad28e2034591aa926af2ed6f18d39d1b56cb00
BLAKE2b-256 checksum
How to use checksums
60bd64981041c69bdb9dc5bbfcb9ec4bfa7a5a4a014bcbf53947e2bab5caf2e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 5.7 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
b4c5b265eacc0122cf94131cb88100135c5fe47de8e183a459f02f83310f4c49
BLAKE2b-256 checksum
How to use checksums
ba0171c64d9956ec5e5c7b5cec2ab6e09146f6c7071f66cc8c05f5a73c81d870
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314-win_amd64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314-win_amd64.whl
Size 5.6 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
c30ce94236057db99ebdc89c0d3769a14375fa8cc5d455ac49ae696158b6399f
BLAKE2b-256 checksum
How to use checksums
56abe4497b886c932dff3c012c367a7b08851ff02af10bf6cc77ca894e341579
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.8 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
359f21c800069fb0e948187e2665c3103b53d9af7c3ea603961b24ff1f6d85ea
BLAKE2b-256 checksum
How to use checksums
d9573ea3de211a4516fa4cea59c9d0d2e63bed576ab8464fade5899ee13be6f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.6 MB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
1a75fd51d9d483b4fd481c23d25bc6b351cfbcccc37fb1de76add696a2c872e5
BLAKE2b-256 checksum
How to use checksums
9a88bd0cfcaa8386fa4977a3177320f5a0ce02e2d18c3b6de21cdd4da9d83cf3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314-macosx_11_0_arm64.whl
Size 5.3 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
81bc8c7b725901af542db977c9ecfa1ab0a87e04570cbe8a36a19b486ef707d3
BLAKE2b-256 checksum
How to use checksums
5258c60831e68d14999dea5bdab8f316c6f92471d909a2627c275263fdce2dbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp314-cp314-macosx_10_12_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 5.7 MB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
79c66dd24a7a7d50acefc35c1d3dbf1288610cba11ad166626c422f24b4dc0a1
BLAKE2b-256 checksum
How to use checksums
08ba8d9da7c6debf6f6f8c5031bba495eac44b57129ef850f476bfa23ad351ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp313-cp313-win_amd64.whl

Download URL web_cortex_framework-2.2.0-cp313-cp313-win_amd64.whl
Size 5.6 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
062b8d597d3697cde91ec2f53f95397322475b6ab59437d46fd12a9c5eda4073
BLAKE2b-256 checksum
How to use checksums
360a7735c8dd0f78733aee81f8fcf5e9e3d57ec88eda1db7ae60cb311bcc09e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.8 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
a7e7784dac369bd3dc5b6e0855266ed785d5c55f4bb5cbcefa8d8b64c2f3554c
BLAKE2b-256 checksum
How to use checksums
4d785fe0acfb81e9724b123a3888c9c5cda7ea8db398abdd93edf750a4e7dc1c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL web_cortex_framework-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.6 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
9cdf98d2994645ce9b28cea3ef467e4193caa0d4fa9b922cc3a6dfd4f385607c
BLAKE2b-256 checksum
How to use checksums
f13638d06c7b8f8be4178effc3347582c406ad2db882066e7bfdf0e32f5e138b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL web_cortex_framework-2.2.0-cp313-cp313-macosx_11_0_arm64.whl
Size 5.3 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d4d0ef5310f7d785cb5258b1391b8ba9c961f3297c8e1a08da36327dab1afb60
BLAKE2b-256 checksum
How to use checksums
ebd3a1c1616d05ed2d74c0de4bf864b07b0912e9dea05006f9719b253a3eb990
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 5.7 MB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2065b2c5d8d54a2b1cab9f53adccfcd520e4c30cfb9c8450f4bb8ce936023f6e
BLAKE2b-256 checksum
How to use checksums
b8ab32071a3526add39bc1540d82dcf1f6eadb227672afb1f1ddf2e61920391f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp312-cp312-win_amd64.whl

Download URL web_cortex_framework-2.2.0-cp312-cp312-win_amd64.whl
Size 5.6 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
47fd82446a60b9cd618b4858d28f9e9ce302f36c8fd2047ebba6686b1aeef900
BLAKE2b-256 checksum
How to use checksums
630634b0f5cdea447e267d4931acfb611a1293ce52ab0f772bee6351b3f13933
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.8 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
6838289d33c12f68699c7b69343570a1749e6f7452a42140d7599620ad59132d
BLAKE2b-256 checksum
How to use checksums
741d5bba0b6f3d4b2b7fc5604b5189cb4bc89c3978e19a32bca9c5d3e052bd90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL web_cortex_framework-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.6 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
d32c135c650af06c495352d7c8696c6f5a949406c8d14f8f08eb45c5d709daa7
BLAKE2b-256 checksum
How to use checksums
33cca7ceb87e9776dde9bb455be66cc354763eb44fa1cc76af5691174c76faa3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL web_cortex_framework-2.2.0-cp312-cp312-macosx_11_0_arm64.whl
Size 5.3 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4c0097543bd4baa7b7fbd4aa57869c062e7b108f2aa8d71dfe947496a5200b3e
BLAKE2b-256 checksum
How to use checksums
e07d4a7a050d293c87eb6638707ae435b8cf65f49c84048d87221c6db55a9e26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / web_cortex_framework-2.2.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL web_cortex_framework-2.2.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 5.7 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
a24e1ad6af0222b11845558b4029f055468d1f65d68b91b3e62bc67f577c36a9
BLAKE2b-256 checksum
How to use checksums
e840cf6c3d6ed0ff13160d51a81cb83876dcaddebaea3904396c21d0d0eb76f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.2.0 This release

21 release files

2.1.1

21 release files

2.1.0

21 release files

2.0.1

21 release files

2.0.0

21 release files

0.3.2

21 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page