⚠️ AI-Agent-Only RepositoryThis repo is planned, maintained, and managed exclusively by AI Agents. Slop issues, rough edges, and AI artifacts are expected and intentionally present as part of an HITL-less / minimized AI-DD metaproject focused on learning, refining, and brute-force training both the agents and the human operator. Bug reports and contributions are still welcome, but please expect AI-generated code, comments, and documentation throughout.
Pinned references (Phenotype-org)
- MSRV: see rust-toolchain.toml
- cargo-deny config: see deny.toml
- cargo-audit: rustsec/audit-check@v2 weekly
- Branch protection: 1 reviewer required, no force-push
- Authority: phenotype-org-governance/SUPERSEDED.md
Sidekick collection — Agent micro-utilities for Phenotype org. 3 canonical members, all at gold-standard FR coverage.
A named Rust workspace consolidating core agent infrastructure utilities for the Phenotype ecosystem.
| Name | Repository | Status | FR Prefix | FR Coverage | Purpose |
|---|---|---|---|---|---|
| agent-user-status | agent-user-status | CANONICAL | FR-USR | 67/67 | User presence & status tracking (MCP server) |
| cheap-llm-mcp | cheap-llm-mcp | CANONICAL | FR-LLM | 38/38 | Budget LLM routing (FastMCP + Python) |
| sidekick-messaging | Sidekick/crates/sidekick-messaging | CANONICAL | FR-MSG | Pending | iMessage/SMS messaging bridge adapter (Rust stub) |
| Name | Reason | Audit |
|---|---|---|
| PhenoAgent | <1% test coverage, 0 adopters | W-68D audit |
| phenotype-skills | Empty stub, not ready for adoption | W-68D audit |
Sidekick canonical standard: All canonical members maintain 100% functional requirement traceability.
- agent-user-status: 67 FRs, 100% traced to tests
- cheap-llm-mcp: 38 FRs, 100% traced to tests
- sidekick-messaging: FR scaffolding pending integration
See docs/FUNCTIONAL_REQUIREMENTS.md for the current functional requirement inventory.
cd /Users/kooshapari/CodeProjects/Phenotype/repos/Sidekick
cargo build --release
cargo test --workspace- agent-user-status — MCP tools:
user_status,record_presence_signal,set_user_status, eye-tracking, presence signals - cheap-llm-mcp — Skill routing for low-cost LLM completions (Minimax, Kimi, Fireworks)
- sidekick-messaging — Unified messaging adapter (stub); wraps iMessage, SMS, email via agent-imessage skill
- PhenoAgent — Foundational agent framework; integrates cheap-llm-mcp + agent-user-status + sidekick-messaging
- phenotype-skills — Shared skill definitions consumed by PhenoAgent and external agents
Sidekick is a polyglot workspace:
- Rust crates (
crates/sidekick-*): Compiled binaries and libraries - Python sub-package (
crates/sidekick-cheap-llm): FastMCP wrapper, imported as Python module
Each sub-crate is independently versioned and consumable; consumers import only what they need.
See release-registry.toml for version metadata, stability information, and sub-crate status. The master index of all Phenotype collections is at ../phenotype-collections.toml.
Schema documentation: docs/governance/release_registry_schema.md
Sidekick is part of the Phenotype named collections:
- Sidekick (this) — Agent dispatch & presence
- Eidolon — Device automation (desktop, mobile, sandbox)
- Observably — Distributed tracing & observability
- Stashly — State, events, caching, migrations
- Paginary — Knowledge collection (specs, tutorials, handbooks)
Sidekick uses phenoEvents for cross-collection communication. The historical phenotype-bus repository is archived; event-bus work was migrated to KooshaPari/phenoEvents. Collections emit domain events that other collections consume without hardcoded dependencies:
use phenotype_bus::{Bus, Event};
use serde::Serialize;
#[derive(Clone, Serialize)]
pub struct DispatchStarted {
pub provider: String,
}
impl Event for DispatchStarted {
fn event_name(&self) -> &'static str { "DispatchStarted" }
}
// Emit event
let bus = Bus::new(100);
bus.publish(DispatchStarted { provider: "forge".into() }).await?;
// Subscribe in another collection (e.g., Eidolon)
let mut rx = bus.subscribe();
while let Ok(event) = rx.recv().await {
println!("Got dispatch event: {}", event.event_name());
}See phenoEvents and the collection build matrix for integration details.
Crates published to crates.io under sidekick-* prefix.
Explore Sidekick and other Phenotype collections at the Collections Showcase.
Sibling Collections:
- Eidolon — Unified trait-based device automation (desktop, mobile, sandbox)
- Stashly — Storage & persistence (caching, event sourcing, state machines)
- Observably — Observability & distributed tracing
- Paginary — Knowledge collection (specs, tutorials, handbooks)
- phenotype-shared — Rust infrastructure toolkit (domain, application, ports)
AgilePlus Tracking: All work tracked in /repos/AgilePlus. Review CLAUDE.md for development contracts and policies.
Quality Gates:
cargo build --release --workspace # Full release build
cargo test --workspace # Complete test suite
cargo clippy --workspace -- -D warnings # Zero warnings required
cargo fmt --check # Format validationCrate Publishing: Each sub-crate published independently to crates.io with sidekick-* prefix. Version metadata in root Cargo.toml.
Cross-Collection Integration: Sidekick integrates with phenoEvents for async event streaming; phenotype-bus is archived historical context only. Other collections (Stashly, Observably, Eidolon) consume dispatch events for specialized handling.
- Eidolon — Device automation & virtualization
- Observably — Distributed tracing & observability
- Stashly — State, events, caching, persistence
- Paginary — Knowledge collection
- phenotype-shared — Shared infrastructure
MIT — see LICENSE.
Status: Active development (Phase 2 in progress)
Collections Showcase: https://dev.phenotype.io/collections
Last Updated: 2026-04-24
This repository includes the following cross-cutting documents:
AGENTS.md— operating instructions for AI agents and human contributorsdocs/— design notes, ADRs, and supporting documentation (seedocs/index.md)