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 && source .venv/bin/activate   # puts `webcortex` on PATH
uv pip install web-cortex-framework

webcortex new myapp                # --template api | fullstack | agent | behaviour | orchestration | robotics | hub
cd myapp
export WEBCORTEX_API_KEY=$(webcortex keygen)
webcortex doctor                   # anything else to set first: other keys, model provider keys
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 dev                # the boot banner
  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.

The device hub: cameras in, insights out

WebCortex sits between devices and agents, and the Rust core does the work. Cameras and sensors stream in, agents see what they send, and what the agents conclude streams out to anyone subscribed.

app.camera("dock", max_fps=10)                                   # pushed: browser, Pi, ESP32, curl
app.camera("lobby", source="http://192.168.1.40/snapshot.jpg")   # pulled: any IP camera
app.sensor("dock_env")                                           # telemetry only

app.agent("inspector", tools=["dock_snapshot", "dock_env_telemetry"], max_images=2)
app.watch("dock_watch", device="dock", agent="inspector", every=15,
          input="Anything unsafe at the dock?", max_runs_per_hour=120,
          webhook="https://ops.example.com/hooks/dock")
  • Connect anything. WebSocket (/devices/dock/ws: binary messages are frames, text is telemetry), HTTP POST, or an IP camera's snapshot URL. Open /devices/dock/connect on a phone or laptop and its camera becomes the device.
  • No Python per frame. Ring buffers, sniffing, per-device rate limits and broadcast fan-out all live in Rust.
  • Agents see it. dock_snapshot is a tool that returns the live frame as an image the model sees, over MCP too.
  • Watchers are the middle of the hub. When the picture changes, the agent looks, and its insight goes to every /devices/dock/stream subscriber, to a webhook, and to the audit log. Spend is capped per hour.
  • Agents over WebSocket. Any agent route accepts a socket: send a turn, receive each step live, then the result.
  • A stdlib Python client (webcortex.client): DeviceConnection for drivers, subscribe() for consumers, AgentSocket for services.

webcortex new site -t hub scaffolds it. See The device hub.

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
$ webcortex doctor                      # keys present? models resolve? port free? e-stop?
$ webcortex status                      # what the running app is doing, and what just failed
$ webcortex explain WC402               # what an error code means and what to do

