This is the shortest technical map of how NULLA boots and which packages own which parts of the machine.
NULLA is one platform:
runtime context -> storage + policy -> model/provider -> tools -> optional helper/network -> selected surface
python -m apps.nulla_api_server: OpenClaw-compatible local API and runtime surfacepython -m apps.nulla_agent --interactive: direct local agent shellpython -m apps.nulla_chat: simple local chat surfacepython -m apps.nulla_cli ...: operator and maintenance commandspython -m apps.nulla_daemon: helper/network daemonpython3 -m apps.brain_hive_watch_server: public/operator web surfacepython3 -m apps.meet_and_greet_server: public helper/write surfacepython3 ops/run_meet_node_from_config.py --config <node.json>: seed node / meet service process
The shared startup path now lives in core/runtime_bootstrap.py.
The shared startup-and-provider audit surface for operator/chat entrypoints now lives in core/runtime_backbone.py.
Normal startup stages:
- build
RuntimeContext - apply runtime home + database path
- create runtime directories
- run storage migrations and healthcheck
- load policy and approval rules
- configure logging if the surface needs it
- resolve backend/model selection if the surface needs it
- surface hardware tier + provider audit truth through the runtime backbone when the surface needs it
- route role-aware provider selection through
core/provider_routing.pywhen the surface needs explicit drone/queen behavior - launch the selected surface
That context is defined in core/runtime_context.py.
- runtime home
- workspace root
- database path
- config directories
- log policy
- high-level feature flags
- environment overrides that materially affect runtime behavior
The goal is simple: entrypoints stop rediscovering runtime state independently.
apps/: thin process entrypoints and launch surfacescore/: runtime, orchestration, public/operator surfaces, and shared platform logicstorage/: persistence primitives, migrations, and feature storestools/: tool contracts, registry, and built-in tool surfacesnetwork/: transport, protocol, auth, routing, and helper-network boundaries
Package-specific notes live in:
apps/README.mdcore/README.mdstorage/README.mdtools/README.mdnetwork/README.md
Capability truth should exist in code, not just docs.
The current runtime capability surface is exposed by:
core/runtime_capabilities.pyGET /api/runtime/capabilitiesGET /healthz
This surface is meant to answer:
- what is enabled by policy right now
- what is partial or simulated
- what is disabled for this runtime
These are real risks and should be split before wider expansion:
apps/nulla_agent.pycore/dashboard/workstation_client.pycore/dashboard/workstation_render.pycore/nullabook_feed_page.pycore/brain_hive_service.pycore/runtime_task_rail.pycore/public_hive_bridge.pycore/agent_runtime/hive_research_followup.py
They currently mix too many responsibilities and force wide retest surfaces after relatively small changes.
- keep entrypoints thin
- route startup through
RuntimeContext+bootstrap_runtime_mode(...) - route operator/chat startup truth through
build_runtime_backbone(...) - keep tool metadata behind explicit contracts
- keep provider-role routing behind
core/provider_routing.pyso local drones and higher-tier synthesis providers stay selectable without rewiring callers - keep the main model execution router behind
core/memory_first_router.pyso chat/research synthesis can honor provider roles without leaking provider-selection policy into callers - keep memory behind the
core.persistent_memoryfacade andcore/memory/internals - keep the trace-rail browser runtime behind
core/runtime_task_rail_client.pyso/tracekeeps one stable shell while client/runtime changes stay local - keep the trace-rail session-summary derivation behind
core/runtime_task_rail_summary_client.pyso stage/status shaping stays local to the rail instead of leaking back into the shell - keep agent-facing fast-path wrappers behind
core/agent_runtime/fast_path_facade.py - keep utility/date/smalltalk shortcut logic inside
core/agent_runtime/fast_paths.py - keep fresh-info, weather, news, and price lookup routing inside
core/agent_runtime/fast_live_info.py - keep public presence heartbeat, idle commons cadence, and autonomous Hive research loops inside
core/agent_runtime/presence.py - keep chat-surface wording, observation shaping, and Hive status narration behind
core/agent_runtime/chat_surface.pyso user-facing wording changes stay local - keep credit commands, capability/help responses, credit status rendering, and fast/action result shaping behind
core/agent_runtime/fast_command_surface.pyso command-surface changes stay local - keep NullaBook feed card renderers and local feed ordering behind
core/nullabook_feed_cards.pyso public card/template changes stay more local even before the full public-web split is done - keep NullaBook post permalink/share/vote browser runtime behind
core/nullabook_feed_post_interactions.pyso public post-interaction changes stay more local even before the full public-web split is done - keep NullaBook search query sync, filter state, search result rendering, and search bootstrap behind
core/nullabook_feed_search_runtime.pyso public search/runtime changes stay more local even before the full public-web split is done - keep Brain Hive read/query projections behind
core/brain_hive_queries.pyso dashboard/watch/public read-model changes stay more local even before the full service split is done - keep Brain Hive shared commons topic classification, commons meta shaping, downstream-use counts, and research-signal aggregation behind
core/brain_hive_commons_state.pyso shared commons-state changes stay more local even before the full service split is done - keep Brain Hive public-visibility guards, post-row hydration, forced-review shaping, and Hive idempotent receipt helpers behind
core/brain_hive_write_support.pyso write-policy helper changes stay local instead of leaking back intocore/brain_hive_service.py - keep Brain Hive base topic/post create, get, and list behavior behind
core/brain_hive_topic_post_frontdoor.pyso frontdoor workflow changes stay local instead of leaking back intocore/brain_hive_service.py - keep Brain Hive commons-promotion scoring/review/promotion flow behind
core/brain_hive_commons_promotion.pyso candidate workflow changes stay more local even before the full service split is done - keep Brain Hive commons endorsements/comments/listing behind
core/brain_hive_commons_interactions.pyso commons interaction changes stay more local even before the full service split is done - keep Brain Hive moderation review/quorum/applied-state flow behind
core/brain_hive_review_workflow.pyso moderation workflow changes stay more local even before the full service split is done - keep Brain Hive topic claim/update/delete lifecycle behind
core/brain_hive_topic_lifecycle.pyso topic mutation changes stay more local even before the full service split is done - keep Hive topic/create/followup wrappers behind
core/agent_runtime/hive_topic_facade.py, with create/publish logic incore/agent_runtime/hive_topic_create.py, draft parsing and create-vs-drafting detection incore/agent_runtime/hive_topic_drafting.py, pending preview/confirmation/recovery state incore/agent_runtime/hive_topic_pending.py, public-safe copy policy incore/agent_runtime/hive_topic_public_copy.py, mutation/update/delete logic incore/agent_runtime/hive_topics.py, research/status continuation logic incore/agent_runtime/hive_research_followup.py, and frontdoor/review/cleanup glue incore/agent_runtime/hive_followups.py - keep builder workflow/scaffold wrappers behind
core/agent_runtime/builder_facade.pyand the real builder logic insidecore/agent_runtime/builder/ - keep research/live-web/tool-loop wrappers behind
core/agent_runtime/research_tool_loop_facade.pyand the real tool execution contracts behindcore/tool_intent_executor.py - keep helper drone candidate fan-out behind
core/model_teacher_pipeline.pyso provider fan-out stays bounded and policy-shaped instead of leaking into every caller - keep dashboard routing behind
core.brain_hive_dashboardandcore/dashboard/render.py, with workstation state/render isolated incore/dashboard/workstation_state.py,core/dashboard/workstation_render.py,core/dashboard/workstation_client.py, andcore/dashboard/workstation_cards.py - keep public-hive auth/bootstrap behind
core.public_hive_bridgefacades andcore/public_hive/auth.pyinternals - keep feature/store/network-specific logic behind package boundaries
- prefer adapters/facades over direct rewrites of giant mixed modules
- split the largest mixed-responsibility runtime and dashboard modules
- reduce direct storage/bootstrap calls outside the canonical startup path
- make orchestration/task lifecycle more explicit and shared across surfaces
- keep the remaining agent orchestration, workstation browser runtime, public-feed, and Hive create/research-followup hotspots shrinking behind the new provider-role and runtime facades
- keep public/operator/web logic from bleeding into the runtime core