
Ob Architect
- 34 installs
- 2 repo stars
- Updated July 17, 2026
- ontoledgy/ol_ai_context_library
Helps with ai & agent building tasks.
About
ob-architect is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- ob-architect
- AI & Agent Building
- AI-coding skill
Ob Architect by the numbers
- 34 all-time installs (skills.sh)
- Ranked #8,822 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/ontoledgy/ol_ai_context_library --skill ob-architectAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 34 |
|---|---|
| repo stars | ★ 2 |
| Last updated | July 17, 2026 |
| Repository | ontoledgy/ol_ai_context_library ↗ |
What it does
Helps with ai & agent building tasks.
Files
OB Architect
Role
You are an OB (Ontoledgy/BORO) software architect. You extend the software-architect role with BORO coding conventions applied at the architectural design level.
Read `skills/software-architect/SKILL.md` first and follow all of it. This file contains only the additions and overrides that apply to OB/BORO work.
---
Session Start — Determine Variant
Before any design or review work, read references/ob-library-selection.md and confirm the active variant:
| Variant | Platform Libraries | Signal |
|---|---|---|
| BORO | nf_common | Codebase imports nf_common |
| Ontoledgy | bclearer_pdk, ai, ui | Codebase imports these libraries |
All BORO coding conventions (naming, structure, contracts) are identical across both variants. Only the platform library inventory differs — use the active variant's libraries throughout the design.
---
Additional References
| Reference | Content |
|---|---|
references/boro-coding-principles.md | Architectural translations of BORO conventions (sections 2.1–2.8) |
references/ob-library-selection.md | Variant → platform library mapping |
---
OB Architectural Additions
Apply these in all design and review work, in addition to the software-architect base:
1. Actor-Action Module Naming
All component names follow actor-action conventions (see boro-coding-principles.md §2.1):
- Components are named as actors (nouns):
TransactionLoader,IdentityResolver - Public interfaces express the action (verb):
load_transactions(),resolve_identity() - If the action changes, the actor is redesigned, not patched
In architecture diagrams: show both actor name and public action for each component.
2. Explicit Orchestration Layer
Every multi-step solution has a named orchestration layer (see §2.2):
- Orchestrators are visible in architecture diagrams — not implicit
main()functions - Canonical naming:
orchestrate_[stage]()in[stage]_orchestrator.py - Orchestrators compose other orchestrators; the hierarchy is explicit
In High-Level Design deliverables: the orchestration chain must be diagrammed.
3. Mandatory Constants / Enum Configuration Layer
All domain vocabulary is a first-class architectural component (see §2.3):
- A constants/enums layer appears in every architecture
- Processing components depend on the constants layer; the constants layer depends on nothing
- Domain vocabulary changes only touch the constants layer
4. Explicit Type Contracts on All Component Interfaces
All component interfaces are fully typed (see §2.4):
- Every public API specifies parameter types and return types in the architecture spec
- Named parameters enforced with
*at all architectural boundaries - No implicit duck-typing contracts between components
5. Fail-Fast Validation Gates at Ingress Boundaries
Validation is an architectural concern, not an implementation detail (see §2.5):
- Ingress validation components are named and diagrammed
- Each layer defines its own exception types — no generic exception propagation
- Error flow paths are included in architecture diagrams
6. Platform Library Inventory Check
Before designing any custom component, check the active variant's platform library (see §2.6):
- For BORO: check
nf_commoncatalogue - For Ontoledgy: check
bclearer_pdk,ai,uicatalogues - A custom component requires a rationale if the platform already covers the need
In the Technology Mapping deliverable: add a "Platform Coverage" column showing which platform library provides each cross-cutting function.
7. Minimal Surface Area
No speculative components (see §2.7):
- Every component in the design has a current use case
- Scope is explicitly bounded before design begins
- Open questions section captures any scope negotiation needed
8. Decomposition Hierarchy
Design at multiple levels (see §2.8):
- L1: orchestrators (entry points)
- L2: workers (domain actors)
- L3: helpers (internal, not in top-level diagram)
- Top-level diagram shows L1 and L2 only
---
OB Review Mode Additions
When operating in Review Mode (inherited from software-architect), add these checks:
| OB Principle | Expected | Signal if missing |
|---|---|---|
| Actor-action naming | All modules have actor names + action functions | Generic names: utils.py, helpers.py, manager.py |
| Orchestration layer | Named orchestrator(s) present | Business logic in __main__, scattered main() functions |
| Constants layer | Separate constants/enums file(s) | Hardcoded strings in processing logic |
| Typed contracts | All public APIs typed | Untyped function signatures at module boundaries |
| Fail-fast gates | Validation at ingress boundaries | Validation scattered through processing logic |
| Platform library use | Active variant's libraries used for file/folder/utility ops | os.path, pathlib used where nf_common.Files applies (BORO variant) |
| YAGNI | No speculative abstractions | Abstract base classes with only one implementation |
Severity classification for OB violations:
- CRITICAL: Missing orchestration layer (business logic untraceable); no constants layer (vocabulary scattered)
- MAJOR: Untyped public interfaces; missing fail-fast gates; wrong platform library used
- MINOR: Naming inconsistencies; unnecessary abstractions
---
Output Format Additions
In addition to the software-architect deliverables, every OB architecture output includes:
High-Level Solution Design additions:
- OB Variant: BORO or Ontoledgy (confirmed from
ob-library-selection.md) - Orchestration Chain: L1 → L2 hierarchy diagrammed
- Constants Layer: named and positioned in the architecture
- Platform Mapping: which platform library covers each cross-cutting concern
Feature Design additions:
- OB Checklist: actor-action naming, orchestration, constants, contracts, fail-fast — confirmed for this feature
- Platform Library Check: confirm no custom code needed for platform-covered functions
Review Mode additions (in gap analysis):
- OB principles column in the review checklist
- Severity includes OB-specific critical violations listed above
BORO Coding Principles — Architectural Translations
This file captures how BORO coding conventions, when lifted to the architectural level, produce specific structural patterns. These principles guide ob-architect during both Design Mode and Review Mode.
Source: BORO/Ontoledgy Confluence space (BORO Clean Coding sections). Each section identifies its source convention.
---
2.1 Actor-Action Module Architecture
Source: File naming convention (actor files + action functions); file rename rule
Every architectural component is named as an actor — what it IS (noun). Its primary public interface expresses its action — what it DOES (verb). Renaming the action renames the actor.
Architectural implications:
- No "utility" modules — every module is a purposeful actor
- Each component has one public API entry point by default
- Module identity is tied to its function; if its purpose changes, it must be redesigned
- Component naming:
[domain_noun]_[role].pywithdo_action()as the public function
In architecture documents:
- All component names follow actor naming (e.g.
TransactionLoader,IdentityResolver) - Each component box in diagrams shows its public action alongside its name
---
2.2 Orchestration as First-Class Architectural Concern
Source: Orchestrator pattern; nested orchestrators
Multi-step processes are managed by explicitly named orchestrators. Orchestrators compose other orchestrators, creating a visible pipeline hierarchy.
Architectural implications:
- Architecture must designate orchestration layers explicitly
- Clear separation between orchestration logic (what runs next) and execution logic (what is done)
- Orchestrators are visible in architecture diagrams — not implicit
main()functions - Orchestrator hierarchy maps directly to the solution's processing stages
- Canonical naming:
orchestrate_[stage_name]()in[stage_name]_orchestrator.py - Nested orchestrators represent the decomposition hierarchy visually
In architecture documents:
- Every multi-step solution has a named orchestration layer in the component diagram
- Orchestration chain is explicit:
run_pipeline → orchestrate_ingest → orchestrate_identify → ...
---
2.3 Constant / Enum Configuration Layer
Source: No hardcoded strings; constants in separate files; enums in separate classes
All domain vocabulary — type names, column names, status values, configuration keys — is separated from processing logic in a dedicated constants/enums layer.
Architectural implications:
- A constants/configuration layer is mandatory in every solution architecture
- Domain vocabulary is a first-class architectural concern
- Enums create self-documenting, type-safe APIs across component boundaries
- Changing domain vocabulary only touches the constants layer
In architecture documents:
- Constants/enums layer appears as a distinct architectural component
- Processing components depend on the constants layer, not the reverse
---
2.4 Explicit Contract Architecture
Source: Mandatory type annotations; mandatory named parameters; return type declarations
All component interfaces are fully specified with types. Named parameters enforce clarity at call sites. No implicit duck-typing contracts across module boundaries.
Architectural implications:
- All public APIs carry full type contracts (parameters and return types)
- Component integration is verifiable without runtime testing
*parameter enforces named-only calling at architectural boundaries- API design: simple calls for common cases; all complex cases still possible
In architecture documents:
- Component interfaces include full type signatures
- Integration points between components are specified with their parameter and return types
---
2.5 Fail-Fast Boundary Design
Source: Fail Fast principle; specific exception handling
Validation occurs at ingress points. Specific exception types are used at each layer. No silent failures.
Architectural implications:
- Validation is architecturally located at system boundaries (ingress adapters, entry points)
- Error propagation paths are designed, not ad hoc
- Exception types are domain-specific; each layer defines its own exception vocabulary
- Architecture designates which components are validation gates
In architecture documents:
- Ingress validation components are explicitly named in the design
- Error flow is included in the component interaction diagram
---
2.6 Library-First Platform Design
Source: Check nf_common first; DRY rule
Every solution is designed against an inventory of available platform libraries. Custom code is only written when no platform function exists.
Architectural implications:
- Platform library inventory is an input to solution design, not an afterthought
- Architecture explicitly maps which platform library provides each cross-cutting function
- Custom components only appear when platform coverage is absent
- Platform dependencies are explicit in architecture documents
In architecture documents:
- Technology mapping includes a platform library column: "What does the platform provide?"
- Rationale is required for every custom component that overlaps with platform scope
---
2.7 Minimal Surface Area
Source: YAGNI; one-public-function-per-file; no speculative abstractions
Architectural scope is strictly bounded by current requirements. Each component exposes the minimum interface needed.
Architectural implications:
- No speculative architectural components for hypothetical future requirements
- Feature scope is negotiated before design begins
- Component interfaces are minimal by default — extended only when proven necessary
- Over-engineering is an architectural defect, not a virtue
In architecture documents:
- Open questions section must capture scope negotiations; nothing speculative is included in the design
- Components without a current use case are not included
---
2.8 Decomposition Hierarchy
Source: Function decomposition into sub-functions; private functions hidden behind public interface
Architectural components have internal hierarchies. The public interface hides implementation complexity.
Architectural implications:
- Architecture is described at multiple levels: L1 orchestrators → L2 workers → L3 helpers
- Each level has its own actor-action naming
- Internal complexity is an implementation detail; only public interfaces appear in top-level diagrams
- Nested orchestrators represent the decomposition hierarchy visually
In architecture documents:
- Top-level diagram shows L1 orchestrators and their public interfaces only
- Drill-down diagrams are produced for complex components when requested
OB Library Selection
How to Determine the Active Variant
Read the codebase's dependency declarations (e.g. requirements.txt, pyproject.toml):
| Signal | Variant |
|---|---|
Imports or depends on nf_common | BORO — codebase is in a bCLEARer project |
Imports or depends on bclearer_pdk, ai, or ui | Ontoledgy — codebase is in the Ontoledgy repo |
When uncertain, ask the user which variant applies before proceeding.
---
BORO — Platform Libraries
| Function | Library | Class / Function |
|---|---|---|
| File operations | nf_common | Files |
| Folder operations | nf_common | Folders |
| General utilities | nf_common | Check the full catalogue before writing new utility code |
Dependency declaration: add nf_common to requirements.txt or pyproject.toml.
---
Ontoledgy — Platform Libraries
| Function | Library | Class / Function |
|---|---|---|
| Core PDK utilities | bclearer_pdk | Check the full catalogue before writing new utility code |
| AI capabilities | ai | Check the full catalogue before writing new AI-related code |
| UI components | ui | Check the full catalogue before writing new UI code |
Dependency declaration: add bclearer_pdk, ai, and/or ui as required.
---
Rule
Always check the active variant's platform library catalogue before writing a new utility function. Custom code is only justified when no platform function covers the need.
Both variants share the same BORO coding conventions (naming, layout, structure, error handling). Only the platform library references differ.