Skip to main content

DeepStrike

DeepStrike Python SDK

Build Python Agents with providers, typed tools, memory, Skills, delegation, workflows, and durable sessions. The SDK keeps the Agent's long-running work explicit through stream events, SessionLog evidence, tool policies, and host-provided integrations.

Install

pip install deepstrike

Requires Python 3.10+. The Rust kernel is distributed as a pre-built wheel (deepstrike._kernel).

When developing against a local kernel build, rebuild the extension from the repo root:

maturin develop --manifest-path crates/deepstrike-py/Cargo.toml

Quick start

import asyncio
from deepstrike import (
    FileSessionLog,
    InMemorySessionLog,
    LocalExecutionPlane,
    OpenAIProvider,
    RuntimeOptions,
    RuntimeRunner,
    collect_text,
    tool,
)

@tool
async def add(x: int, y: int) -> str:
    """Add two numbers."""
    return str(x + y)

plane = LocalExecutionPlane().register(add)
runner = RuntimeRunner(RuntimeOptions(
    provider=OpenAIProvider(api_key="sk-...", model="gpt-5-mini"),
    session_log=FileSessionLog(".deepstrike/sessions"),
    execution_plane=plane,
    max_tokens=4096,
))

asyncio.run(collect_text(runner.run(
    session_id="math-1",
    goal="What is 17 + 28?",
)))
# => "45"

Recipes — the canonical entry points

Most apps need one of two shapes. Start with the facades; drop to RuntimeRunner for streaming, tools, signals, memory, or governance.

from deepstrike import run_agent, run_fanout

# 1) Single agent — one prompt, one model, the text back.
answer = await run_agent(provider=provider, goal="What is 17 + 28?", tools=[add])

# 2) Parallel fan-out → synthesize over the kernel-gated DAG (safe from a stateless handler).
out = await run_fanout(
    provider=provider,
    tasks=["Summarize the auth module", "Summarize the data layer"],
    synthesize="Combine the findings into one summary.",
)
synthesis = out["synthesis"]

Same-session continuity is explicit via session_id:

await collect_text(runner.run(session_id="chat-1", goal="My name is Ada."))
reply = await collect_text(runner.run(session_id="chat-1", goal="What is my name?"))

Use InMemorySessionLog for process-local sessions or FileSessionLog when replay should survive restarts. wake(session_id) resumes from the event log without inserting a duplicate run_started event.

Streaming:

from deepstrike.providers.stream import TextDelta, ToolCallEvent, DoneEvent

async for event in runner.run(session_id="readme-1", goal="Summarize README.md"):
    if isinstance(event, TextDelta):
        print(event.delta, end="", flush=True)
    elif isinstance(event, ToolCallEvent):
        print(f"\n[→ {event.name}]")
    elif isinstance(event, DoneEvent):
        print(f"\ndone in {event.iterations} turns ({event.status})")

Architecture

┌─────────────────────────────────────────────────────────┐
│  RuntimeRunner (Layer 1.5)                              │
│  LLMProvider · ExecutionPlane · SessionLog · MemoryStore │
└───────────────────────────┬─────────────────────────────┘
                            │ durable prepare / append / commit
┌───────────────────────────▼─────────────────────────────┐
│  deepstrike._kernel Canonical Kernel ABI                │
│  P1 Syscall · P2 Sched · P3 MM · Proc · IPC             │
└─────────────────────────────────────────────────────────┘

The runner drives one durable operation loop:

  1. The host prepares one canonical envelope and durably appends the exact core-produced record.
  2. After commit, the kernel publishes typed effects such as provider, tool, or task work.
  3. The SDK executes those effects and returns each outcome through the single resolve_effect input.
  4. Typed observations and the terminal disposition are projected into SessionLog and the public stream.

Kernel session events carry an optional category tag (syscall · sched · mm · proc · ipc) for diagnostics and OS snapshot rebuilds.

