By rustakka
Skills for AI coding assistants working on projects that depend on atomr-agents — quickstart, Pipeline + LCEL decorators, channelled state with checkpointing, dynamic HITL interrupts, retriever zoo + ingestion, tools + RichTool, agent middleware, multi-agent topologies, eval suites, run-tree observability, troubleshooting, and LangGraph/LangChain migration.
Use when writing eval suites, picking a `Scorer` (Contains / LlmJudge / Rubric / Pairwise), gating publication on `RegressionGate`, queuing items for human annotation, or wiring online eval. Triggers on `EvalSuite { ... }`, `EvalSuite::run`, `LlmJudgeScorer::new`, `PairwiseScorer::compare`, `RegressionGate::check`, or `Registry::publish_gated`.
Use when adding human-in-the-loop pause/resume — dynamic `interrupt()` from a step, static breakpoints (`interrupt_before` / `interrupt_after`), or driving resume with `Command::{Continue, Resume, Update, Goto}`. Triggers on writing `Interruptible { ... }`, calling `ctrl.interrupt(...)`, or porting a LangGraph `interrupt()` / `Command(resume=...)` flow.
Use when porting LangGraph or LangChain code to atomr-agents — translating `StateGraph` / `Runnable` / `RunnableSequence` / `MemorySaver` / `interrupt` / `Command` / `ToolNode` / retriever zoo / output parsers / `create_agent` middleware. Triggers on porting an existing LangChain / LangGraph project, or asking "how do I do X from LangGraph in atomr-agents".
Use when turning a diarized STT transcript into structured meeting artifacts in atomr-agents — building a `MeetingsHarness`, accumulating a `MeetingAnalysis` (attendees, notes, actions-with-owners, tiered summaries), picking batch vs live mode, persisting via the configured `Checkpointer` under the same `conversation_id` as the source transcript, or serving the meetings review UI (`meetings-harness-web`). Triggers on `MeetingsHarness`, `MeetingAnalysis`, "extract action items", "meeting summary", "attendees from transcript", "live meeting analysis", `atomr_agents.meetings_harness`.
Use when wrapping the agent's per-turn pipeline with cross-cutting policies — logging, retry, rate-limit, redaction, tool-error recovery, dynamic prompt override, before/after hooks. Triggers on `impl AgentMiddleware for`, `MiddlewareStack::new().push(...)`, or porting a LangChain `create_agent` middleware (`@wrap_model_call` / `@wrap_tool_call` / `@dynamic_prompt`).
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
A native Rust agentic framework built as a layered actor / strategy / harness substrate on top of atomr and atomr-infer. atomr-agents gives you a single mental model — pluggable strategies that resolve under shared budgets, channelled state with first-class checkpointing, tool-call orchestration with parallel dispatch, and durable harness loops — that scales from a one-off chatbot to a multi-tenant production agent platform.
use atomr_agents::prelude::*;
// One Pipeline composes prompt → model → parser like LCEL.
let pipeline = Pipeline::from(prompt)
.then(model)
.then(parser)
.build();
let answer = pipeline.call(input, ctx).await?;
The Python facade ships every Rust capability. The native extension
atomr_agents._native is split into 28 hierarchical submodules:
foundational (errors, core, callable_, strategy,
instruction, context, state, observability, cache,
parser, registry); tool / skill / memory / retrieval / ingest
(tool, skill, memory, embed, retriever, ingest,
persona); agent / workflow / harness / org / eval (agent,
workflow, harness, org, eval); voice (stt, tts,
voice, voice_extras); plus the guest registry. The
top-level package re-exports the most-used classes, ships a PEP 561
py.typed marker, and exposes async coroutines / async iterators
over pyo3-async-runtimes.
pip install atomr-agents
For an editable workflow against the local checkout:
pip install maturin
maturin develop --features python -m crates/py-bindings/Cargo.toml
pip install -e ".[dev]"
EventBus.stream() returns an EventStream that implements the
Python async iterator protocol. Drive a producer on the same loop
and consume events as they fire:
import asyncio
from atomr_agents.observability import EventBus
async def main() -> None:
bus = EventBus()
stream = bus.stream()
bus.emit_tool_invoked("calc", args_hash=0, elapsed_ms=5, ok=True)
bus.emit_tool_invoked("search", args_hash=1, elapsed_ms=12, ok=True)
async for ev in stream:
print(ev.kind, ev.timestamp_ms)
if ev.kind == "tool_invoked" and ev.tool == "search":
break
asyncio.run(main())
Registry.publish_async returns a Python awaitable backed by a
tokio future, so version pins land without blocking the event loop:
import asyncio
from atomr_agents.registry import Registry
async def main() -> None:
registry = Registry()
record = await registry.publish_async(
"tool_set", "calc", "0.1.0", {"name": "calc"}
)
print(record.kind, record.id, record.version)
asyncio.run(main())
@tool decoratoratomr_agents.guest exposes real decorators wired through
_native.guest.register_*_factory. A guest tool is a class with an
async def invoke(self, args, ctx) method:
from atomr_agents.guest import tool
@tool(toolset="calc")
class Add:
name = "add"
async def invoke(self, args: dict, ctx) -> dict:
return {"sum": args["a"] + args["b"]}
Mirror decorators are available for the full set of 24 Rust traits:
@strategy(kind=...), @persona, @skill, @parser, @scorer,
@memory_store, @embedder, @callable_, @retriever, @loader,
@splitter, @kv_cache, @long_store, @tracer,
@conversation_agent, @diarizer, @vad, @phonemizer,
@journal, @repair_model, @persona_reconciler,
@inference_client, @ann_index. Each pairs with an
atomr_agents.<module>.*_from_factory(key) builder that
materialises the registered Python target as a Rust dyn handle.
AgentBuilder assembles strategy slots into a runnable AgentRef
that implements Callable, so an agent composes with the same
decorators and pipeline operators as any other unit:
from atomr_agents.agent import AgentBuilder
from atomr_agents.harness import Harness, iteration_cap, loop_strategy_from_callable
from atomr_agents.workflow import Dag, Step, WorkflowRunner
# Strategy slots come from in-process factories or Python guests.
builder = AgentBuilder("research-agent", "gpt-4o-mini")
builder.with_instructions(instructions)
builder.with_tools(tool_strategy)
builder.with_memory(memory_strategy)
builder.with_skills(skill_strategy)
builder.with_inference(inference_client)
agent_ref = builder.build()
result = await agent_ref.run_turn("What's the GDP of France?")
# The agent is itself a Callable — drop it into a workflow.
dag = Dag("plan")
dag.add_step("plan", Step.invoke(agent_ref.as_callable()))
runner = WorkflowRunner("research-wf", dag.build())
await runner.run({"user": "..."})
npx claudepluginhub rustakka/atomr-agents --plugin atomr-agents-ai-skillsReliable automation, in-depth debugging, and performance analysis in Chrome using Chrome DevTools and Puppeteer
Comprehensive feature development workflow with specialized agents for codebase exploration, architecture design, and quality review
Core skills library for Claude Code: TDD, debugging, collaboration patterns, and proven techniques
Harness-native ECC operator layer - 67 agents, 271 skills, 92 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses
Design fluency for frontend development. 1 skill with 23 commands (/impeccable polish, /impeccable audit, /impeccable critique, etc.) and curated anti-pattern detection.
Behavioral guidelines to reduce common LLM coding mistakes, derived from Andrej Karpathy's observations on LLM coding pitfalls