Skip to main content

A11

A concurrent action and streaming runtime for building AI agents.

A11 lets you write agents as ordinary async def code: values stream between producers and consumers, work is packaged as composable actions, and the same code runs in one process or across a network with a transport swap. The API is Python; the runtime underneath is a native C++20 implementation, so the streaming and concurrency stay fast and off the event loop's critical path.

📖 Documentation →

Install

pip install "a11-kit[llm]"

The [llm] extra pulls in the Anthropic and Google model SDKs. Drop it for the core runtime only.

See it in 30 seconds

Chat with a model right from the terminal (streaming its reply, and its thoughts with -v):

export GEMINI_API_KEY=...        # or ANTHROPIC_API_KEY
a11 chat -v

The ideas

A11 is small at its core — a few ideas compose into everything from a one-file helper to a fleet of networked agents. (The Principles page goes deeper.)

  • Everything is asynchronous. Every operation that can wait is a coroutine you await; the runtime schedules thousands cooperatively. Completion is an event (await action.done.wait()) and lifecycles are context managers that finalise — or abort with the right status — for you.
  • Everything is a stream. The unit of state is a node: a single ordered sequence of chunks with a writer end and a reader end. An agent rarely has its whole answer at once — it has the next token, frame, or tool call — so nodes make incremental production and consumption the natural shape, with backpressure built in.
  • Actions are wired streams. An action's typed input/output ports are nodes, so calling one is wiring streams together. A handler can emit output before it has finished reading input — exactly what streaming an LLM response through a pipeline looks like.
  • Two extension points: storage and transport. A ChunkStore is the log behind a node (swap the in-memory default for disk, a database, or fault injection); a WireStream moves bytes between peers (in-process, WebSocket, HTTP SSE, WebRTC). Everything above them is unchanged, so making an agent distributed is a transport swap, not a rewrite.
  • Sessions tie it together. A Session multiplexes wire streams, dispatches incoming action calls against a registry, and drains and closes the connection cleanly.

A taste

Produce into a node and read it back — backpressure and finalisation included:

import asyncio
import a11


async def main() -> None:
    async with a11.AsyncNode.create("tokens") as node:   # seals on exit
        for word in ["A11", "streams", "everything"]:
            await node.put(word)                          # await = backpressure

    async for token in node:
        print(token)


asyncio.run(main())

Stream a model's reply through that same node abstraction — interact_with_llm is just an action whose text_output port carries tokens as they arrive:

import a11
from a11.sdk.interact_with_llm import INTERACT_WITH_LLM_SCHEMA, interact_with_llm
from a11.sdk.llm import LlmHeaders

interact = (
    a11.Action(INTERACT_WITH_LLM_SCHEMA)
    .bind_handler(interact_with_llm)
    .set_header(LlmHeaders.PROVIDER.value, "gemini")
    .set_header(LlmHeaders.MODEL.value, "gemini-3.5-flash")
    .run()
)

# ...then, inside your async code, feed the conversation in and stream the reply:
async for chunk in interact["text_output"]:   # tokens as the model emits them
    print(chunk, end="", flush=True)

The guides build these up step by step — from a node, to a WebSocket echo session, to calling an action on a remote server, to a tool-using agent.

Learn more

  • Documentation — principles, guides, and the full Python API reference.
  • Guides — hands-on walkthroughs from a single stream to a networked, tool-using agent.
  • Examples — runnable programs under examples/.

Building the C++ runtime

A11's runtime is a standalone C++20 library you can build and link without Python. The steps below are self-contained; for the editable Python build, wheel matrix, testing workflow, and architecture, see BUILDING.md.

1. Install the tools, then build the C++ libraries. A11 links a pinned set of statically-built libraries (Boost, OpenSSL, libcurl, nghttp2, hiredis, nlohmann-json, uvw) rather than system copies; scripts/bootstrap_wheel_deps.sh builds them into a per-architecture prefix. From Homebrew you install only the tools (a C++20 compiler, CMake ≥ 3.28, Ninja; Linux tool package names vary):

brew install cmake googletest ninja pkg-config

export A11_DEPS_PREFIX="$HOME/.cache/a11-deps/$(uname -m)"
export CMAKE_PREFIX_PATH="$A11_DEPS_PREFIX"
export OPENSSL_ROOT_DIR="$A11_DEPS_PREFIX"
export PKG_CONFIG_PATH="$A11_DEPS_PREFIX/lib/pkgconfig"
export MACOSX_DEPLOYMENT_TARGET=14.4   # macOS only
scripts/bootstrap_wheel_deps.sh

CMake still fetches the pinned Abseil (and libdatachannel, for WebRTC) automatically. See BUILDING.md for the full rundown.

2. Configure, build, and install to a prefix (the exports above point CMake at the dependency prefix):

cmake -S . -B build -G Ninja \
  -DCMAKE_BUILD_TYPE=Release \
  -DA11_BUILD_PYTHON=OFF \
  -DCMAKE_OSX_DEPLOYMENT_TARGET=14.4 \
  -DCMAKE_INSTALL_PREFIX="$PWD/install"