What this enables

The mechanisms above are not internal refactors — they change what you can build without custom runner code:

Kernel-mediated runtime (M0–M4)
Tool calls, spawns, compression, and signals pass through one kernel gate with an explicit lifecycle (Ready / Running / Blocked / Suspended). You implement I/O; the kernel decides when and whether. Node, Python, and Rust share the same decision path, so wake(session_id) and cross-language tooling see consistent behavior.

Longer, sturdier sessions (external payloads + semantic page-out) The host atomically persists oversized tool results before submitting an External result. Core journals only the opaque locator, digest, size, and preview; read_result becomes a correlated LoadPayload effect. When pressure triggers semantic eviction, the SDK summarizes archived content into MemoryStore.

Safety and governance by default (OS native profile)
Every run loads declarative governance_policy (deny / ask_user / rate-limit / param rules) and in-kernel signal routing (signal_policy, default queue 64). Dangerous tools, external interrupts, and approval flows are policy — not ad-hoc checks in your handlers.

Long-term memory as syscalls (Phase-7)
write_memory and query_memory run outside the main tool loop: kernel validation before MemoryStore.put, search → select_memories → memory_retrieval_result on query. Failed writes emit memory_validation_failed for audit; good memory is durable without polluting history.

Multi-agent and multi-signal orchestration
Sub-agents register in the kernel process table (agent_process_changed); parent runs suspend explicitly until sub_agent_completed. Signals get disposition (Interrupt / Queue / Observe / Dropped) in-kernel, so gateways, cron, and heartbeats compose with the main loop instead of racing it.

Observable like an OS log
Page-out, signals, processes, budgets, and memory events land in SessionLog with categories. Rebuild an OS snapshot (page_out_count, process_by_agent, memory counters) from one event stream; payload residency stays in the canonical journal.

You need… Use…
Policy before tools run governance_policy (default: allow-all native profile)
External interrupts signal_source + in-kernel signal_policy
Spawn / memory-write quotas resource_quota (set_resource_quota)
Huge tool output Canonical external payload; optional custom payload_store
Durable recall across runs MemoryStore + semantic page_out via memory_summarizer
Programmatic memory I/O runner.write_memory() / runner.query_memory()
Debug / compliance SessionLog events + OS snapshot helpers

Dynamic workflows

For a task that needs more than one Agent, describe a DAG and let the runtime run fresh-context specialists under the same budgets, policies, and session evidence as the parent. See the workflow guide for the complete pattern catalog.

from deepstrike import WorkflowSpec, WorkflowNodeSpec

# One fresh-context verifier per rule (no inherited author context → can't rubber-stamp),
# then a skeptic that reviews their flags. The kernel spawns the 3 verifiers as one gated
# batch, suspends on the join, and runs the skeptic once they complete.
outcome = await runner.run_workflow(WorkflowSpec(nodes=[
    WorkflowNodeSpec(task="Rule: money is integer cents — violated?", role="verify"),
    WorkflowNodeSpec(task="Rule: all errors propagate — violated?",    role="verify"),
    WorkflowNodeSpec(task="Rule: timestamps are UTC — violated?",       role="verify"),
    WorkflowNodeSpec(task="Skeptic: which flags are real violations?",  role="verify", depends_on=[0, 1, 2]),
]))
# => {"completed": ["wf-node0", …], "failed": []}

A node's kind selects the control-flow shape; the same executor drives them all, every spawn passing the syscall gate:

Node kind Behavior
spawn (default) Run the node's agent once
loop (max_iters) Re-run until the agent signals it's done, capped at max_iters
classify (branches) The classifier's result selects one branch; the rest are pruned
tournament (entrants) Generate N entrants, then a pairwise-judge bracket to one winner
reduce (reducer) Tokenless host-compute — a pure function (dedupe_lines / merge_json_arrays / concat / count, or your own via the reducers option) over the node's dependency outputs

