Skip to content

agent

agent

SkillOrchestraAgent — the OpenJarvis harness entry point.

A faithful port of the SkillOrchestra eval orchestrator (arXiv:2602.19672, orchestration/eval_frames.py). The agent runs the multi-round search -> reasoning -> answer loop in :mod:.orchestrator, using the verbatim eval_orchestrator prompts, the StageSkillHandbook + RoutingStrategy machinery, real Python subprocess execution, and a model-alias pool collapsed onto the cell's local/cloud pair.

Three things the original needs that this environment does not have, and how each is handled (see README.md in this package for the full note):

  • Learned handbook — produced offline by the explore->learn->select pipeline. With no handbook the orchestrator runs routing_strategy = "none" (the original's baseline mode). Point method_cfg.handbook_path at a StageSkillHandbook JSON to enable skill routing.
  • FAISS wiki retriever — the search tool POSTs to it when method_cfg.retriever_url is set; otherwise it falls back to Anthropic web_search.
  • 6+ model pool — the alias tiers collapse onto the cell's local + cloud models; override per alias with method_cfg.model_pool.

SWE-bench cells are out of scope for the original (it is a QA orchestrator). They run the cloud backbone through the shared mini SWE agent loop instead.

Classes

SkillOrchestraAgent

SkillOrchestraAgent(engine: InferenceEngine, model: str, *, local_model: Optional[str] = None, local_endpoint: Optional[str] = None, cloud_endpoint: str = 'anthropic', cfg: Optional[Dict[str, Any]] = None, bus: Optional[Any] = None, temperature: Optional[float] = None, max_tokens: Optional[int] = None)

Bases: LocalCloudAgent

Inference-time skill-aware orchestrator. See module docstring.

Source code in src/openjarvis/agents/hybrid/_base.py
def __init__(
    self,
    engine: InferenceEngine,
    model: str,
    *,
    local_model: Optional[str] = None,
    local_endpoint: Optional[str] = None,
    cloud_endpoint: str = "anthropic",
    cfg: Optional[Dict[str, Any]] = None,
    bus: Optional[Any] = None,
    temperature: Optional[float] = None,
    max_tokens: Optional[int] = None,
) -> None:
    super().__init__(
        engine,
        model,
        bus=bus,
        temperature=temperature,
        max_tokens=max_tokens,
    )
    self._cloud_model = model
    self._cloud_endpoint = (cloud_endpoint or "anthropic").lower()
    self._local_model = local_model
    self._local_endpoint = local_endpoint
    self._cfg: Dict[str, Any] = dict(cfg or {})

Functions