Skip to main content
Loss of provenance

A previous release had provenance metadata, but this release does not. View details.

nocville

Python SDK for pushing status updates to Nocville.

Installation

pip install nocville

For async support:

pip install nocville[async]

Usage

Synchronous

from nocville import NocvilleClient, Status, Mood

client = NocvilleClient(
    api_key="your-api-key",
    service_id="my-service",
)

# Push a status update
response = client.push_status(
    status=Status.HEALTHY,
    mood=Mood.HAPPY,
    message="All systems operational",
    metrics={"cpu": 45, "memory": 60},
)

# Quick helpers
client.healthy("Everything is fine")
client.warning("High memory usage")
client.critical("Service down!")

Asynchronous

import asyncio
from nocville.client import AsyncNocvilleClient, Status

async def main():
    client = AsyncNocvilleClient(
        api_url="https://your-nocville-server.com",
        api_key="your-api-key",
        service_id="my-service",
    )

    response = await client.push_status(
        status=Status.HEALTHY,
        message="All systems operational",
    )

asyncio.run(main())

Configuration

Option Type Default Description
api_key str required Team API key for authentication
api_url str https://nocville.com Nocville API URL (override for development)
service_id str required The service ID this client represents
timeout float 5.0 Request timeout in seconds
retries int 3 Number of retry attempts on failure
retry_delay float 1.0 Base delay between retries in seconds
debug bool False Enable debug logging

Status Values

  • Status.HEALTHY - Service is operating normally
  • Status.WARNING - Service has non-critical issues
  • Status.CRITICAL - Service has critical issues
  • Status.UNKNOWN - Service status cannot be determined

Mood Values

  • Mood.HAPPY - NPC appears happy
  • Mood.CONCERNED - NPC appears concerned
  • Mood.STRESSED - NPC appears stressed
  • Mood.IDLE - NPC appears neutral

License

MIT

Maps, AI coworkers and shutdown

Both clients accept map="Ops" (map name or ID) and the same keyword-only status fields:

from nocville import NocvilleClient, BehaviorHints, CompanionSpec

client = NocvilleClient(api_key="your-api-key", service_id="build-agent", map="Ops")
behavior: BehaviorHints = {"activity": "busy", "busy": "seek-desk"}
companion: CompanionSpec = {
    "screenType": "desk-sign",
    "placement": "on-desk",
    "size": {"w": 3, "h": 1},
    "label": "checkout-api",
}
try:
    client.push_status(
        "healthy", name="Claude", message="Running tests",
        behavior=behavior, companion=companion,
        appearance={"family": "claude"},
        agent_stats={"added": 12, "removed": 3},
    )
finally:
    client.shutdown()

behavior["activity"] is optional (it is derived from status/mood when omitted). busy and critical move the NPC to its busy target (desk, seek-companion device or equipment); idle follows the idle hint; waiting freezes the NPC wherever it stands with a raised hand and never walks it anywhere. Reserve waiting for "blocked on a human"; send busy for a degraded (warning) service so it stays at its device.

agent_stats becomes agentStats on the wire. Behavior and companion dictionaries use API camelCase keys. offline=True immediately removes the NPC. shutdown() stops and drains heartbeats before sending an unknown/idle/offline sentinel, and returns a PushResponse; use await client.shutdown() for AsyncNocvilleClient.

auto_offline=True opts into a best-effort interpreter-exit callback (default False). For async clients this callback uses a synchronous request because the event loop may already be closed. Prefer explicit shutdown in finally; exit callbacks cannot run after SIGKILL or a crash. Python 3.9 or newer is required.

Silly office characters

The BehaviorHints type supports the built-in office routines. Use matching kind and behavior.role values so the character also gets the right appearance:

client.push_status(
    "healthy",
    kind="office-cat",
    behavior={"role": "office-cat", "activity": "idle"},
)

Keep sending heartbeats while the character should stay in the office. Available roles are receptionist, security, janitor, barista, office-cat, office-dog, plant-caretaker, it-technician, out-of-touch-executive, and slightly-inappropriate-hr. The Nocville server runs movement and dialogue; it must be updated to support these routines. For ready-made CLI processes, use the @nocville/npc npm package.

Metadata

Release files for nocville 0.3.1

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

Loss of provenance

These files do not have provenance metadata, despite files in a prior release including this data.

We recommend further investigation before installing these files. View details.

Source distribution (sdist)

Source distribution for nocville 0.3.1
File Size Uploaded Provenance
nocville-0.3.1.tar.gz 11.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for nocville 0.3.1
File Interpreter ABI Platform
nocville-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 22.8 kB

Release files / nocville-0.3.1.tar.gz

Loss of provenance

This file belongs to a release without provenance metadata, despite a prior release including this data.

We recommend further investigation before installing this file. View details.

Download URL nocville-0.3.1.tar.gz
Size 11.9 kB
Tags Source
SHA-256 checksum
How to use checksums
70a2bdc3009b213d7be4cbcaadb281d8520ad35656a44dc6b7855a66e57623d4
BLAKE2b-256 checksum
How to use checksums
5dc78e2234dc2c83f8ecdc710a56600976923d8d0241c312c01897d34f02b7eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.3

Release files / nocville-0.3.1-py3-none-any.whl

Loss of provenance

This file belongs to a release without provenance metadata, despite a prior release including this data.

We recommend further investigation before installing this file. View details.

Download URL nocville-0.3.1-py3-none-any.whl
Size 10.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fbd7d0c3b72ad7f9be64fa8c905ba2cf75dfbf759257feefe09a0717894a0a99
BLAKE2b-256 checksum
How to use checksums
60e3b8c0921460d81065570c61ae80aac643389a61156908987fa32e99af0200
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.3

Security for nocville 0.3.1

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.

Loss of provenance

A previous release of these files had provenance metadata, but this release does not.

While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.

Release comparison

  • Removed 0.3.0 2 files With provenance
  • Added 0.3.1 2 files Without provenance

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