Workflow capabilities

  • Runtime fan-out — give a node the submit_workflow_nodes_tool and its agent can append nodes to the live DAG mid-run (true loop-until-done; one verifier per claim it discovers). Submission events remain audit projections; checkpoint state owns recovery. Governance rejection fails the submitting node instead of acknowledging work that was never appended.
  • Quarantine, no escape — set trust="quarantined" on a node that reads untrusted content; it's denied write-capable isolation in-kernel, and any nodes it submits are coerced to quarantined too (no privilege escalation).
  • Structured output — set output_schema on a node; the runner instructs the agent, validates the result against the JSON-Schema subset, and re-runs once with the errors on mismatch. A node that never conforms fails (its dependents starve).
  • Budget as signal — with a max_workflow_nodes / max_concurrent_subagents quota installed, each spawned node's goal carries its remaining headroom so a coordinator can size its fan-out to fit.

Providers

Resource quotas are opt-in and flow through the same replayable kernel event ABI:

from deepstrike import MemoryWriteRateLimit, ResourceQuota

runner = RuntimeRunner(RuntimeOptions(
    # ...
    resource_quota=ResourceQuota(
        max_concurrent_subagents=4,
        max_spawn_depth=2,
        memory_writes_per_window=MemoryWriteRateLimit(max_writes=20, window_ms=60_000),
    ),
))

The top-level package exports the base providers OpenAIProvider, OpenAIResponsesProvider, and AnthropicProvider. Every other backend is a factory function in deepstrike.providers, with a protocol argument where a backend speaks both the OpenAI- and Anthropic-compatible wire:

from deepstrike.providers import deepseek, kimi, minimax

ds = deepseek(api_key="...")                          # OpenAI-compatible wire (default)
dsA = deepseek(api_key="...", protocol="anthropic")   # Anthropic-compatible wire
mm = minimax(api_key="...")                           # MiniMax defaults to the Anthropic wire
Entry Import from Backend
OpenAIProvider / OpenAIResponsesProvider deepstrike OpenAI (and OpenAI-compatible)
AnthropicProvider deepstrike Anthropic Messages API
deepseek · kimi · qwen · glm · minimax · gemini · ollama deepstrike.providers the respective vendor (factory functions)

All providers accept retry_config for exponential backoff and share a CircuitBreaker.

extensions are forwarded to the provider while SDK-owned structural fields remain protected.


Context model (four slots)

The kernel renders context as four LLM API slots — only history is compressed.

Slot Source Role
system_stable system partition Identity, rules — never changes within a run
system_knowledge knowledge partition Preloaded memory, skill defs — low frequency
turns[0] task_state + signals Goal, plan, progress, compression log, runtime signals
turns[1..N] history Conversation transcript
runner = RuntimeRunner(RuntimeOptions(
    initial_memory=["User prefers chartreuse."],  # → Slot 2
    system_prompt="You are a helpful assistant.",  # → Slot 1
    # ...
))
  • memory(query) / knowledge(query) meta-tool results → history (tool results)
  • Inbound signals are routed by the in-kernel attention policy and rendered into Slot 3

Full reference: docs/concepts/context-slots-compression.md


Runtime options

from deepstrike import (
    DEFAULT_NATIVE_GOVERNANCE_POLICY,
    DEFAULT_SANDBOX_POLICY,
    validate_declarative_policy,
    AgentIdentity,
    AgentRunSpec,
)
from deepstrike.runtime import DEFAULT_NATIVE_SIGNAL_POLICY, PromptBudget
from deepstrike.governance import GovernancePolicy, GovernancePolicyRule