cmake --build build -j
cmake --install build

On macOS, pass -DCMAKE_OSX_DEPLOYMENT_TARGET=14.4 as shown — it must match the value the prefix was bootstrapped with. Setting it as a cache variable here (not only via the MACOSX_DEPLOYMENT_TARGET environment export, which CMake may not pick up) is what enables the Boost.Fiber futex spinlock; a lower target compiles Boost.Fiber without futex support and fails with "futex not supported on this platform". The flag is ignored on Linux.

3. Use it from your own CMake project. The install exports a CMake package named a11 with per-component targets (a11::service links the whole runtime). Point your consumer's CMAKE_PREFIX_PATH at both the install prefix and the dependency prefix from step 1, so the transitive static Boost/OpenSSL/… resolve:

find_package(a11 CONFIG REQUIRED)

add_executable(my_agent main.cc)
target_link_libraries(my_agent PRIVATE a11::service)
target_compile_features(my_agent PRIVATE cxx_std_20)
#include "a11/nodes/node_map.h"

int main() {
  auto node_map = a11::nodes::NodeMap::Create();
  return node_map.ok() ? 0 : 1;
}

Configure your project with -DCMAKE_PREFIX_PATH=/path/to/install so find_package locates it. The generated C++ API reference is published alongside the docs.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