Every failure carries a stable code and a hint — in HTTP error bodies, agent runs, MCP tool errors and the CLI — and the live view at /_webcortex/status (also the webcortex_status MCP tool) shows recent failures by code and request id, runs in flight, spend and devices. On eighteen scripted broken scenarios, 2.5.0 gives a code and a hint for 18/18 where 2.4.0 gave none; see benchmarks/diagnostics/RESULTS.md and docs/diagnostics.md.

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
webcortex doctor          check the app is ready to run (exit 1 on a failure)
webcortex status          the running app's live view: requests, errors, runs, spend, devices
webcortex explain CODE    what an error code means; --list for all of them
webcortex halt | release  the emergency stop for actuators

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.6.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, the device hub (cameras, sensors, watchers, WebSocket ingest and streams, agents over WebSocket), and diagnostics (stable error codes with hints on every failure, webcortex doctor, the live /_webcortex/status view and its MCP tool). 490 tests (155 Rust, 335 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.6.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.6.0
File Size Uploaded Provenance
web_cortex_framework-2.6.0.tar.gz 326.2 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for web-cortex-framework 2.6.0
File
web_cortex_framework-2.6.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
web_cortex_framework-2.6.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.6.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.6.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.6.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.6.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
web_cortex_framework-2.6.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.6.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.6.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
web_cortex_framework-2.6.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.6.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
web_cortex_framework-2.6.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.6.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.6.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
web_cortex_framework-2.6.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.6.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
web_cortex_framework-2.6.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.6.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.6.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
web_cortex_framework-2.6.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details

Total release size: 120.7 MB

Release files / web_cortex_framework-2.6.0.tar.gz

Download URL web_cortex_framework-2.6.0.tar.gz
Size 326.2 kB
Tags Source
SHA-256 checksum
How to use checksums
52aebc22431337c6e9bf034b209fb4c0d3a349e371ffb4ff975c5f43d5b38fb4
BLAKE2b-256 checksum
How to use checksums
53d3d5abcb2603604835666363e081dc8e5e7af9813f0d759a81fb27f100753a
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314t-win_amd64.whl
Size 6.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
60dcbea342e45b1660b698bb9403c77b601185681da10999db74881de4b5ff0b
BLAKE2b-256 checksum
How to use checksums
95ed15442b9646cd3226f936f23a35eabae1a2ab00aec0c91ae9f82eb35d2d78
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.3 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
fdfc89dccbb715f195f236b92ba3bf504af42160f892d8a03ae8fbb4e222fe3f
BLAKE2b-256 checksum
How to use checksums
5cca1f4d50a713d3d7c8fd1c19af6391986c8fea4fd9bd87ccfbd3e954ea41f2
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
d9925b4346f99aa9779a1b424c7a508ba7a7ccd0678f41b573ee7e1fc0693479
BLAKE2b-256 checksum
How to use checksums
92f86e65c65617e7e87150019acc692227c7e6126e7daa4f6275a1608bf4bdc0
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 5.7 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
19729618ccd30c78b2434dbea56a3f5608ec6b5f4ef53d71c51055e23b716fe2
BLAKE2b-256 checksum
How to use checksums
8e030922a6008f84aeb98aa6aa0a2a886d2e5cb8334e7d6a37db2c74774c6c4d
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
4e30abb30d9ed5934486204ae5ff145ac1f47ce349b1e6c4745f80e5df1c6b45
BLAKE2b-256 checksum
How to use checksums
019c14a7cdc858a5324322a7de627af6d7b55703fd94f7c9a7d2c0b043df6854
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314-win_amd64.whl
Size 6.1 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
214f71dc45225a6ac7b3e6262389f317ec1802fe77506ecfa4a7e93a085f44ee
BLAKE2b-256 checksum
How to use checksums
821b725a82fbc704a97caccf146027a037c0d9f625d9fda301a9e4cf09ed82fe
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.3 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
919786c569f742148d5e071c5408fe8c8273afd3e0e4034131feafeb782d124c
BLAKE2b-256 checksum
How to use checksums
9cfe3686c104e2e7d10835752230f57508f9023ac4a9f30d3ada8b24a10f84ce
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.0 MB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
cabdb83d9b07a701c17577feb6a8929dc35bc691b5cd2fc1c18d4d9a66c50d53
BLAKE2b-256 checksum
How to use checksums
c581bee98b8356654cd7eff18bcbd98016190655ad4d663c0408c4aa4876e923
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314-macosx_11_0_arm64.whl
Size 5.7 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9151023def8216cbbe703e547bb0447c121ef79263a30f75f959c8fa5782e2d4
BLAKE2b-256 checksum
How to use checksums
2de6068338996cb8524ddd6bf82881510e77901f167bd35c64ec9a1ff06e6dfc
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
4dc21832e65f7709b5c327ce6e79729686ba3d5a1eb55c678e9df2c532e19191
BLAKE2b-256 checksum
How to use checksums
37f252760367bfffee50b2622a928181a44b73823857f5325d910bdbb3695bea
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp313-cp313-win_amd64.whl
Size 6.1 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
b6f13e30abef9f3344a4b97341621c5cd359fa0a48ac97e98b37762c7cacd10a
BLAKE2b-256 checksum
How to use checksums
9129f0347f5ddd37abff86e6dfaafd4023d2adf6814efbc4d7ddaf41873a8559
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.3 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1737543fded1858bb2895737703530f101efe90ddaff94dd55296d97639c38ec
BLAKE2b-256 checksum
How to use checksums
875514b4e4c0586abd6e2cef8172894ece6f3a93dc2e2d5e630be18bc9195a5e
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.0 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
28c878356b1493102f0161655e7243e67dc755f581b27b4ef3f5ec285269991c
BLAKE2b-256 checksum
How to use checksums
4a229cb8b433cc3d53588ccc04beb16be24a59c905168949c993802ba6cd6304
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp313-cp313-macosx_11_0_arm64.whl
Size 5.7 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9ab3502750e83295d3e4e508b18b5a7a388e17b06e1abb7954a53b7015ec2cf9
BLAKE2b-256 checksum
How to use checksums
702bea0b336b5103bdc18e8be14eb6f19a820b1f9040fa9fcf90f8795b53c51a
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
1aa3a305561dcb26ee45dde34c68320e429dc687978cf501f58cdc16c6224393
BLAKE2b-256 checksum
How to use checksums
f77969f7265e0282cead228729d16267087d7ab23dffef19a2a71f121c544d06
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp312-cp312-win_amd64.whl
Size 6.1 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
9c2fb75b8c061f56f412c8b98d529ba02332a38c20b41439171017ba04c99f8e
BLAKE2b-256 checksum
How to use checksums
6e302959f1b82f914a843134c4f776c9f77a1fed1d8d768554711e6b221c2a9e
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.3 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e4463ec3db357369a301474c26bf49ede9855c33cc4ef390b2f894e687898643
BLAKE2b-256 checksum
How to use checksums
ef6242ac2aa1cbb08eb9f2501a686d62a5a4553b0ad11f66df14a9aaa203c5ac
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.0 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
55d0fe5ea524c3b5e9afb2b8e2f3013c911a0c3ff2be8dd6e09ab51ef067cab4
BLAKE2b-256 checksum
How to use checksums
8d94f2d5a635e14ffa1d162f4d664d5054e1425ec31a190a4849dcbdad25a226
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp312-cp312-macosx_11_0_arm64.whl
Size 5.7 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1bc9664b3321595f440c04f69f3324199b84f75b33699ea9605f91a136491a02
BLAKE2b-256 checksum
How to use checksums
fdfef5ffe36fc1551c7906cd652598a7651abf6773818ce9b414964dcc0519eb
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 22, 2026.

Transparency log

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

Download URL web_cortex_framework-2.6.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
3ce2e0a1e94c9f11a1577bc15ca24927b17d74dbc97a5e357d3599510340a008
BLAKE2b-256 checksum
How to use checksums
9ef11a913cf782422760cd97bb1de0fc41be870e3b412afb039d3a70893b3d16
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 22, 2026.

Transparency log

Security for web-cortex-framework 2.6.0

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.

Full provenance

All 21 files in this release have been uploaded with provenance metadata.

Select from 21 files

Attestation for web_cortex_framework-2.6.0.tar.gz

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 22, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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