runner = RuntimeRunner(RuntimeOptions(
    provider=provider,
    session_log=FileSessionLog(".deepstrike/sessions"),
    execution_plane=plane,

    # Scheduler budget
    max_tokens=128_000,
    max_turns=25,
    timeout_ms=60_000,

    # Default governance and signal policy
    governance_policy=DEFAULT_NATIVE_GOVERNANCE_POLICY,
    signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY,  # SignalRouter queue size 64
    prompt_budget=PromptBudget(
        prompt_overhead_tokens=20,
        output_reserve_tokens=4096,
        safety_margin_tokens=256,
    ),

    # Host I/O
    extensions={"temperature": 0.1},
    skill_dir="./skills",
    knowledge_source=my_ks,
    signal_source=gw,
    memory_store=my_store,
    agent_id="my-agent",
    initial_memory=["..."],

    # Memory paging & compression (SDK-side I/O)
    compression_store=archive_store,
    memory_provider=memory_llm,
    memory_summarizer=my_memory_summarizer,  # semantic page_out → MemoryStore

    # Sub-agents & milestones
    run_spec=AgentRunSpec(
        identity=AgentIdentity(agent_id="my-agent", session_id="session-1"),
        role="orchestrator",
        goal="...",  # overridden by the run() goal on canonical root start
    ),
    milestone_contract=my_contract,
    milestone_policy="require_verifier",
    on_milestone_evaluate=my_verifier,
    sub_agent_harness=SubAgentHarnessConfig(eval_provider=eval_provider, max_attempts=3),

    # Governance UX (AskUser path)
    on_permission_request=lambda req: {"approved": True, "responder": "user"},
))
Option Purpose
governance_policy Declarative deny / ask_user / rate-limit / param rules installed before canonical root start
signal_policy In-kernel signal queue/TTL policy (default queue 64)
prompt_budget Provider-envelope overhead, output reserve, and safety margin deducted from the context window
on_permission_request Resolves tool_gated + suspended → kernel resume with approved/denied call IDs
compression_store Writes archived messages on compressed observations
memory_summarizer Summarizes page_out { tier_hint: "semantic" } into MemoryStore during a run
memory_provider Separate LLM for durable-memory extraction (falls back to provider)
payload_store Canonical opaque payload storage (default: .payloads/)

Validate policies before starting a run:

result = validate_declarative_policy(
    gov_policy=DEFAULT_SANDBOX_POLICY,
    signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY,
)
assert result["valid"], result["errors"]

Rebuild an OS diagnostics snapshot from session events:

from deepstrike.runtime.os_snapshot import rebuild_os_snapshot_from_session_events

events = [e.event for e in await session_log.read(session_id)]
snap = rebuild_os_snapshot_from_session_events(events)
# snap["page_out_count"], snap["signals"], …

External tool payloads

When a tool result exceeds the configured inline threshold, the SDK persists the full body before sending the canonical External result. The kernel receives only payload_ref, digest, original_size, and a bounded preview.

payload_ref is opaque and never passed to ordinary file tools. The model calls read_result; core authorizes the reachable handle and emits LoadPayload, which the runner resolves through PayloadStore.

No configuration is required. Pass a PayloadStore through RuntimeOptions.payload_store to use a different filesystem root or storage adapter.


Tools

from deepstrike import tool, read_file

plane.register(tool(name="search", description="Search.", parameters=schema)(my_fn))
plane.register(read_file)     # built-in: read files explicitly named by the caller
plane.unregister("search")

Execution planes:

Plane Use case
LocalExecutionPlane In-process tools (default)
FilteredExecutionPlane Capability-filtered sub-agent tools
ProcessSandboxPlane OS subprocess isolation
McpProxyPlane MCP server tools
RemoteVpcPlane Remote execution

Mount capabilities on an active run:

runner.mount_tool(schema)
runner.mount_skill("summarize", "Summarize text")
runner.unmount_capability("tool", "search")

Skills

Set skill_dir — the kernel auto-injects a skill meta-tool, and the LLM loads skills by name on demand.