a11_kit-0.2.5.tar.gz (826.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

a11_kit-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl (10.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

a11_kit-0.2.5-cp314-cp314-manylinux_2_28_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

a11_kit-0.2.5-cp314-cp314-macosx_14_0_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.14macOS 14.0+ x86-64

a11_kit-0.2.5-cp314-cp314-macosx_14_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.14macOS 14.0+ ARM64

a11_kit-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl (10.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

a11_kit-0.2.5-cp313-cp313-manylinux_2_28_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

a11_kit-0.2.5-cp313-cp313-macosx_14_0_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.13macOS 14.0+ x86-64

a11_kit-0.2.5-cp313-cp313-macosx_14_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

a11_kit-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl (10.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

a11_kit-0.2.5-cp312-cp312-manylinux_2_28_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

a11_kit-0.2.5-cp312-cp312-macosx_14_0_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.12macOS 14.0+ x86-64

a11_kit-0.2.5-cp312-cp312-macosx_14_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

a11_kit-0.2.5-cp311-cp311-manylinux_2_28_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

a11_kit-0.2.5-cp311-cp311-manylinux_2_28_aarch64.whl (9.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

a11_kit-0.2.5-cp311-cp311-macosx_14_0_x86_64.whl (8.1 MB view details)

Uploaded CPython 3.11macOS 14.0+ x86-64

a11_kit-0.2.5-cp311-cp311-macosx_14_0_arm64.whl (7.9 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

File details

Details for the file a11_kit-0.2.5.tar.gz.

File metadata

  • Download URL: a11_kit-0.2.5.tar.gz
  • Upload date:
  • Size: 826.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for a11_kit-0.2.5.tar.gz
Algorithm Hash digest
SHA256 3b028f59578cb7dad2368a9eb4aec6eed1cbdb7d83c500ac3cd7a13e941dc4ce
MD5 63029c90056fc0eb2a6b28163abf6d1e
BLAKE2b-256 f570a29861ef8d4f5e35e688b20247099514593bf879fe45d0a4670e0931990b

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5.tar.gz:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bdb01ef50bb80a0fd184857824da9ae7d9b6b2fd300c5fe2bcc8e3321ca59dcc
MD5 8d134c034354916eb84a0c5f27bcbb1b
BLAKE2b-256 815962f7747d305bc0fccf7f935d8195db257e64690cedf6b95786dbeb051ff1

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a2a72b3ab59543403fd8814152279a4a26a5a4d1fcf6586b09dcb1780408f2af
MD5 bbe9719e1a11cbe2337ba41e854a229e
BLAKE2b-256 df5792ead938231ecb22293b5281d584b45739bd973f43c923a8cfc652a902f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp314-cp314-manylinux_2_28_aarch64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp314-cp314-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp314-cp314-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 0e12e6813000fb29b113d0c03075840e3b8c3e0346526816b086fd42b2ebd462
MD5 1c98abdcba8e3606f772b383c90dd082
BLAKE2b-256 165ef377fa73e956c0f7b3568b7036076d51a57c12297d38c44e4d9f42c15706

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp314-cp314-macosx_14_0_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp314-cp314-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp314-cp314-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 73f811ab42194b9dd0c9a08c94fcd6695ce6756db2f8402db379c847be0f444e
MD5 5c99be50a5c830ec41e4e4906b8510d4
BLAKE2b-256 aaa215513d2f85a9d3eb54d8c01e33a30ed248ff1df75824029ef68925eed8cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp314-cp314-macosx_14_0_arm64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6a02cc61ff63b5d2ee4b9377b1d5f2e73fc8441a1308e23566bdbe3631d2435d
MD5 1923d7c421ebe1b04896ae632e40707e
BLAKE2b-256 f257be17fa7da0cffa95744ae2d09c0435f39c23736f5cd05f31229684c409dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 43f19a6bed59f396bfad4ddb960a4e36170aa5378621873e6578f5439c9e06ae
MD5 23b7a2e61caade6739d45320622c3456
BLAKE2b-256 8da7b37c18582302c63c889cbe9ca58a492d87695ab783a8bf1f2a428d01686a

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp313-cp313-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp313-cp313-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 24f4f0d08afe7f89ce1d22c3f4fd04b826f1eec01d83f538e210fbf1aea70111
MD5 83d94a8784b79db76ac3975679a29981
BLAKE2b-256 7fc1eec73c5ce2f603346c297911a3cfc132088667ee752f793b48f19e02a5f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp313-cp313-macosx_14_0_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 852f55a3692ff4eb7c8ee28ac22e3c63805e53f9c1381d336a06878b97d8a792
MD5 2351905211ffa6c7316c127d6b00871d
BLAKE2b-256 08916053b03fc732d0013697228288d35ad475c11da5fb77341ac860dc95cc51

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp313-cp313-macosx_14_0_arm64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7c14bcc7cf2fade1c1edd59a396b4b2bd3e5b9619c72d74b3d9e078643ce7aef
MD5 b7cbbf8e3bad67615c4deff6d15a2603
BLAKE2b-256 8489c1279d93842b2986d4c16bb834f831e874c436ee015f14b45bdc47211228

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1481644b546d1c255673873b2d025f89773d8ca000b0e3b5b80c1cec024c61f6
MD5 59ac8cdc6b12218851169a8aa393eef7
BLAKE2b-256 af62f69e3ede8adc7fcb48dd8df7abdc5d0410956b5c9dc39dc6b43c30a7adf5

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp312-cp312-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp312-cp312-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 694c21bd3574baf8f5b4a984331499a269479ab08a389273512e8964bba1eb66
MD5 7a20948d20ad6f15eecbd7fc26fdeb9a
BLAKE2b-256 4404b502efd2a28066799c181697e478d330cd19e2c03da0d05f8f0b95928a94

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp312-cp312-macosx_14_0_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 99e467225a04f551425db1ff590cf18bff77da74be6f3e0b259dd90cdedb8bf0
MD5 4bedd74e99fc88c05777989911daf35c
BLAKE2b-256 541ecc508b85248bb0181f180a79ce30fe37c1a45945664e8bedc6a544cb87b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 508d9cf5f71f5059d4033b3095a4c23b1b36f7014a80687e0d3b38a7d1d6a04c
MD5 441195c020981fdbb117ebdf86e4b9c9
BLAKE2b-256 921fd01431d711adb94dabcb626dce6b900a3ecafcc7dac0058f1ffe3dda2311

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e62843c9044bc91247dc80868d8e9a9ec404877af763fa193b80a8ea4ad9bf25
MD5 b50ae2c4d191ff9587a7801446b927a2
BLAKE2b-256 f1a25f2dea7ca3898d619bb23372b95595d769fdf702acf93d0e10af1ab40a8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp311-cp311-macosx_14_0_x86_64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp311-cp311-macosx_14_0_x86_64.whl
Algorithm Hash digest
SHA256 2a56801cf3407e8d6c3da3339857170e7d4422cd537d7b63f2a84d00d309f095
MD5 a12e5f333256db7f3d5065475d5b2d0a
BLAKE2b-256 1522d99e905d47f8b5289150cbb3863ba878a2b1ca2b965a53601704fb538f20

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp311-cp311-macosx_14_0_x86_64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a11_kit-0.2.5-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for a11_kit-0.2.5-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 7ae0bb7902ac2d0cf59c61fc33c9c4607d7e6a1fb23cf9eb19f3bdb09e023d27
MD5 24d7a4f465efdfd8d823298779ffd8ad
BLAKE2b-256 34241ee17db940a53521b0efdfda4605098165f9be83cca38d51467c31ba9cc5

See more details on using hashes here.

Provenance

The following attestation bundles were made for a11_kit-0.2.5-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: release.yml on hpnkv/a11

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.6

17 files

0.5.5

17 files

0.5.4

17 files

0.5.3

17 files

0.5.2

17 files

0.5.1

17 files

0.5.0

17 files

0.4.6

17 files

0.4.4

17 files

0.4.2

17 files

0.4.1

17 files

0.3.3

17 files

0.3.2

17 files

0.3.1

17 files

0.3.0

17 files

This release

0.2.5 This release

17 files

0.2.3

17 files

0.2.2

17 files

0.2.1

17 files

0.2.0

17 files

0.1.8

17 files

0.1.7

17 files

0.1.6

17 files

0.1.5

16 files

0.1.4

16 files

0.1.3

8 files

0.1.2

8 files

0.1.1

17 files

0.1.0

3 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