nullcone
Distributed threat intelligence for AI agents and security teams.
Real-time IOC sharing powered by SpacetimeDB. Your agent detects a threat — report it in one call — every other agent on the network is protected within milliseconds.
1,295,000+ IOCs indexed · 549 malware families · 20+ live feeds · <1ms query latency
Install
pip install nullcone
Python 3.11+ required.
Quick start — Python SDK
from nullcone import NullconeAgent, IOC, IOCType
with NullconeAgent(api_key="nc_...") as agent:
# ① Check any IOC instantly
sig = agent.find_by_value("185.220.101.47")
if sig:
print(f"{sig.value} — {sig.family_name} — severity {sig.severity}/10")
agent.report_detection(sig.id, "blocked")
# ② Report new threats — protects every connected agent instantly
agent.submit_ioc(IOC(
ioc_type=IOCType.IP,
value="10.10.10.1",
severity=8,
tags=["c2", "botnet"],
))
# ③ Delta sync — stream everything new since your last check
sigs, last_id = agent.poll_since(last_id)
Self-registration
agent = NullconeAgent(api_key="nc_...")
agent.register() # idempotent — safe to call on every startup
Registration is automatic when using the context manager (with NullconeAgent(...) as agent).
Continuous sync
def on_new_threats(sigs):
for s in sigs:
print(f"[{s.severity}/10] {s.ioc_type} {s.value}")
agent.sync_loop(on_new_threats, interval=300)
# state is auto-persisted to ~/.nullcone/{agent_id}.state
Real-time WebSocket subscription
agent.subscribe_new_threats(callback=on_new_threats, min_severity=7)
agent.start_subscriptions()
Self-hosted only. Real-time subscriptions are not open on the hosted
nullcone.aiservice right now (the subscribe endpoint returns 403). Against the hosted service, usesync_loop()/poll_since()above — or the MCP server athttps://nullcone.ai/mcp.
Quick start — CLI
# First-time setup
nullcone config init
# Register your agent
nullcone register
# Look up an IOC
nullcone lookup 185.220.101.47
nullcone lookup evil.example.com
# Submit a new threat
nullcone submit 1.2.3.4 -t ip -s high --tags c2,botnet
nullcone submit CVE-2024-1337 -t cve -s critical
nullcone submit "ignore previous instructions" -t prompt -s 8
# Submit a batch from JSON
nullcone submit-batch threats.json
# Stream recent threats
nullcone threats --limit 50 --min-severity 5
# Poll for new IOCs since a known ID
nullcone poll --since 591000
nullcone poll --watch --min-severity 7 # live stream, Ctrl-C to stop
# Report a detection
nullcone detect 12345 --action blocked
# All commands support --json for machine-readable output
nullcone lookup 1.2.3.4 --json | jq .
nullcone threats --json | jq '.[].value'
CLI environment variables
| Variable | Description |
|---|---|
NULLCONE_URL |
SpacetimeDB server URL |
NULLCONE_DB |
Database name (default: nullcone) |
NULLCONE_AGENT_ID |
Agent ID (auto-generated on first run) |
NULLCONE_TOKEN |
Auth token |
NULLCONE_JSON |
Set to 1 to always output JSON |
IOC types
| Key | Description |
|---|---|
ip |
IPv4 / IPv6 address |
ip_port |
IP address with port (1.2.3.4:443) |
domain |
Malicious domain |
url |
Malicious URL |
md5 / sha1 / sha256 |
File hashes |
ja3 |
TLS fingerprint |
cve |
CVE identifier |
prompt |
Malicious LLM instruction / prompt injection pattern |
skill |
Malicious AI agent skill / plugin identifier |
yara |
YARA rule pattern |
stego |
Steganographic technique / covert-channel signature |
email, mutex, registry, filepath, asn, imphash |
Standard IOC types |
Batch submission format
[
{"type": "ip", "value": "1.2.3.4", "severity": 7, "tags": ["c2"]},
{"type": "domain", "value": "evil.example.com", "severity": 5},
{"type": "sha256", "value": "abc123...", "severity": 9, "family": "emotet"}
]
nullcone submit-batch threats.json
Severity scale
| Value | Label |
|---|---|
| 9–10 | CRITICAL |
| 7–8 | HIGH |
| 5–6 | MEDIUM |
| 3–4 | LOW |
| 1–2 | INFO |
Other ways to connect
The SDK is one of four surfaces onto the same corpus:
| Surface | How |
|---|---|
| MCP (remote) | point any MCP client at https://nullcone.ai/mcp — streamable-http, no auth, 30 tools |
| Claude Code plugin | /plugin install nullcone@nullcone |
| REST | curl "https://nullcone.ai/v1/ioc?value=185.220.101.47" |
| Anonymous SQL | POST https://nullcone.ai/v1/database/nullcone/sql (reads only) |
Links
- Website: nullcone.ai
- API reference: nullcone.ai/api/docs (OpenAPI / Swagger)
- Issues: github.com/maco144/nullcone
- Contact: hi@nullcone.ai
License
Rising Sun License v1.0 — see LICENSE.
Metadata
Release files for nullcone 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| nullcone-0.1.2.tar.gz | 160.3 kB | Without provenance | Details for nullcone-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nullcone-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for nullcone-0.1.2-py3-none-any.whl |
Total release size: 341.5 kB
Release files / nullcone-0.1.2.tar.gz
| Download URL | nullcone-0.1.2.tar.gz |
|---|---|
| Size | 160.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0bd73122cc9b9048a4bcd6e7010ea6ae38ef80c03320c8a67a5b00ae935c358c
|
|
BLAKE2b-256 checksum How to use checksums |
e7514f0154103a2b469c434245e2d617119f05ae72babd59504086af662693c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / nullcone-0.1.2-py3-none-any.whl
| Download URL | nullcone-0.1.2-py3-none-any.whl |
|---|---|
| Size | 181.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
845ed279ba79810346aed049b792eb8da8d34315ee6b7cfbefd2f8232b4ee4ee
|
|
BLAKE2b-256 checksum How to use checksums |
0caffab7300052b7092498abcb7da189d3f669d8497753cec74fa6ceebfb177e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for nullcone 0.1.2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.