runner = RuntimeRunner(RuntimeOptions(
    provider=provider,
    session_log=InMemorySessionLog(),
    execution_plane=plane,
    max_tokens=4096,
    skill_dir="./skills",
))
---
name: summarize
description: Summarize text into 2-3 concise bullet points
when_to_use: When you need to condense long text
effort: 1
---
1. Identify the 2-3 most important points
2. Express each as a concise bullet

Knowledge

Implement KnowledgeSource — the kernel injects a knowledge meta-tool. Runtime retrieval results land in history as tool results (single-use fact content that decays with compaction), not in the durable knowledge partition. Use initial_memory for durable preload into Slot 2.

For durable content at runtime use runner.push_knowledge(content, key=..., pinned=...) — a keyed entry upserts on a repeated key and runner.remove_knowledge(key) removes it, both applied at the next compaction/renewal boundary. knowledge_budget_ratio (default 0.25, 0 disables) caps the partition: over budget, the oldest unpinned, non-skill entries are evicted at boundaries while pinned=True entries survive. A loaded skill's body is pinned here as skill:<name> and unpinned by runner.deactivate_skill(name) or a skill_lease_turns expiry.

from deepstrike import KnowledgeSource

class VectorSearch(KnowledgeSource):
    async def init(self) -> None:
        await vector_db.connect()

    async def retrieve(self, query: str, top_k: int = 5) -> list[str]:
        return await vector_db.search(query, top_k)

runner = RuntimeRunner(RuntimeOptions(
    provider=provider,
    session_log=InMemorySessionLog(),
    execution_plane=plane,
    knowledge_source=VectorSearch(),
))

Memory

WorkingMemory (SDK-side scratch pad)

WorkingMemory is an SDK helper — not the kernel working partition. Kernel task state renders into Slot 3 (turns[0]).

from deepstrike import WorkingMemory

mem = WorkingMemory()
mem.set("step", 1)
mem.get("step")  # 1
mem.clear()

MemoryStore (long-term memory)

from deepstrike import MemoryStore

class MyStore(MemoryStore):
    async def load_sessions(self, agent_id): ...
    async def load_memories(self, agent_id): ...
    async def commit(self, agent_id, result, existing): ...
    async def search(self, agent_id, query): ...  # -> list[MemoryRecall]
    async def save_session(self, data): ...

runner = RuntimeRunner(RuntimeOptions(
    provider=provider,
    session_log=InMemorySessionLog(),
    execution_plane=plane,
    memory_store=MyStore(),
    agent_id="my-agent",  # enables memory meta-tool + semantic page-out archival
))

Three memory paths:

Path When What happens
In-session memory(query) LLM calls meta-tool MemoryStore.search() → history tool result
initial_memory Run start Injected into Slot 2 (system_knowledge)
Semantic page_out Kernel evicts with tier_hint: "semantic" SDK summarizes via memory_summarizer / memory_provider → gated write_memory()

Custom semantic summarizer:

async def memory_summarizer(archived, ctx):
    return f"Long-term summary for action={ctx.get('action')}"

runner = RuntimeRunner(RuntimeOptions(
    # ...
    memory_store=MyStore(),
    agent_id="my-agent",
    memory_summarizer=memory_summarizer,
))

Phase-7 memory syscalls (write_memory / query_memory)

from deepstrike import MemoryProvenance, MemoryQuery, MemoryRecord, MemoryScope

scope = MemoryScope(tenant_id="acme", namespace="assistant")
await runner.write_memory(MemoryRecord(
    record_id="prefers-small-tests",
    scope=scope,
    name="prefers-small-tests",
    kind="feedback",
    content="User prefers focused unit tests for SDK behavior.",
    description="Testing preference",
    provenance=MemoryProvenance(author="host", trust="user_asserted"),
    created_at=1,
    updated_at=1,
), session_id="my-session")

hits = await runner.query_memory(MemoryQuery(
    scope=scope,
    query="Need testing preferences",
    top_k=5,
    kinds=["feedback"],
), session_id="my-session")

