<!--
title: Centralize shared fields
domain: ai-agents
topic: Code Style
language: Python
source: agent0ai/agent-zero
updated: 2026-02-12
url: https://awesomereviewers.com/reviewers/agent-zero-centralize-shared-fields/
-->

When multiple modules need the same state/config/schema (e.g., context variables like timezone, or prompt search paths), do not replicate those fields or the logic that derives them in several places. Instead, funnel access through a single abstraction and reuse shared utilities.

How to apply:
- Single source of truth: If snapshot/state is the canonical model, expose typed getters/builders (or pass around the snapshot-derived object) so handlers/schedulers don’t individually parse/maintain each field.
- Centralize composition logic: Put “include plugins” (or similar discovery rules) into one shared helper (e.g., `subagents.get_paths(..., include_plugins=True)`) instead of building paths in multiple call sites.
- Small readability refactors: Prefer extracting complex expressions/branches into named variables for clarity (especially around error handling/cleanup).

Example (pattern):
```python
# Instead of each module reading/handling timezone separately,
# make snapshot the source of truth.

# snapshot.py
@dataclass
class SnapshotContext:
    timezone: str
    # ...other shared fields

def build_context_from_snapshot(snapshot: Any) -> SnapshotContext:
    return SnapshotContext(timezone=snapshot.timezone)

# state_sync_handler.py
ctx = build_context_from_snapshot(snapshot)
state_monitor.mark_dirty(sid, reason=reason, timezone=ctx.timezone)

# Or, if StateMonitor only stores projection fields,
# accept an object built from snapshot rather than individual scalars.
```

This reduces “adjust multiple scripts when fields change” and keeps code organization consistent while improving readability.
