From 1cc87a094a5e314da887848897590cedfe328377 Mon Sep 17 00:00:00 2001 From: soumyagalileo Date: Tue, 10 Mar 2026 20:37:28 -0700 Subject: [PATCH 1/5] docs: add centered logo, header, and badges to README Add the AgentControl Black Logomark at the top of the README and center-align the image, heading, and badge tags for a polished look. Co-Authored-By: Claude Opus 4.6 --- README.md | 22 +++++++++++------- docs/images/AgentControl - Black Logomark.png | Bin 0 -> 2881 bytes 2 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 docs/images/AgentControl - Black Logomark.png diff --git a/README.md b/README.md index f31d9202..68ef4960 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,17 @@ -# Agent Control - -[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/) -[![PyPI version](https://img.shields.io/pypi/v/agent-control-sdk.svg)](https://pypi.org/project/agent-control-sdk/) -[![npm version](https://img.shields.io/npm/v/agent-control.svg)](https://www.npmjs.com/package/agent-control) -[![CI](https://github.com/agentcontrol/agent-control/actions/workflows/ci.yml/badge.svg)](https://github.com/agentcontrol/agent-control/actions/workflows/ci.yml) -[![codecov](https://codecov.io/gh/agentcontrol/agent-control/branch/main/graph/badge.svg)](https://codecov.io/gh/agentcontrol/agent-control) +

+ Agent Control Logo +

+ +

Agent Control

+ +

+ License + Python 3.12+ + PyPI version + npm version + CI + codecov +