Session events: memory_written, memory_queried, memory_validation_failed, memory_retrieval_result.


Governance

In-kernel declarative policy (preferred)

Every run loads governance_policy into the kernel via load_governance_policy:

from deepstrike import DEFAULT_SANDBOX_POLICY
from deepstrike.governance import GovernancePolicy, GovernancePolicyRule, GovernanceRateLimit

policy = GovernancePolicy(
    rules=[
        GovernancePolicyRule(pattern="read_file", action="allow"),
        GovernancePolicyRule(pattern="write_file", action="ask_user"),
        GovernancePolicyRule(pattern="*", action="deny"),
    ],
    rate_limits=[GovernanceRateLimit(tool="api_call", max_calls=10, window_ms=60_000)],
)

runner = RuntimeRunner(RuntimeOptions(
    provider=provider,
    session_log=InMemorySessionLog(),
    execution_plane=plane,
    governance_policy=policy,
    on_permission_request=lambda req: {"approved": True, "responder": "cli"},
))
  • deny → tool rejected with tool_denied
  • ask_user → tool_gated + suspended; resolve via on_permission_request, then kernel resume

Default when omitted: allow-all (DEFAULT_NATIVE_GOVERNANCE_POLICY).

Standalone Governance class

Governance wraps the native governance evaluator for SDK-side use (tests, custom gates). It is not wired automatically into RuntimeRunner — use governance_policy for run-time enforcement.

from deepstrike import Governance

gov = Governance("allow")
gov.add_permission_rule("danger.*", "deny")
gov.block_tool("rm_rf")
gov.evaluate("read_file", '{"path":"x"}')

SDK PermissionManager

PermissionManager is a separate SDK-side permission layer for apps that manage their own approval UX outside the kernel loop.

from deepstrike import PermissionManager, PermissionMode

pm = PermissionManager(PermissionMode.DEFAULT)
pm.grant("fs", "read")
pm.evaluate("fs", "read")

Signals

Inbound signals are routed by the in-kernel attention policy (default queue size 64):

Urgency Typical disposition
critical / high interrupt_now — may yield a new call_provider action
normal / low queue — buffered; no action until dequeued
queue full dropped
from deepstrike import SignalGateway, ScheduledPrompt, RuntimeSignal
from deepstrike.runtime import DEFAULT_NATIVE_SIGNAL_POLICY

gw = SignalGateway()
gw.schedule(ScheduledPrompt(goal="standup", run_at_ms=target_time))
gw.ingest(RuntimeSignal(kind="alert", payload={}, urgency="normal"))

runner = RuntimeRunner(RuntimeOptions(
    provider=provider,
    session_log=InMemorySessionLog(),
    execution_plane=plane,
    signal_source=gw,
    signal_policy=DEFAULT_NATIVE_SIGNAL_POLICY,
))

runner.interrupt()  # cooperative abort → kernel timeout path
gw.destroy()

Each routed signal produces a correlated signal_delivery_disposed session event (category: "ipc").


Sub-agents

Spawn isolated child agents through the kernel process table:

from deepstrike import AgentRunSpec, AgentIdentity
from deepstrike.providers.stream import DoneEvent

async for event in runner.spawn_sub_agent(AgentRunSpec(
    identity=AgentIdentity(agent_id="researcher-1", session_id="child-session"),
    role="explore",
    goal="Find three sources on topic X",
    isolation="worktree",
)):
    if isinstance(event, DoneEvent):
        print(event.status)

Requires an active parent run (run() / wake() in progress). The kernel emits agent_process_changed; the default SubAgentOrchestrator runs the child with a filtered execution plane and feeds sub_agent_completed back.


Attempt loop

from deepstrike import (
    AttemptLoop, AttemptRequest, RuntimeAttemptBody, StopPolicy,
    LlmEvalJudge, SubAgentHarnessConfig,
)

