# Company Manager can run Company Routines

> Agno CompanyOS Routines can now set executor_id to company-manager-internal, so the built-in Company Manager runs a scheduled Product review with no application agent of your own.

- Published: 2026-10-21
- Author: Ashpreet Bedi
- Categories: Changelog
- Canonical: https://www.agno.com/blog/company-manager-can-run-company-routines
- Markdown: https://www.agno.com/blog/company-manager-can-run-company-routines.md

Agno [CompanyOS](https://www.agno.com/blog/introducing-companyos) Routines now accept `executor_id='company-manager-internal'`, and AgentOS resolves that ID from the AgentOS that owns the Company, then schedules `POST /agents/company-manager-internal/runs`.

```python
Routine(
    name="weekly-review",
    executor_type="agent",
    executor_id="company-manager-internal",
    cron_expr="0 9 * * 1",
    timezone="Europe/London",
    instructions=REVIEW,
    auto_accept=False,
)
```

Earlier releases looked Routine executors up only in the reusable registry, which leaves the framework managers out on purpose, so this Routine failed at bootstrap. The old `product-manager-internal` ID failed the same way. We ran the same declaration on both releases with SQLite and no model call.

![Real output from bootstrapping one declared Product on SQLite. With executor_id company-manager-internal, earlier releases raise ValueError Routine executor is missing from the registry, and this release saves the schedule endpoint /agents/company-manager-internal/runs. With executor_id os-manager-internal, earlier releases raise the same missing-from-registry error, and this release raises ValueError Only the Company Manager can execute Routines among framework managers.](https://www.agno.com/images/v3-1-8-company-manager-routine.png)

The `/company/routines` API gives the same answer: a `201` with that endpoint for Company Manager, and a `422` for OS Manager. Company Manager is the only framework manager allowed here. OS Manager, Platform Builder and Platform Manager can edit the platform, and a Routine runs unattended on Source content. Saved or user-defined components can't claim the reserved IDs, and a stale archived catalog row no longer collides with them.

The declaration works with or without `OSManager`. AgentOS always serves Company Manager at its own agent routes, and when OS Manager is on, the team gets a separate Company Manager member that carries OS Manager's `member_tool_call_limit`. Product Manager is now called Company Manager. `AgentOS.product_manager` still works as a deprecated alias of `AgentOS.company_manager`.

A Routine run by Company Manager keeps the usual limits. Company Manager has no scheduler tools, and it can't be accepted as a Task executor. Two reporting gaps are fixed for every Routine too. A denied `update_company_status` write now fails the run, and so does a Studio `run_agent`, `run_team` or `run_workflow` delegation that comes back with an error. If you call `rehydrate_product` or `CompanyManager.create_routine` from Python, pass `agent_os=agent_os` so the manager can be found.

See the [cookbook](https://github.com/agno-agi/agno/blob/main/cookbook/05_agent_os/30_company/10_weekly_product_review.py), and learn more about [the scheduler](https://docs.agno.com/agent-os/scheduler/overview) in the documentation.