> **💡 Pro Tip:** Checkout [docs](https://docs.agentcontrol.dev/) for complete reference diff --git a/docs/images/AgentControl - Black Logomark.png b/docs/images/AgentControl - Black Logomark.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2f6adcc327deba07f4a6a00f5a6be0bf3e68f8 GIT binary patch literal 2881 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 literal 0 HcmV?d00001 From 0c413930a2d6209956209a2f94c41b511ff47f86 Mon Sep 17 00:00:00 2001 From: siddhant-galileo Date: Wed, 11 Mar 2026 13:44:56 +0530 Subject: [PATCH 2/5] fix: show logo based on current theme --- README.md | 11 ++++++++++- docs/images/AgentControl-logo-dark.png | Bin 0 -> 2864 bytes ... Logomark.png => AgentControl-logo-light.png} | Bin 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 docs/images/AgentControl-logo-dark.png rename docs/images/{AgentControl - Black Logomark.png => AgentControl-logo-light.png} (100%) diff --git a/README.md b/README.md index 68ef4960..01fc59ef 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,14 @@

- Agent Control Logo + Agent Control Logo (light) + Agent Control Logo (dark)

Agent Control

diff --git a/docs/images/AgentControl-logo-dark.png b/docs/images/AgentControl-logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6daf4c51a19fa66393694a0f1ff3469313fe69e8 GIT binary patch literal 2864 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 Date: Wed, 11 Mar 2026 13:49:45 +0530 Subject: [PATCH 3/5] use relative link --- README.md | 114 +++++++++++++++++++++++++++++------------------------- 1 file changed, 62 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 01fc59ef..b147c694 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@

Agent Control Logo (light) Agent Control Logo (dark) @@ -24,7 +24,7 @@ > **💡 Pro Tip:** Checkout [docs](https://docs.agentcontrol.dev/) for complete reference -> **👋 Say hello to us:** Checkout our [Slack](https://join.slack.com/t/agentcontrol/shared_invite/zt-3s2pbclup-T4EJ5sA7SOxR6jTeETZljA). Pop in to ask for help, suggest features, or just to say hello! +> **👋 Say hello to us:** Checkout our [Slack](https://join.slack.com/t/agentcontrol/shared_invite/zt-3s2pbclup-T4EJ5sA7SOxR6jTeETZljA). Pop in to ask for help, suggest features, or just to say hello! **Runtime guardrails for AI agents — configurable, extensible, and production-ready.** @@ -32,8 +32,8 @@ AI agents interact with users, tools, and external systems in unpredictable ways ![Agent Control Architecture](docs/images/Architecture.png) - ## Why Do You Need It? + Traditional guardrails embedded inside your agent code have critical limitations: - **Scattered Logic:** Control code is buried across your agent codebase, making it hard to audit or update @@ -41,6 +41,7 @@ Traditional guardrails embedded inside your agent code have critical limitations - **Limited Adaptability:** Hardcoded checks can't adapt to new attack patterns or production data variations **Agent Control gives you runtime control over what your agents can and cannot do:** + - **For developers:** Centralize safety logic and adapt to emerging threats instantly without redeployment - **For non-technical teams:** Intuitive UI to configure and monitor agent safety without touching code - **For organizations:** Reusable controls across agents with comprehensive audit trails @@ -57,13 +58,13 @@ Traditional guardrails embedded inside your agent code have critical limitations ## Performance -| Endpoint | Scenario | RPS | p50 | p99 | -|----------|----------|-----|-----|-----| -| Agent init | Agent with 3 tool steps | 509 | 19 ms | 54 ms | -| Evaluation | 1 control, 500-char content | 437 | 36 ms | 61 ms | -| Evaluation | 10 controls, 500-char content | 349 | 35 ms | 66 ms | -| Evaluation | 50 controls, 500-char content | 199 | 63 ms | 91 ms | -| Controls refresh | 5-50 controls per agent | 273-392 | 20-27 ms | 27-61 ms | +| Endpoint | Scenario | RPS | p50 | p99 | +| ---------------- | ----------------------------- | ------- | -------- | -------- | +| Agent init | Agent with 3 tool steps | 509 | 19 ms | 54 ms | +| Evaluation | 1 control, 500-char content | 437 | 36 ms | 61 ms | +| Evaluation | 10 controls, 500-char content | 349 | 35 ms | 66 ms | +| Evaluation | 50 controls, 500-char content | 199 | 63 ms | 91 ms | +| Controls refresh | 5-50 controls per agent | 273-392 | 20-27 ms | 27-61 ms | - Agent init handles both create and update identically (upsert). - All four built-in evaluators (regex, list, JSON, SQL) perform within 40-46 ms p50 at 1 control. @@ -74,7 +75,7 @@ _Benchmarked on Apple M5 (16 GB RAM), Docker Compose (`postgres:16` + `agent-con ### Examples -Explore real-world integrations with popular agent frameworks, or jump to [Quick Start](#quick-start) for hands-on setup. +Explore real-world integrations with popular agent frameworks, or jump to [Quick Start](#quick-start) for hands-on setup. - **[Examples Overview](examples/README.md)** — Working code examples and integration patterns - **[TypeScript SDK (npm consumer)](examples/typescript_sdk/)** — Monorepo example that installs `agent-control` from npm @@ -88,15 +89,19 @@ Explore real-world integrations with popular agent frameworks, or jump to [Quick ### Installation -**Prerequisites**: -* Python 3.12+ -* Docker +**Prerequisites**: + +- Python 3.12+ +- Docker + +#### SDK only + +Install our SDK in your project - `pip install agent-control-sdk` -#### SDK only -Install our SDK in your project - `pip install agent-control-sdk` > **📝 Note:** Depending on your setup the command maybe different such as `uv add agent-control-sdk` if you're using uv. Run the Agent Control server and Postgres database via docker compose: + ```commandline curl "https://raw.githubusercontent.com/agentcontrol/agent-control/refs/heads/main/docker-compose.yml" | docker compose -f - up -d ``` @@ -105,9 +110,10 @@ Server will be running at `http://localhost:8000` #### Local development -**Prerequisites:** -* uv: Fast Python package manager (`curl -LsSf https://astral.sh/uv/install.sh | sh`) -* Node.js 18+: For the web dashboard (optional) +**Prerequisites:** + +- uv: Fast Python package manager (`curl -LsSf https://astral.sh/uv/install.sh | sh`) +- Node.js 18+: For the web dashboard (optional) ```bash # Clone the repo @@ -124,16 +130,18 @@ make server-run make ui-install make ui-dev ``` -* Server will run on `http://localhost:8000` -* UI will run on `http://localhost:4000` + +- Server will run on `http://localhost:8000` +- UI will run on `http://localhost:4000` ### Onboarding your agent #### Register your agent with server -Agent must be registered with the server. You should also add `@control` decorator around tools and llm call functions. +Agent must be registered with the server. You should also add `@control` decorator around tools and llm call functions. + +Here is a contrived example. Reference our [examples](/examples) for real world examples for specific frameworks. -Here is a contrived example. Reference our [examples](/examples) for real world examples for specific frameworks. ```python # my_agent.py import asyncio @@ -151,7 +159,7 @@ async def chat(message: str) -> str: # Initialize your agent agent_control.init( - agent_name="awesome_bot_3000", # This should be a unique name + agent_name="awesome_bot_3000", # This should be a unique name agent_description="My Chatbot", ) @@ -167,7 +175,7 @@ asyncio.run(main()) #### Add some controls -Easiest way to add controls is to use the UI. +Easiest way to add controls is to use the UI. You can also use SDK or directly call api: @@ -179,6 +187,7 @@ You can also use SDK or directly call api: > > If you started the full local stack with the repo-root `docker-compose.yml`, it enables > auth with these development defaults: +> > - Regular API key: `420c6b90714b45beaa992c3f05cf2baf` > - Admin API key: `29af8554a1fe4311977b7ce360b20cc3` > - UI default key (`NEXT_PUBLIC_AGENT_CONTROL_API_KEY`): `29af8554a1fe4311977b7ce360b20cc3` @@ -234,6 +243,7 @@ async def setup(): asyncio.run(setup()) ``` + #### What's Happening Under the Hood? 1. Your app calls `chat("test")` @@ -248,12 +258,12 @@ asyncio.run(setup()) ### Environment Variables -| Variable | Default | Description | -|----------|---------|-------------| -| `AGENT_CONTROL_URL` | `http://localhost:8000` | Server URL for SDK | -| `AGENT_CONTROL_API_KEY` | — | API key for authentication (if enabled) | -| `DB_URL` | `postgresql+psycopg://agent_control:agent_control@localhost:5432/agent_control` | Database connection string (SQLite: `sqlite+aiosqlite:///./agent_control.db`) | -| `GALILEO_API_KEY` | — | Required for Luna-2 AI evaluator | +| Variable | Default | Description | +| ----------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `AGENT_CONTROL_URL` | `http://localhost:8000` | Server URL for SDK | +| `AGENT_CONTROL_API_KEY` | — | API key for authentication (if enabled) | +| `DB_URL` | `postgresql+psycopg://agent_control:agent_control@localhost:5432/agent_control` | Database connection string (SQLite: `sqlite+aiosqlite:///./agent_control.db`) | +| `GALILEO_API_KEY` | — | Required for Luna-2 AI evaluator | ### Server Configuration @@ -306,15 +316,15 @@ Agent Control is built as a monorepo with these components: └──────────────────────────────────────────────────────────────────┘ ``` -| Package | Description | -|:--------|:------------| -| `agent-control-sdk` | Python SDK with `@control()` decorator | -| `agent-control` (npm) | TypeScript SDK (generated from OpenAPI) | -| `agent-control-server` | FastAPI server with Control Management API | -| `agent-control-engine` | Core evaluation logic and evaluator system | -| `agent-control-models` | Shared Pydantic v2 models | -| `agent-control-evaluators` | Built-in evaluators | -| `ui` | Next.js web dashboard | +| Package | Description | +| :------------------------- | :----------------------------------------- | +| `agent-control-sdk` | Python SDK with `@control()` decorator | +| `agent-control` (npm) | TypeScript SDK (generated from OpenAPI) | +| `agent-control-server` | FastAPI server with Control Management API | +| `agent-control-engine` | Core evaluation logic and evaluator system | +| `agent-control-models` | Shared Pydantic v2 models | +| `agent-control-evaluators` | Built-in evaluators | +| `ui` | Next.js web dashboard | --- @@ -338,18 +348,18 @@ agent-control/ The project uses a Makefile for common tasks: -| Command | Description | -|:--------|:------------| -| `make sync` | Install dependencies for all workspace packages | -| `make test` | Run tests across all packages | -| `make lint` | Run ruff linting | -| `make lint-fix` | Run ruff with auto-fix | -| `make typecheck` | Run mypy type checking | -| `make check` | Run all quality checks (test + lint + typecheck) | -| `make server-run` | Start the server | +| Command | Description | +| :--------------------- | :--------------------------------------------------------------- | +| `make sync` | Install dependencies for all workspace packages | +| `make test` | Run tests across all packages | +| `make lint` | Run ruff linting | +| `make lint-fix` | Run ruff with auto-fix | +| `make typecheck` | Run mypy type checking | +| `make check` | Run all quality checks (test + lint + typecheck) | +| `make server-run` | Start the server | | `make server-` | Forward commands to server (e.g., `make server-alembic-upgrade`) | -| `make sdk-` | Forward commands to SDK (e.g., `make sdk-test`) | -| `make engine-` | Forward commands to engine (e.g., `make engine-test`) | +| `make sdk-` | Forward commands to SDK (e.g., `make sdk-test`) | +| `make engine-` | Forward commands to engine (e.g., `make engine-test`) | For detailed development workflows, see [CONTRIBUTING.md](CONTRIBUTING.md). From 1f8d72ee621a2bb617844f1536f10d9b73227b98 Mon Sep 17 00:00:00 2001 From: siddhant-galileo Date: Wed, 11 Mar 2026 14:11:18 +0530 Subject: [PATCH 4/5] Revert "use relative link" This reverts commit 26d1e85e62eeef13f3169ad2993252edb55163db. --- README.md | 114 +++++++++++++++++++++++++----------------------------- 1 file changed, 52 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index b147c694..01fc59ef 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@

Agent Control Logo (light) Agent Control Logo (dark) @@ -24,7 +24,7 @@ > **💡 Pro Tip:** Checkout [docs](https://docs.agentcontrol.dev/) for complete reference -> **👋 Say hello to us:** Checkout our [Slack](https://join.slack.com/t/agentcontrol/shared_invite/zt-3s2pbclup-T4EJ5sA7SOxR6jTeETZljA). Pop in to ask for help, suggest features, or just to say hello! +> **👋 Say hello to us:** Checkout our [Slack](https://join.slack.com/t/agentcontrol/shared_invite/zt-3s2pbclup-T4EJ5sA7SOxR6jTeETZljA). Pop in to ask for help, suggest features, or just to say hello! **Runtime guardrails for AI agents — configurable, extensible, and production-ready.** @@ -32,8 +32,8 @@ AI agents interact with users, tools, and external systems in unpredictable ways ![Agent Control Architecture](docs/images/Architecture.png) -## Why Do You Need It? +## Why Do You Need It? Traditional guardrails embedded inside your agent code have critical limitations: - **Scattered Logic:** Control code is buried across your agent codebase, making it hard to audit or update @@ -41,7 +41,6 @@ Traditional guardrails embedded inside your agent code have critical limitations - **Limited Adaptability:** Hardcoded checks can't adapt to new attack patterns or production data variations **Agent Control gives you runtime control over what your agents can and cannot do:** - - **For developers:** Centralize safety logic and adapt to emerging threats instantly without redeployment - **For non-technical teams:** Intuitive UI to configure and monitor agent safety without touching code - **For organizations:** Reusable controls across agents with comprehensive audit trails @@ -58,13 +57,13 @@ Traditional guardrails embedded inside your agent code have critical limitations ## Performance -| Endpoint | Scenario | RPS | p50 | p99 | -| ---------------- | ----------------------------- | ------- | -------- | -------- | -| Agent init | Agent with 3 tool steps | 509 | 19 ms | 54 ms | -| Evaluation | 1 control, 500-char content | 437 | 36 ms | 61 ms | -| Evaluation | 10 controls, 500-char content | 349 | 35 ms | 66 ms | -| Evaluation | 50 controls, 500-char content | 199 | 63 ms | 91 ms | -| Controls refresh | 5-50 controls per agent | 273-392 | 20-27 ms | 27-61 ms | +| Endpoint | Scenario | RPS | p50 | p99 | +|----------|----------|-----|-----|-----| +| Agent init | Agent with 3 tool steps | 509 | 19 ms | 54 ms | +| Evaluation | 1 control, 500-char content | 437 | 36 ms | 61 ms | +| Evaluation | 10 controls, 500-char content | 349 | 35 ms | 66 ms | +| Evaluation | 50 controls, 500-char content | 199 | 63 ms | 91 ms | +| Controls refresh | 5-50 controls per agent | 273-392 | 20-27 ms | 27-61 ms | - Agent init handles both create and update identically (upsert). - All four built-in evaluators (regex, list, JSON, SQL) perform within 40-46 ms p50 at 1 control. @@ -75,7 +74,7 @@ _Benchmarked on Apple M5 (16 GB RAM), Docker Compose (`postgres:16` + `agent-con ### Examples -Explore real-world integrations with popular agent frameworks, or jump to [Quick Start](#quick-start) for hands-on setup. +Explore real-world integrations with popular agent frameworks, or jump to [Quick Start](#quick-start) for hands-on setup. - **[Examples Overview](examples/README.md)** — Working code examples and integration patterns - **[TypeScript SDK (npm consumer)](examples/typescript_sdk/)** — Monorepo example that installs `agent-control` from npm @@ -89,19 +88,15 @@ Explore real-world integrations with popular agent frameworks, or jump to [Quick ### Installation -**Prerequisites**: - -- Python 3.12+ -- Docker - -#### SDK only - -Install our SDK in your project - `pip install agent-control-sdk` +**Prerequisites**: +* Python 3.12+ +* Docker +#### SDK only +Install our SDK in your project - `pip install agent-control-sdk` > **📝 Note:** Depending on your setup the command maybe different such as `uv add agent-control-sdk` if you're using uv. Run the Agent Control server and Postgres database via docker compose: - ```commandline curl "https://raw.githubusercontent.com/agentcontrol/agent-control/refs/heads/main/docker-compose.yml" | docker compose -f - up -d ``` @@ -110,10 +105,9 @@ Server will be running at `http://localhost:8000` #### Local development -**Prerequisites:** - -- uv: Fast Python package manager (`curl -LsSf https://astral.sh/uv/install.sh | sh`) -- Node.js 18+: For the web dashboard (optional) +**Prerequisites:** +* uv: Fast Python package manager (`curl -LsSf https://astral.sh/uv/install.sh | sh`) +* Node.js 18+: For the web dashboard (optional) ```bash # Clone the repo @@ -130,18 +124,16 @@ make server-run make ui-install make ui-dev ``` - -- Server will run on `http://localhost:8000` -- UI will run on `http://localhost:4000` +* Server will run on `http://localhost:8000` +* UI will run on `http://localhost:4000` ### Onboarding your agent #### Register your agent with server -Agent must be registered with the server. You should also add `@control` decorator around tools and llm call functions. - -Here is a contrived example. Reference our [examples](/examples) for real world examples for specific frameworks. +Agent must be registered with the server. You should also add `@control` decorator around tools and llm call functions. +Here is a contrived example. Reference our [examples](/examples) for real world examples for specific frameworks. ```python # my_agent.py import asyncio @@ -159,7 +151,7 @@ async def chat(message: str) -> str: # Initialize your agent agent_control.init( - agent_name="awesome_bot_3000", # This should be a unique name + agent_name="awesome_bot_3000", # This should be a unique name agent_description="My Chatbot", ) @@ -175,7 +167,7 @@ asyncio.run(main()) #### Add some controls -Easiest way to add controls is to use the UI. +Easiest way to add controls is to use the UI. You can also use SDK or directly call api: @@ -187,7 +179,6 @@ You can also use SDK or directly call api: > > If you started the full local stack with the repo-root `docker-compose.yml`, it enables > auth with these development defaults: -> > - Regular API key: `420c6b90714b45beaa992c3f05cf2baf` > - Admin API key: `29af8554a1fe4311977b7ce360b20cc3` > - UI default key (`NEXT_PUBLIC_AGENT_CONTROL_API_KEY`): `29af8554a1fe4311977b7ce360b20cc3` @@ -243,7 +234,6 @@ async def setup(): asyncio.run(setup()) ``` - #### What's Happening Under the Hood? 1. Your app calls `chat("test")` @@ -258,12 +248,12 @@ asyncio.run(setup()) ### Environment Variables -| Variable | Default | Description | -| ----------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -| `AGENT_CONTROL_URL` | `http://localhost:8000` | Server URL for SDK | -| `AGENT_CONTROL_API_KEY` | — | API key for authentication (if enabled) | -| `DB_URL` | `postgresql+psycopg://agent_control:agent_control@localhost:5432/agent_control` | Database connection string (SQLite: `sqlite+aiosqlite:///./agent_control.db`) | -| `GALILEO_API_KEY` | — | Required for Luna-2 AI evaluator | +| Variable | Default | Description | +|----------|---------|-------------| +| `AGENT_CONTROL_URL` | `http://localhost:8000` | Server URL for SDK | +| `AGENT_CONTROL_API_KEY` | — | API key for authentication (if enabled) | +| `DB_URL` | `postgresql+psycopg://agent_control:agent_control@localhost:5432/agent_control` | Database connection string (SQLite: `sqlite+aiosqlite:///./agent_control.db`) | +| `GALILEO_API_KEY` | — | Required for Luna-2 AI evaluator | ### Server Configuration @@ -316,15 +306,15 @@ Agent Control is built as a monorepo with these components: └──────────────────────────────────────────────────────────────────┘ ``` -| Package | Description | -| :------------------------- | :----------------------------------------- | -| `agent-control-sdk` | Python SDK with `@control()` decorator | -| `agent-control` (npm) | TypeScript SDK (generated from OpenAPI) | -| `agent-control-server` | FastAPI server with Control Management API | -| `agent-control-engine` | Core evaluation logic and evaluator system | -| `agent-control-models` | Shared Pydantic v2 models | -| `agent-control-evaluators` | Built-in evaluators | -| `ui` | Next.js web dashboard | +| Package | Description | +|:--------|:------------| +| `agent-control-sdk` | Python SDK with `@control()` decorator | +| `agent-control` (npm) | TypeScript SDK (generated from OpenAPI) | +| `agent-control-server` | FastAPI server with Control Management API | +| `agent-control-engine` | Core evaluation logic and evaluator system | +| `agent-control-models` | Shared Pydantic v2 models | +| `agent-control-evaluators` | Built-in evaluators | +| `ui` | Next.js web dashboard | --- @@ -348,18 +338,18 @@ agent-control/ The project uses a Makefile for common tasks: -| Command | Description | -| :--------------------- | :--------------------------------------------------------------- | -| `make sync` | Install dependencies for all workspace packages | -| `make test` | Run tests across all packages | -| `make lint` | Run ruff linting | -| `make lint-fix` | Run ruff with auto-fix | -| `make typecheck` | Run mypy type checking | -| `make check` | Run all quality checks (test + lint + typecheck) | -| `make server-run` | Start the server | +| Command | Description | +|:--------|:------------| +| `make sync` | Install dependencies for all workspace packages | +| `make test` | Run tests across all packages | +| `make lint` | Run ruff linting | +| `make lint-fix` | Run ruff with auto-fix | +| `make typecheck` | Run mypy type checking | +| `make check` | Run all quality checks (test + lint + typecheck) | +| `make server-run` | Start the server | | `make server-` | Forward commands to server (e.g., `make server-alembic-upgrade`) | -| `make sdk-` | Forward commands to SDK (e.g., `make sdk-test`) | -| `make engine-` | Forward commands to engine (e.g., `make engine-test`) | +| `make sdk-` | Forward commands to SDK (e.g., `make sdk-test`) | +| `make engine-` | Forward commands to engine (e.g., `make engine-test`) | For detailed development workflows, see [CONTRIBUTING.md](CONTRIBUTING.md). From 0a17f162ee2d5f345fb7973e0a17ef2e073915f7 Mon Sep 17 00:00:00 2001 From: siddhant-galileo Date: Wed, 11 Mar 2026 15:01:48 +0530 Subject: [PATCH 5/5] chore: update image links --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 01fc59ef..7ec6bc1b 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@

Agent Control Logo (light) Agent Control Logo (dark)