loop = AttemptLoop(
    body=RuntimeAttemptBody(runner),
    judge=LlmEvalJudge(eval_provider),
    stop=StopPolicy(max_attempts=3),
)
outcome = await loop.run(AttemptRequest(goal="Write a haiku"))
print(outcome.run_status, outcome.outcome, outcome.verdict)

runner = RuntimeRunner(RuntimeOptions(
    provider=provider,
    session_log=InMemorySessionLog(),
    execution_plane=plane,
    sub_agent_harness=SubAgentHarnessConfig(eval_provider=eval_provider, max_attempts=3),
))
async for event in loop.stream(AttemptRequest(goal="Write a haiku")):
    if event.type == "completed":
        print(event.outcome.run_status, event.outcome.verdict)

The default carry policy keeps one session and injects judge feedback as context. Use fresh_with_feedback or fresh_with_digest(...) only when attempt isolation is intentional.


Stream events

Import from deepstrike.providers.stream:

Class Key fields
TextDelta delta
ThinkingDelta delta
ToolCallEvent id, name, arguments
ToolDeltaEvent call_id, name, delta, chunk?
ToolSuspendEvent call_id, name, suspension_id, payload?
ToolResultEvent call_id, content, is_error
PermissionRequestEvent tool_name, reason
DoneEvent iterations, total_tokens, status
ErrorEvent message

status: completed · max_turns · token_budget · timeout · user_abort · error · milestone_pending


Further reading

Release files for deepstrike 0.2.64

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

Source distribution (sdist)

Source distribution for deepstrike 0.2.64
File Size Uploaded
deepstrike-0.2.64.tar.gz 999.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for deepstrike 0.2.64
File
deepstrike-0.2.64-cp310-abi3-win_arm64.whl CPython 3.10 abi3 Windows ARM64 Details
deepstrike-0.2.64-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
deepstrike-0.2.64-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
deepstrike-0.2.64-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
deepstrike-0.2.64-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
deepstrike-0.2.64-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 abi3 Linux glibc 2.17+ ARM64 Details
deepstrike-0.2.64-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
deepstrike-0.2.64-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 36.2 MB

Release files / deepstrike-0.2.64.tar.gz

Download URL deepstrike-0.2.64.tar.gz
Size 999.7 kB
Tags Source
SHA-256 checksum
How to use checksums
fd3e4c0ce6bb977fca1198528df00314f7f5e4fb955ea10e3d47e87817f3e4d5
BLAKE2b-256 checksum
How to use checksums
76ce2e12d0012655e284e83867031b7bd4f1fc63296aa33b4b1aa00321d8ba8a
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-win_arm64.whl

Download URL deepstrike-0.2.64-cp310-abi3-win_arm64.whl
Size 4.3 MB
Tags CPython 3.10 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
ca19e1ece1cd368bb72913114cd5d241721c8a61e894d4d21031df0c592f1d09
BLAKE2b-256 checksum
How to use checksums
b0c0cfba10c028ac007610587f5b96f5cfbfa4bec997c6445fded71c3553ec63
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-win_amd64.whl

Download URL deepstrike-0.2.64-cp310-abi3-win_amd64.whl
Size 4.6 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
230f367b59b15c252c28f785d6f284716313dec63532f5bb30529e9433c0dfd4
BLAKE2b-256 checksum
How to use checksums
1398123998d7b8918931130580807fa753e16e16183b0b17f00e81eaa0ff28d9
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL deepstrike-0.2.64-cp310-abi3-musllinux_1_2_x86_64.whl
Size 4.7 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
56e6496deaa4bdfc84e9d2147efa6a78d5cfd23d7d585487d449b339ce3cadbc
BLAKE2b-256 checksum
How to use checksums
895529cf496c8ccde747399b2a4aba11896d66642e6f53e5cf3389f27e732f91
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL deepstrike-0.2.64-cp310-abi3-musllinux_1_2_aarch64.whl
Size 4.4 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
dbb33e3dd354a35687562d8d17f8b9adeadaf2465e6fef4b0633728efa2c9694
BLAKE2b-256 checksum
How to use checksums
daeca0a548efb9740341770c61f686e6a61439b20cf3cac363a688fc6b7f0185
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL deepstrike-0.2.64-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.5 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
c9d8e8a5de50e90ee9adda2e7be8f863082c2307c4f115ca3ba3773d79feaa6c
BLAKE2b-256 checksum
How to use checksums
d89b7e7f5a761c78f34828b5d284269f8563aac77571617d89e6300a954cf50f
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL deepstrike-0.2.64-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 4.2 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
22b0132a3d6bb5005a1a6f16d55bf0ec00d8ac25f36000f000ee9273031883c8
BLAKE2b-256 checksum
How to use checksums
a628c97549a8d8123b5fa00b3ae70ddeabbd65eaedb245118960e399cbda0263
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-macosx_11_0_arm64.whl

Download URL deepstrike-0.2.64-cp310-abi3-macosx_11_0_arm64.whl
Size 4.1 MB
Tags CPython 3.10 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a6e0ae2d633df178a7038f1b5b8f6e1cd851a924135dc62813d32305cf858be6
BLAKE2b-256 checksum
How to use checksums
cea3b6ef40a619dcf7607123aeb754f3de82bcf313ef515af5b3dfb1bb1e7547
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 Sep 16, 2026.

Transparency log

Release files / deepstrike-0.2.64-cp310-abi3-macosx_10_12_x86_64.whl

Download URL deepstrike-0.2.64-cp310-abi3-macosx_10_12_x86_64.whl
Size 4.4 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
1db23cf2aad5f4794397b28f1b5230316d8ddf8449daf89e9365614c45088b2c
BLAKE2b-256 checksum
How to use checksums
025769cda4a4886088fcfc89b542c04d3e3854971b47258d774481f4c30387ae
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 Sep 16, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.74

9 release files

0.2.73

9 release files

0.2.72

9 release files

0.2.71

9 release files

0.2.70

9 release files

0.2.69

9 release files

0.2.68

9 release files

0.2.66

9 release files

0.2.65

9 release files

This release

0.2.64 This release

9 release files

0.2.63

9 release files

0.2.62

9 release files

0.2.61

9 release files

0.2.60

9 release files

0.2.50

9 release files

0.2.49

9 release files

0.2.48

9 release files

0.2.47

9 release files

0.2.46

9 release files

0.2.45

9 release files

0.2.44

9 release files

0.2.43

9 release files

0.2.42

9 release files

0.2.41

9 release files

0.2.40

9 release files

0.2.35

9 release files

0.2.34

9 release files

0.2.33

9 release files

0.2.32

9 release files

0.2.31

9 release files

0.2.30

9 release files

0.2.28

9 release files

0.2.27

9 release files

0.2.26

9 release files

0.2.25

9 release files

0.2.24

9 release files

0.2.23

9 release files

0.2.22

9 release files

0.2.21

9 release files

0.2.20

9 release files

0.2.19

9 release files

0.2.18

9 release files

0.2.17

9 release files

0.2.16

9 release files

0.2.15

9 release files

0.2.14

9 release files

0.2.13

9 release files

0.2.12

9 release files

0.2.11

9 release files

0.2.10

9 release files

0.2.9

9 release files

0.2.8

9 release files

0.2.7

9 release files

0.2.6

9 release files

0.2.5

9 release files

0.2.4

9 release files

0.2.3

9 release files

0.2.2

9 release files

0.2.1

9 release files

0.1.16

9 release files

0.1.15

9 release files

0.1.14

9 release files

0.1.13

9 release files

0.1.12

9 release files

0.1.10

9 release files

0.1.7

9 release files

0.1.6

9 release files

0.1.5

6 release files

0.1.4

6 release files

0.1.3

6 release files

0.1.0

1 release file

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