commit a0d7f6ed26a0658d9d89c129d33c0ee350254b21 Author: Michael Clervi Date: Tue Oct 21 11:28:59 2025 +0000 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..663c907 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv/ +log/ diff --git a/export_shared_agents.js b/export_shared_agents.js new file mode 100755 index 0000000..4d1a0f3 --- /dev/null +++ b/export_shared_agents.js @@ -0,0 +1,36 @@ +// export_shared_agents.js +// Emits strict Extended JSON to stdout (safe JSON for ObjectId/Date) + +const pipeline = [ + { $match: { resourceType: "agent" } }, + { $group: { _id: "$resourceId", count: { $sum: 1 } } }, + { $match: { count: { $gt: 1 } } }, + { + $lookup: { + from: "agents", + localField: "_id", + foreignField: "_id", + as: "agentDetails" + } + }, + { $unwind: "$agentDetails" }, + { + $lookup: { + from: "users", + localField: "agentDetails.author", + foreignField: "_id", + as: "authorDetails" + } + }, + { $unwind: { path: "$authorDetails", preserveNullAndEmptyArrays: true } }, + { $set: { "agentDetails.author": "$authorDetails.email" } }, + { $project: { + "agentDetails.versions": 0, + "agentDetails.instructions": 0, + "authorDetails": 0 + } + } +]; + +const out = db.aclentries.aggregate(pipeline).toArray(); +print(EJSON.stringify(out, { relaxed: false, indent: 2 })); diff --git a/register_agents.py b/register_agents.py new file mode 100755 index 0000000..6871430 --- /dev/null +++ b/register_agents.py @@ -0,0 +1,288 @@ +#!/usr/bin/env python3 +""" +Register agents from a JSON file with the Agent Registration API. + +Usage: + python register_agents.py --input /path/to/shared_agents.json \ + [--base-url https://ai-sandbox.oliver.solutions/agent_collector/agents] \ + [--api-key YOUR_KEY] \ + [--dry-run] + +Notes: +- If --api-key is not provided, the script will fall back to the static key from the docs. +- The input can be either: + * a list of agent documents, or + * a list of wrapper objects that contain an "agentDetails" object (common when exported from MongoDB aggregations). +- The script maps fields best-effort to the API schema and prunes any empty/None fields. +""" + +import argparse +import json +import os +import re +import sys +import time +import urllib3 +from typing import Any, Dict, List, Optional + +# Suppress SSL warnings when verification is disabled +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + +try: + import requests # type: ignore +except Exception as e: + print("This script requires the 'requests' package. Install with: pip install requests") + raise + + +DEFAULT_BASE_URL = "https://ai-sandbox.oliver.solutions/agent_collector/agents" +# Fallback to the static key from the documentation if not supplied via --api-key +DEFAULT_API_KEY = "agent-collector-static-key-2024-secure" + + +def parse_iso(value: Any) -> Optional[str]: + """ + Best-effort: return ISO8601 string or None. + - If value is already a string, return it (assuming it's already ISO8601). + - If value looks like 'ISODate(\"...\")', extract the inner string. + - Otherwise, return None. + """ + if value is None: + return None + if isinstance(value, str): + # Handle Mongo shell export style: ISODate('2025-07-09T06:33:12.682Z') + m = re.match(r"^ISODate\(['\"]?([^'\"]+)['\"]?\)$", value.strip()) + return m.group(1) if m else value + # Could try to parse datetime objects here if needed; for now, prefer string passthrough + return None + + +def ensure_list_of_str(value: Any) -> Optional[List[str]]: + """Convert to a list[str] if reasonable; otherwise return None.""" + if value is None: + return None + if isinstance(value, list): + out = [] + for v in value: + if isinstance(v, str): + out.append(v) + else: + out.append(str(v)) + return out if out else None + # Single string -> wrap + if isinstance(value, str) and value.strip(): + return [value] + return None + + +def extract_agent(doc: Dict[str, Any]) -> Dict[str, Any]: + """Handle two shapes: raw agent doc OR wrapper { ..., agentDetails: {...} }""" + if isinstance(doc, dict) and "agentDetails" in doc and isinstance(doc["agentDetails"], dict): + return doc["agentDetails"] + return doc + + +def build_payload(agent: Dict[str, Any]) -> Dict[str, Any]: + """ + Map agent fields to Agent Registration API payload. + Required by API: name, description, purpose, tool + Optional fields are filled best-effort; empty/None/blank fields are pruned. + """ + name = agent.get("name") or agent.get("id") or str(agent.get("_id") or "Unnamed Agent") + description = agent.get("description") or agent.get("instructions") or f"{name} agent" + purpose = agent.get("purpose") or description + # API's "tool" = platform where agent operates; best-effort map to provider + tool = "LibreChat (chat-sandbox)" + + # Optional mappings + version = agent.get("version") or agent.get("model") + creation_date = parse_iso(agent.get("createdAt")) + last_updated = parse_iso(agent.get("updatedAt")) + capabilities = ensure_list_of_str(agent.get("capabilities") or agent.get("tools")) + department = agent.get("department") or agent.get("category") + + # contact_person: prefer a support contact email or name; else use author (often email) + contact_person = None + sc = agent.get("support_contact") + if isinstance(sc, dict): + contact_person = sc.get("email") or sc.get("name") + if not contact_person: + contact_person = agent.get("contact_person") or agent.get("author") + + # tags: compact context about provider/model/category + tags = [t for t in [agent.get("provider"), agent.get("model"), agent.get("category")] if t] + + # metadata: stash extras for traceability + avatar_path = None + avatar = agent.get("avatar") + if isinstance(avatar, dict): + avatar_path = avatar.get("filepath") + elif isinstance(avatar, str): + avatar_path = avatar + + metadata = { + "source_id": agent.get("id"), + "provider": agent.get("provider"), + "model": agent.get("model"), + "artifacts": agent.get("artifacts"), + "tool_kwargs": agent.get("tool_kwargs"), + "agent_ids": agent.get("agent_ids"), + "projectIds": agent.get("projectIds"), + "avatar": avatar_path, + "author_email": agent.get("author"), + "raw_category": agent.get("category"), + } + # Prune empty metadata + metadata = {k: v for k, v in metadata.items() if v not in (None, "", [], {})} + + payload: Dict[str, Any] = { + "name": name, + "description": description, + "purpose": purpose, + "tool": tool, + # Optionals: + "version": version, + "creation_date": creation_date, + "last_updated": last_updated, + "capabilities": capabilities, + "department": department, + "contact_person": contact_person, + "tags": tags or None, + "metadata": metadata or None, + } + # Final prune of empties so the API only sees meaningful data + for k in list(payload.keys()): + if payload[k] in (None, "", [], {}): + payload.pop(k, None) + return payload + + +def post_agent(session: requests.Session, base_url: str, api_key: str, payload: Dict[str, Any], + retries: int = 3, backoff: float = 1.5) -> Dict[str, Any]: + """POST with simple retry on transient errors. Return parsed JSON or a structured error.""" + headers = { + "Content-Type": "application/json", + "X-API-Key": api_key, + } + attempt = 0 + last_err: Optional[str] = None + while attempt <= retries: + try: + resp = session.post(base_url, headers=headers, json=payload, timeout=30) + if resp.status_code >= 200 and resp.status_code < 300: + try: + return {"ok": True, "status_code": resp.status_code, "data": resp.json(), "payload_name": payload.get("name")} + except Exception: + return {"ok": True, "status_code": resp.status_code, "data": {"raw": resp.text}, "payload_name": payload.get("name")} + else: + # Retry on 429/5xx + if resp.status_code in (429, 500, 502, 503, 504) and attempt < retries: + time.sleep((attempt + 1) * backoff) + attempt += 1 + continue + try: + detail = resp.json() + except Exception: + detail = {"raw": resp.text} + return {"ok": False, "status_code": resp.status_code, "error": detail, "payload_name": payload.get("name")} + except requests.RequestException as e: + last_err = str(e) + if attempt < retries: + time.sleep((attempt + 1) * backoff) + attempt += 1 + continue + return {"ok": False, "status_code": None, "error": {"exception": last_err}, "payload_name": payload.get("name")} + return {"ok": False, "status_code": None, "error": {"exception": last_err or "unknown"}, "payload_name": payload.get("name")} + + +def load_records(path: str) -> List[Dict[str, Any]]: + with open(path, "r", encoding="utf-8") as f: + data = json.load(f) + if isinstance(data, dict) and "agents" in data and isinstance(data["agents"], list): + items = data["agents"] + elif isinstance(data, list): + items = data + else: + raise ValueError("Unrecognized JSON structure. Expected a list, or an object with an 'agents' list.") + return [extract_agent(item) for item in items] + + +def main(): + parser = argparse.ArgumentParser(description="Register agents with the Agent Registration API") + parser.add_argument("--input", "-i", default="shared_agents.json", help="Path to input JSON (default: shared_agents.json)") + parser.add_argument("--base-url", default=os.environ.get("AGENT_REG_URL", DEFAULT_BASE_URL), + help=f"API endpoint URL (default: {DEFAULT_BASE_URL})") + parser.add_argument("--api-key", default=os.environ.get("AGENT_REG_KEY", DEFAULT_API_KEY), + help="API key (default: uses static key from the docs unless AGENT_REG_KEY is set)") + parser.add_argument("--dry-run", action="store_true", help="Print payloads without sending to the API") + parser.add_argument("--save-log", default="registration_results.json", help="Path to write results log JSON") + args = parser.parse_args() + + # Load items + try: + agents = load_records(args.input) + except Exception as e: + print(f"Failed to load input JSON: {e}") + sys.exit(2) + + session = requests.Session() + # Disable SSL certificate verification for development/internal APIs + session.verify = False + + # Create an adapter with SSL verification disabled + from requests.adapters import HTTPAdapter + from urllib3.poolmanager import PoolManager + from urllib3.util import ssl_ + + class SSLAdapter(HTTPAdapter): + def init_poolmanager(self, *args, **kwargs): + kwargs['ssl_context'] = ssl_.create_urllib3_context() + kwargs['ssl_context'].check_hostname = False + kwargs['ssl_context'].verify_mode = 0 + return super().init_poolmanager(*args, **kwargs) + + session.mount('https://', SSLAdapter()) + + results: List[Dict[str, Any]] = [] + success = 0 + usage_logged = 0 + failures = 0 + + for idx, agent in enumerate(agents, start=1): + payload = build_payload(agent) + if args.dry_run: + print(f"[DRY RUN {idx}/{len(agents)}] Would register: {payload.get('name')}") + print(json.dumps(payload, indent=2, ensure_ascii=False)) + results.append({"ok": True, "dry_run": True, "payload": payload}) + continue + + res = post_agent(session, args.base_url, args.api_key, payload) + results.append(res) + + if res.get("ok"): + data = res.get("data", {}) + status = str(data.get("status", "")).lower() + if status == "usage_logged": + usage_logged += 1 + print(f"[{idx}/{len(agents)}] Usage tracked for existing agent: {payload.get('name')}") + else: + success += 1 + print(f"[{idx}/{len(agents)}] Registered: {payload.get('name')}") + else: + failures += 1 + print(f"[{idx}/{len(agents)}] FAILED for {payload.get('name')}: {res.get('error')}") + + # Write log + try: + with open(args.save_log, "w", encoding="utf-8") as f: + json.dump(results, f, indent=2, ensure_ascii=False) + print(f"\nWrote results to {args.save_log}") + except Exception as e: + print(f"Failed to write results log: {e}") + + print(f"\nSummary: registered={success}, usage_logged={usage_logged}, failed={failures}, total={len(agents)}") + + +if __name__ == "__main__": + main() + diff --git a/registration_results.json b/registration_results.json new file mode 100644 index 0000000..3046c4a --- /dev/null +++ b/registration_results.json @@ -0,0 +1,472 @@ +[ + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Risk Management Simulator" + }, + "payload_name": "Risk Management Simulator" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "GenAI Scale - Image Evaluator " + }, + "payload_name": "GenAI Scale - Image Evaluator " + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Oliver Prospect Agent" + }, + "payload_name": "Oliver Prospect Agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Open AI Image Generator" + }, + "payload_name": "Open AI Image Generator" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Veo3 Prompt Builder" + }, + "payload_name": "Veo3 Prompt Builder" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "WBS AGENT" + }, + "payload_name": "WBS AGENT" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Nano Banana" + }, + "payload_name": "Nano Banana" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Terry Translate" + }, + "payload_name": "Terry Translate" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "clervi test agent" + }, + "payload_name": "clervi test agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Dev - Solve Design" + }, + "payload_name": "Dev - Solve Design" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "H&M | HR_hr glossary" + }, + "payload_name": "H&M | HR_hr glossary" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Dove - brand tone & copywriting" + }, + "payload_name": "Dove - brand tone & copywriting" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "The Agent-Agent" + }, + "payload_name": "The Agent-Agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": " Copywriting - B&W, BAIS, Legal Social Adaptation" + }, + "payload_name": " Copywriting - B&W, BAIS, Legal Social Adaptation" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "GPT-Image-1 Prompt Builder" + }, + "payload_name": "GPT-Image-1 Prompt Builder" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "AI Opportunity Guide" + }, + "payload_name": "AI Opportunity Guide" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Matthieu Math" + }, + "payload_name": "Matthieu Math" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Sustainability POC" + }, + "payload_name": "Sustainability POC" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "DEI Agent" + }, + "payload_name": "DEI Agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Bria" + }, + "payload_name": "Bria" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Leadership Update Creator" + }, + "payload_name": "Leadership Update Creator" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "BeakMail - Release Email Generator" + }, + "payload_name": "BeakMail - Release Email Generator" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "OLIVER Case Study Agent" + }, + "payload_name": "OLIVER Case Study Agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "H&M - MPC KB" + }, + "payload_name": "H&M - MPC KB" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "success", + "message": "Agent data collected successfully", + "agent_id": "68c2ade635df973fa04ea5fb" + }, + "payload_name": "Barclaycard Daily Brand Opportunities " + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "MPC - Project Plan Builder" + }, + "payload_name": "MPC - Project Plan Builder" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Copywriting - crafting competitive claims " + }, + "payload_name": "Copywriting - crafting competitive claims " + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "success", + "message": "Agent data collected successfully", + "agent_id": "68c2ade635df973fa04ea5fe" + }, + "payload_name": "Barclaycard TOV" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "OLIVER Scale - Idea Evaluator " + }, + "payload_name": "OLIVER Scale - Idea Evaluator " + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Social copy - crafting social copy" + }, + "payload_name": "Social copy - crafting social copy" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "TEXTOS DE APOIO - ITAÚ" + }, + "payload_name": "TEXTOS DE APOIO - ITAÚ" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Infinite Idea Generator Agent" + }, + "payload_name": "Infinite Idea Generator Agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "U-Studio awards case-study writer " + }, + "payload_name": "U-Studio awards case-study writer " + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "U-Studio PM Helper (UK)" + }, + "payload_name": "U-Studio PM Helper (UK)" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "H&M - CIA (Pilot 4012)" + }, + "payload_name": "H&M - CIA (Pilot 4012)" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "U-Studio job description writer " + }, + "payload_name": "U-Studio job description writer " + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Internal Training Comms Assistant" + }, + "payload_name": "Internal Training Comms Assistant" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Runway Prompt Helper" + }, + "payload_name": "Runway Prompt Helper" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "BAIS Helper (Brazil)" + }, + "payload_name": "BAIS Helper (Brazil)" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Slipstream Brief Builder Ai - AJ (TEST GROUP ONLY)" + }, + "payload_name": "Slipstream Brief Builder Ai - AJ (TEST GROUP ONLY)" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Latam BR - Revisor Gramatical (RevisAI)" + }, + "payload_name": "Latam BR - Revisor Gramatical (RevisAI)" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Pencil Training Material Agent" + }, + "payload_name": "Pencil Training Material Agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Category entry points agent" + }, + "payload_name": "Category entry points agent" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "QC Buddy" + }, + "payload_name": "QC Buddy" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Agent Billie – Billing Email Assistant" + }, + "payload_name": "Agent Billie – Billing Email Assistant" + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Comms Writing Assistant " + }, + "payload_name": "Comms Writing Assistant " + }, + { + "ok": true, + "status_code": 200, + "data": { + "status": "usage_logged", + "message": "Agent already exists, usage tracked", + "agent_name": "Instructional Design Assistant " + }, + "payload_name": "Instructional Design Assistant " + } +] \ No newline at end of file diff --git a/shared_agents.json b/shared_agents.json new file mode 100644 index 0000000..003ea07 --- /dev/null +++ b/shared_agents.json @@ -0,0 +1 @@ +[{"_id":{"$oid":"67b84751a6de4fadf60f552f"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67b84751a6de4fadf60f552f"},"id":"agent_-AfvrxV6hjXWzjfz3VOta","name":"Risk Management Simulator","description":"","provider":"openAI","model":"gpt-4o","tools":[],"tool_kwargs":[],"author":"azzurratacente@ustudio.global","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1740130129189"}},"updatedAt":{"$date":{"$numberLong":"1751643948268"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/6675377eafe2a1c44e0edc51/Goofy_agent.png","source":"local","_id":{"$oid":"67b84765a6de4fadf60f555c"}},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"67fd14c66301b2ffdc606cde"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67fd14c66301b2ffdc606cde"},"id":"agent_dJkxflO7nAGPIsD3JJBdI","name":"GenAI Scale - Image Evaluator ","description":"Elevate and evaluate GenAI design work. Just drag and drop your work and ask for a review. Any comments, feedback, applause please contact raestones@oliver.agency","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":[],"tool_kwargs":[],"author":"raestones@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1744639174644"}},"updatedAt":{"$date":{"$numberLong":"1747673382581"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/bdaeb68f-ee54-4ad4-9413-feb1a50be569-Screenshot 2025-04-28 at 10.44.29.png","source":"local"}}},{"_id":{"$oid":"67f7cdd4d469f297df169e4c"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67f7cdd4d469f297df169e4c"},"id":"agent_tkYyN8zrwDbYWYl8KI5y7","name":"Oliver Prospect Agent","description":"Simply research prospects and current clients, and identify which Oliver capabilities may be most relevant. To give me the best chance of helping you, please provide; 1. The brand/business name you'd like me to audit 2. Any specific areas of focus (optional) 3. Additional materials to enhance my analysis (optional)Any questions or feedback contact Tom Claridge","provider":"google","model":"gemini-2.5-pro-preview-05-06","artifacts":"","tools":[],"tool_kwargs":[],"author":"thomasclaridge@ustudio.global","agent_ids":["agent_HhLya6EWNmxYiIz1Occs9"],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1744293332441"}},"updatedAt":{"$date":{"$numberLong":"1755688274555"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/66c61c3a6a4c33f0c212d42d/c89c7ec8-67ea-4618-9258-5c066d41ecf7-OLIVER PROSPECT.png","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"68385a97638122a35a9c4838"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68385a97638122a35a9c4838"},"id":"agent_HOqZ3L4BB85D26QtSVc9j","name":"Open AI Image Generator","description":"Open AI Image Generator","provider":"openAI","model":"gpt-4o","artifacts":"","tools":["image_gen_oai"],"tool_kwargs":[],"author":"daveporter@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1748523671421"}},"updatedAt":{"$date":{"$numberLong":"1750083397661"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/6647c9028904c2b816298e7f/81991dc1-be72-40ad-992a-d509683952c1-854b8969-b7d9-4157-aa8d-1aa898db3b62-image_gen_oai_call_EzigmknLjO4SET0zwbQFbfJd_img_aJvVxGQbTch0rT0OhL7J0.png","source":"local"},"isCollaborative":false}},{"_id":{"$oid":"6840875c39157f18c468ff3d"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"6840875c39157f18c468ff3d"},"id":"agent_4H3aMdrtE8jbFDLyieiyM","name":"Veo3 Prompt Builder","description":"tell me about the video you are trying to make? If you have Questions email Optical@oliver.agency","provider":"google","model":"gemini-2.5-pro-preview-05-06","artifacts":"","tools":[],"tool_kwargs":[],"author":"daveporter@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1749059420832"}},"updatedAt":{"$date":{"$numberLong":"1749558018170"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/6647c9028904c2b816298e7f/04d2df68-3fa9-42cf-b87d-0c87716326bc-Google-Veo-3-Logo-PNG.png","source":"local"}}},{"_id":{"$oid":"685048d8fcc3a945ecd44635"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"685048d8fcc3a945ecd44635"},"id":"agent_4LQCmkwfBZA87zuKl-dZQ","name":"WBS AGENT","description":"Project Brief to WBS Converter Agent by Optical@oliver.agency","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":[],"tool_kwargs":[],"author":"daveporter@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1750091992208"}},"updatedAt":{"$date":{"$numberLong":"1750093554985"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/6647c9028904c2b816298e7f/agent-agent_4LQCmkwfBZA87zuKl-dZQ-avatar-1750092023700.png?manual=false","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"68b726281a0c77e14ca2d4b5"},"count":{"$numberInt":"3"},"agentDetails":{"_id":{"$oid":"68b726281a0c77e14ca2d4b5"},"id":"agent_HbpqWSmGyC_ZLlYx9b1gv","name":"Nano Banana","description":"To create images using Nano Banana","provider":"anthropic","model":"claude-sonnet-4-20250514","artifacts":"","tools":["generateImage_action_Z2VuZXJhdG"],"tool_kwargs":[],"author":"daveporter@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"category":"general","support_contact":{"name":"","email":""},"is_promoted":false,"createdAt":{"$date":{"$numberLong":"1756833320639"}},"updatedAt":{"$date":{"$numberLong":"1756839314357"}},"__v":{"$numberInt":"0"},"actions":["Z2VuZXJhdG_action_cWU0AkaoU4hvi8u6-oiuZ"],"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/6647c9028904c2b816298e7f/agent-agent_HbpqWSmGyC_ZLlYx9b1gv-avatar-1756833539711.png?manual=false","source":"local"}}},{"_id":{"$oid":"684068acb15f53fc610e5e25"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"684068acb15f53fc610e5e25"},"id":"agent_-ynp4mIElXrYW-B1xfKtM","name":"Terry Translate","description":"Translation GPT for LRQA","provider":"openAI","model":"gpt-4o","artifacts":"","tools":[],"tool_kwargs":[],"author":"clarissahanekom@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1749051564646"}},"updatedAt":{"$date":{"$numberLong":"1749198163841"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"68b847861a0c77e14ca56f06"},"count":{"$numberInt":"3"},"agentDetails":{"_id":{"$oid":"68b847861a0c77e14ca56f06"},"id":"agent_-TMKB1ov4itp0x1ZXgqbX","name":"clervi test agent","description":"","provider":"openAI","model":"gpt-4.1","artifacts":"","tools":[],"tool_kwargs":[],"author":"michaelclervi@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"category":"general","support_contact":{"name":"","email":""},"is_promoted":false,"createdAt":{"$date":{"$numberLong":"1756907398814"}},"updatedAt":{"$date":{"$numberLong":"1756907398814"}},"__v":{"$numberInt":"0"}}},{"_id":{"$oid":"688e0ff5a1eb3412a3003341"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"688e0ff5a1eb3412a3003341"},"id":"agent_01EvTuY_2jRneVVP4Vh7Z","name":"Dev - Solve Design","description":"Everything Brand Guideline","provider":"openAI","model":"gpt-4.1","artifacts":"custom","tools":["file_search","web_search"],"tool_kwargs":[],"author":"devdasprajapati@insideideas.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1754140661149"}},"updatedAt":{"$date":{"$numberLong":"1754467914560"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"tool_resources":{"file_search":{"file_ids":["439a92ff-d613-448c-9aad-7b0e7ea83170"]}}}},{"_id":{"$oid":"682db079cd40c667350525f1"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"682db079cd40c667350525f1"},"id":"agent_GU0zxVKXaRaAAOf0MHet-","name":"H&M | HR_hr glossary","description":"Product name translation glossary (EN-HR) for H&M | Croatia ","provider":"openAI","model":"gpt-4o","artifacts":"default","tools":["execute_code","file_search"],"tool_kwargs":[],"author":"martaflieger@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1747824761456"}},"updatedAt":{"$date":{"$numberLong":"1753083213000"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["6c33710f-2d9f-4db6-bd92-ccb8b927add4","073e870b-85bd-4c40-a5f6-ee077cd90e91","10d40ab3-8de6-4913-9d89-7d7d351b5121","ab0a7173-83b0-4650-95bc-f0c2d2746bfe","e19c248c-9c0d-43e5-8468-ce5cf0e7b467","51e7d591-1887-41bc-b8ce-af19d97e955e","2ec6b77e-172a-4ab9-8766-1daa634e5314","1fa58edf-1ae7-4d05-8977-65f4a40b097d","cc3987b2-7114-46e2-8eeb-10ea0dd4a556"]}},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"68517ab519d25b80fecce3e4"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68517ab519d25b80fecce3e4"},"id":"agent_7eyHA5Rw_8UgcsfQx0rmr","name":"Dove - brand tone & copywriting","description":"Uses brand copywriting guidelines to write a first draft copy. Seo articles, social posts, print, and ad copy. ","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":[],"tool_kwargs":[],"author":"raestones@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1750170293057"}},"updatedAt":{"$date":{"$numberLong":"1755950888680"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/agent-agent_7eyHA5Rw_8UgcsfQx0rmr-avatar-1755950885729.png?manual=false","source":"local"}}},{"_id":{"$oid":"681146a5cdda83201f27d19a"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"681146a5cdda83201f27d19a"},"id":"agent_Aaa5L6YGGu95fGg2XYIkV","name":"The Agent-Agent","description":"Helping you find AI-based solutions to fuzzy business problems","provider":"openAI","model":"gpt-4o","artifacts":"","tools":["dalle","execute_code","file_search"],"tool_kwargs":[],"author":"alecbarr@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1745962661174"}},"updatedAt":{"$date":{"$numberLong":"1745965412417"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/668ba692af050087312909b5/2802e9a8-2919-4c49-a3f4-65bdee6f1437-c0028593-800px-wm.png","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false,"tool_resources":{"file_search":{"file_ids":["4fbc1e86-9082-47c1-b66e-55de8a1e2952"]}}}},{"_id":{"$oid":"68a9c45aaf5d265fefe6f734"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68a9c45aaf5d265fefe6f734"},"id":"agent_STeajLkyWGYcVDf_dQGyv","name":" Copywriting - B&W, BAIS, Legal Social Adaptation","description":"Competitor Language, Claims Review & Legal Social Adaptation","provider":"openAI","model":"gpt-4.1","artifacts":"","tools":[],"tool_kwargs":[],"author":"raestones@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1755956314681"}},"updatedAt":{"$date":{"$numberLong":"1755959622345"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/agent-agent_STeajLkyWGYcVDf_dQGyv-avatar-1755956355355.png?manual=false","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"68934c31881dbbb7c5b100f7"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68934c31881dbbb7c5b100f7"},"id":"agent_rDxjRJVnbqD8bb8Sw3S1z","name":"GPT-Image-1 Prompt Builder","description":"This Assistant will help you create better prompts for GPT-Image-1 model. For support, contact ia-latam@oliver.agency","provider":"openAI","model":"gpt-4o","artifacts":"","tools":[],"tool_kwargs":[],"author":"robertorodrigues@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1754483761808"}},"updatedAt":{"$date":{"$numberLong":"1754492305352"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"6876ee2e580d4bd065e241c6"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"6876ee2e580d4bd065e241c6"},"id":"agent_eO1iVrajsj4McO43blpd3","name":"AI Opportunity Guide","description":"[beta version] I discover which of your daily tasks can be automated with AI agents through targeted questions, then help prioritize the best automation opportunities for your role. For support, contact ia-latam@oliver.agency","provider":"anthropic","model":"claude-3-7-sonnet-latest","model_parameters":{"temperature":{"$numberInt":"1"}},"artifacts":"","tools":[],"tool_kwargs":[],"author":"robertorodrigues@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1752624686306"}},"updatedAt":{"$date":{"$numberLong":"1752631792181"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"683f607f282353ec7e45152b"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"683f607f282353ec7e45152b"},"id":"agent_vmKSpL9rM5DXba5oU0LZk","name":"Matthieu Math","description":"","provider":"Perplexity","model":"sonar","artifacts":"","tools":[],"tool_kwargs":[],"author":"alistairvines@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1748983935650"}},"updatedAt":{"$date":{"$numberLong":"1748986221575"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/6655e432ef8cbd13d2907461/af1a2a9c-5749-478b-9ae0-aab8228ebc60-matthieu.png","source":"local"}}},{"_id":{"$oid":"687944c2283da74fdaaabbcb"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"687944c2283da74fdaaabbcb"},"id":"agent_K1_qXXln6AR9KpQBIbOPk","name":"Sustainability POC","description":"","provider":"openAI","model":"gpt-5","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"michaelclervi@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1752777922396"}},"updatedAt":{"$date":{"$numberLong":"1756743536115"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["d70d4b6e-6edc-45e2-99ce-1b7779862e9c","ac357691-0745-495f-ae6f-691b6b63ec2f","bd2c3834-80e1-4e7f-9019-511b4c9c5b2a","7bb0d768-4a20-4fb3-8ece-d0dc44fb52e9","cc6abdd2-212c-4157-997c-45a1f45ef974","a1f3e1b0-e36f-4b19-a50e-d5a4f10964fb","d9ec0139-7d73-4e85-8f4f-26c33948ff3b","eaa93e79-0c51-4956-b3f6-0000498d72cc","e16528e2-be10-4e90-801c-2fecafb48eec","9632eaef-9b1f-41de-9101-cabfcfdebb18","432e0863-eec6-440e-bd1d-478e59727abc","9cd27efb-5c5e-40ee-aff8-51258422398f","76f522d3-ccb6-4b08-9665-e95521d3a2c2","cf617fe1-deed-4c4c-912a-cea7bacb456f","26117eb8-268e-4e72-a072-ef25876c7e18","c59ee176-8e87-4949-9649-d3d1288777ac","31c3fe25-ea94-4822-ab98-99e4446ff765","ecdf4cc1-ec0d-4ab6-b01a-e00b7bb5bddf","885123ed-db0e-406b-9824-140afa5b68b2","71ef81f4-66ef-43e8-853e-2b7e46d9db88","12f1eac6-1710-42f9-9751-60bbc7cf9a81","0c84ba16-9dfb-4044-8360-ffc9a5c4f46c","9a6d115f-fef1-4d12-9cca-e15b25d5a2ba","3a7939e7-6596-4898-bb76-cafb2c3a8cfa","c90a9c23-d444-4dcc-919a-61b26eb10e98","9c4272b4-635f-44f9-990b-db2f8fd1b3f9","f56c53f4-0962-40a5-812a-3b7bc936d009","ca8ec8a9-3c20-47a7-a7db-443a9329cf14","36913dfc-08e1-46cf-9559-9bb9585b4cbe","f282dd24-7fc8-44f0-9d98-eb8232b61a0d","5e885fbb-ff15-4fde-9eea-6941cc398e71","75908f67-f718-4a9e-be0c-3854d895162c","ea414a97-8c31-440e-8fee-decb929a3c6f","1a5a4ae2-76bd-4e63-a21a-6c2f1dcea0fa","08c6a01c-25f5-466d-ad56-0730015e2d76"]}},"end_after_tools":false,"hide_sequential_outputs":false,"isCollaborative":true}},{"_id":{"$oid":"68b02402f44b330df218d317"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68b02402f44b330df218d317"},"id":"agent_1WQiNjr_JZAp8CWEP4ADw","name":"DEI Agent","description":"For all things DEI","provider":"openAI","model":"gpt-4.1","artifacts":"default","tools":["file_search","web_search"],"tool_kwargs":[],"author":"melanieo'hagan@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1756374018885"}},"updatedAt":{"$date":{"$numberLong":"1756375438147"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"tool_resources":{"file_search":{"file_ids":["d7498b6c-e30f-4d1c-8b52-f678aace797e","fd5aad7e-1ba2-4b24-9608-f35df02c84fb","401b78d2-6fef-4763-956e-d5f250279720","7094c8f9-235e-4d46-a579-0ae36d9ca810","d3457897-9c0a-4d4b-906b-4792cf40e9fd","8d048b0d-8387-4e50-8e85-d87c5ef081f6","6bc453d4-1aec-4152-9f37-2455163088ab","5c50be24-e51d-4811-ac73-60b055fdbe4b","9dcf1a3c-a281-4f2f-8c21-8212f6f6ecf1"]}}}},{"_id":{"$oid":"6876a742580d4bd065e1c6eb"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"6876a742580d4bd065e1c6eb"},"id":"agent_ARsQ0Cxpa18ziV4H1c9Up","name":"Bria","description":"Bria Image Generation, Just give me a prompt","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"default","tools":["downloadImage_action_YXBpLmV4YW","formatImageUrl_action_aHR0cGJpbi","generateImageFromText_action_ZW5naW5lLn","generateImageFromTextFast_action_ZW5naW5lLn"],"tool_kwargs":[],"author":"daveporter@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1752606530273"}},"updatedAt":{"$date":{"$numberLong":"1752669323209"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"actions":["aHR0cGJpbi_action_LScuB9CXoA_1dg-BsEKwm","ZW5naW5lLn_action_fBtBeZ53i56kAyv6U7K7C"],"avatar":{"filepath":"/images/6647c9028904c2b816298e7f/agent-agent_ARsQ0Cxpa18ziV4H1c9Up-avatar-1752612706485.png?manual=false","source":"local"}}},{"_id":{"$oid":"6865559362fc9dddcdbc0e53"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"6865559362fc9dddcdbc0e53"},"id":"agent_aVR4-tXZAg3FjNnB4ghaI","name":"Leadership Update Creator","description":"This agent helps to write succinct comms for meetings like the BOLT","provider":"openAI","model":"gpt-5","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"emmaknibbs@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"createdAt":{"$date":{"$numberLong":"1751471507839"}},"updatedAt":{"$date":{"$numberLong":"1757085041987"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"category":"general","support_contact":{"name":"Emma Knibbs","email":"emmaknibbs@oliver.agency"}}},{"_id":{"$oid":"68961894881dbbb7c5b750a5"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68961894881dbbb7c5b750a5"},"id":"agent_E9XhFIeFsU3o0U6QXbmKN","name":"BeakMail - Release Email Generator","description":"Exclusively for Diageo North America: This agent crafts perfectly formatted vendor release emails for your OOH campaigns. Just provide the links and plan details, and get (almost) ready-to-send communications that maintain brand standards while saving you valuable time.","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"soniacase@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1754667156953"}},"updatedAt":{"$date":{"$numberLong":"1754681655106"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/6650e31aef8cbd13d2906ce7/agent-agent_E9XhFIeFsU3o0U6QXbmKN-avatar-1754670854377.png?manual=false","source":"local"},"tool_resources":{"file_search":{"file_ids":["11198d91-8d33-4353-9005-8b4edaf57444"]}},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"67ed5b80a409fc7f0d646b22"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67ed5b80a409fc7f0d646b22"},"id":"agent__y0DMWTSK-U92CctNj13M","name":"OLIVER Case Study Agent","description":"Here to help you quickly write better case studies. Note: This tool is a WIP - please share any feedback with Adam Cochrane.","provider":"openAI","model":"gpt-4o","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"adamcochrane@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1743608704592"}},"updatedAt":{"$date":{"$numberLong":"1744126774938"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/6661df74115e699b8e883206/f50dfae0-ce9f-4052-97bb-d7ee42d78372-image_fx_ (6).png","source":"local"},"tool_resources":{"file_search":{"file_ids":["8cc80107-ce20-46dd-8bb4-e47bb8465637"]}}}},{"_id":{"$oid":"687e5dbb283da74fdab07cee"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"687e5dbb283da74fdab07cee"},"id":"agent_cse8AUEadnKFPeEf-R1WK","name":"H&M - MPC KB","description":"","provider":"openAI","model":"gpt-4o-mini","model_parameters":{"temperature":{"$numberInt":"0"}},"artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"andyhoare@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1753111995439"}},"updatedAt":{"$date":{"$numberLong":"1753112457332"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["c1153fdc-c3a1-44ed-bc57-7176319b00ba","d815381d-dc7a-4b5f-a8d9-5363b27d3f3c"]}},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/664c820f1c7db5b43f26f1bb/agent-agent_cse8AUEadnKFPeEf-R1WK-avatar-1753112454084.png?manual=false","source":"local"}}},{"_id":{"$oid":"68a2e82183cdbc288e8258e0"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68a2e82183cdbc288e8258e0"},"id":"agent_1_ERScZ9VvKojSUOKfRq3","name":"Barclaycard Daily Brand Opportunities ","description":"A daily scan of moments in culture for Barclaycard to join the conversation","provider":"openAI","model":"gpt-5","artifacts":"default","tools":["web_search"],"tool_kwargs":[],"author":"robkavanagh@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"createdAt":{"$date":{"$numberLong":"1755506721233"}},"updatedAt":{"$date":{"$numberLong":"1757438528015"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"category":"general","support_contact":{"name":"","email":""}}},{"_id":{"$oid":"686e844e62fc9dddcdcb7f3b"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"686e844e62fc9dddcdcb7f3b"},"id":"agent__Met_OXJ-LNt_q6a4MnX4","name":"MPC - Project Plan Builder","description":"The agent will be able to create project plans in MPC based on a set of pre defined templates. Ready to get started? Say \"Lets go\"","provider":"anthropic","model":"claude-3-7-sonnet-latest","model_parameters":{"temperature":{"$numberInt":"0"},"resendFiles":false,"thinking":false},"artifacts":"","tools":["createTask_action_YXBpMi5vbW"],"tool_kwargs":[],"author":"andyhoare@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1752073294772"}},"updatedAt":{"$date":{"$numberLong":"1753700526694"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/664c820f1c7db5b43f26f1bb/agent-agent__Met_OXJ-LNt_q6a4MnX4-avatar-1753700526680.png?manual=false","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false,"actions":["YXBpMi5vbW_action_T40aoNY0U4_oRWINpukUf"],"recursion_limit":{"$numberInt":"150"}}},{"_id":{"$oid":"68a9b9c8af5d265fefe6f2ec"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68a9b9c8af5d265fefe6f2ec"},"id":"agent_is88_rn0gQyc30cJynwfy","name":"Copywriting - crafting competitive claims ","description":"A comprehensive copywriter prompt guiding analysis of competitor messaging, claims, and emotional appeals to create sharper, more distinctive, and credible brand communications across all media channels.","provider":"openAI","model":"gpt-4.1","artifacts":"","tools":[],"tool_kwargs":[],"author":"raestones@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1755953608897"}},"updatedAt":{"$date":{"$numberLong":"1755953756092"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/agent-agent_is88_rn0gQyc30cJynwfy-avatar-1755953707000.png?manual=false","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"67cfeea83e2a0738e99f7a32"},"count":{"$numberInt":"5"},"agentDetails":{"_id":{"$oid":"67cfeea83e2a0738e99f7a32"},"id":"agent_AftTtKqd2mqI5QABZJznx","name":"Barclaycard TOV","description":"A Tone of Voice buddy checker, and copy crafter","provider":"openAI","model":"gpt-5","tools":["execute_code","file_search"],"tool_kwargs":[],"author":"robkavanagh@oliver.agency","agent_ids":["agent_dJkxflO7nAGPIsD3JJBdI"],"conversation_starters":[],"projectIds":[],"createdAt":{"$date":{"$numberLong":"1741680296939"}},"updatedAt":{"$date":{"$numberLong":"1757438564057"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"tool_resources":{"file_search":{"file_ids":["23e648d2-e65d-460a-a32d-66695dbf5ec4","b8b2e566-63df-4646-8d6e-f25b4e138fb3","949ec1a5-9b61-4c8d-b3be-7cabea23443d","80a9a239-200a-448f-a5ae-c99c28ab36d7"]}},"avatar":{"filepath":"/images/664ce4077dc62dd8d0740bd4/Screenshot 2025-03-14 at 19.15.37.png","source":"local","_id":{"$oid":"67d480662ee62534abb6ad03"}},"category":"general","support_contact":{}}},{"_id":{"$oid":"682b5ff1cd40c66735fef8f1"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"682b5ff1cd40c66735fef8f1"},"id":"agent_Db7CsRa1VVjZjNSkRYysX","name":"OLIVER Scale - Idea Evaluator ","description":"Elevate and evaluate creative work, write case-studies, and rationales. Just drag and drop your work and provide the brand, the market it will run in, and the type of asset e.g. social post, campaign idea, visual, etc.. Any comments, feedback, applause please contact raestones@oliver.agency","avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/602de1de-1fd6-469d-b19e-96091976b114-Screenshot 2025-04-08 at 20.45.58.png","source":"local"},"provider":"anthropic","model":"claude-sonnet-4-20250514","artifacts":"","tools":[],"tool_kwargs":[],"actions":[],"author":"raestones@oliver.agency","hide_sequential_outputs":false,"end_after_tools":false,"agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"__v":{"$numberInt":"0"},"createdAt":{"$date":{"$numberLong":"1747673073334"}},"updatedAt":{"$date":{"$numberLong":"1757429575637"}},"category":"general","support_contact":{"name":"Rae Stones","email":"Raestones@oliver.agency"}}},{"_id":{"$oid":"68a9bfe2af5d265fefe6f5a2"},"count":{"$numberInt":"4"},"agentDetails":{"_id":{"$oid":"68a9bfe2af5d265fefe6f5a2"},"id":"agent_skZXsV4LnAf798DU0fv32","name":"Social copy - crafting social copy","description":"This social copy agent will help you analyse and differentiate from leading competitors when creating short-form, thumb-stopping content for social posts..","provider":"openAI","model":"gpt-4.1","artifacts":"","tools":["web_search"],"tool_kwargs":[],"author":"raestones@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1755955170024"}},"updatedAt":{"$date":{"$numberLong":"1757431504113"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/agent-agent_skZXsV4LnAf798DU0fv32-avatar-1755955170072.png?manual=false","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false,"category":"general","support_contact":{"name":"Rae Stones","email":"Raestones@oliver.agency"}}},{"_id":{"$oid":"682b786bcd40c66735ff53cd"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"682b786bcd40c66735ff53cd"},"id":"agent_ItjQIx7125SaQiVtwtqX7","name":"TEXTOS DE APOIO - ITAÚ","description":"Assistente para criação de texto de apoio em campanhas de performance.","provider":"openAI","model":"gpt-4o","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"cleitonananias@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1747679339406"}},"updatedAt":{"$date":{"$numberLong":"1751402678465"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["0c659d7b-eaac-4c2d-8fec-5c968cce8c8a"]}},"end_after_tools":false,"hide_sequential_outputs":false,"isCollaborative":true}},{"_id":{"$oid":"67ac93d319b0514a6979e77c"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67ac93d319b0514a6979e77c"},"id":"agent_GY1i_Vr9GVbwmUv4ekF14","name":"Infinite Idea Generator Agent","description":"Let a 1980s ad man squeeze your creative juices","provider":"anthropic","model":"claude-3-7-sonnet-latest","tools":["dalle","execute_code","file_search"],"tool_kwargs":[],"author":"alecbarr@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1739363283480"}},"updatedAt":{"$date":{"$numberLong":"1753961048719"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["28701d97-1211-446c-b069-28a8583f138a","443fd70d-95bf-498b-b81d-55d2f4bf093f"]},"execute_code":{"file_ids":["4b502df6-a1f0-4a98-b9a2-6a07dbab1727"]}},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/668ba692af050087312909b5/images.png","source":"local","_id":{"$oid":"67ac966419b0514a6979ef30"}},"artifacts":"default","model_parameters":{"temperature":{"$numberInt":"1"}}}},{"_id":{"$oid":"67f585d8d469f297df11f41d"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67f585d8d469f297df11f41d"},"id":"agent_elhpCHAXemcoeaRhpH233","name":"U-Studio awards case-study writer ","description":"Write case-studies for U-Studio awards. Just drag and drop your work, and ask for a case-study. Any comments, feedback, applause please contact raestones@oliver.agency","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"custom","tools":["file_search"],"tool_kwargs":[],"author":"raestones@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1744143832229"}},"updatedAt":{"$date":{"$numberLong":"1747673251566"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/2edd64a7-55b9-4610-8ab1-cf2f92d95d41-Screenshot 2025-04-08 at 21.23.39.png","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"67f8d1a16301b2ffdc5b7a33"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67f8d1a16301b2ffdc5b7a33"},"id":"agent_V0x_R6FukkFHpxUxeaBmd","name":"U-Studio PM Helper (UK)","description":"Supercharge Delivery Tasks","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":["calculator","file_search"],"tool_kwargs":[],"author":"dimigoddard@ustudio.global","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1744359841007"}},"updatedAt":{"$date":{"$numberLong":"1749752357529"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["8923c9b9-3652-48c5-a63e-756ff29f1643","60c5bf4e-a9f6-41dc-8041-658eb5129c91","72fc327b-906e-4fa0-a022-f0ea38a10b5f"]}},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/66618f2a115e699b8e882619/71a2f22d-a21d-4b99-a644-5d91de3707b9-UPM.png","source":"local"}}},{"_id":{"$oid":"6899fb7c881dbbb7c5ba36ed"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"6899fb7c881dbbb7c5ba36ed"},"id":"agent_mRoxknp_CEV5qibZ0jrHk","name":"H&M - CIA (Pilot 4012)","description":"Pilot agent to test out Campaign Intellegence workflow","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"andyhoare@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1754921852917"}},"updatedAt":{"$date":{"$numberLong":"1754922304405"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["d07d9386-7567-4efc-ab1d-4da8428bb596","50175dbd-6f7a-4607-8a66-f8e2cc4a8b05","5992e744-c085-41d6-94ed-8f85ca8c2c18","de687b41-10cf-400d-823f-6792e81a1be7","b4758509-173c-46a1-a721-75ee216ba79d","eaa0d09f-121b-4334-a56e-f19a5e058e8c","5ca9613e-1c57-403b-b658-980d5f14a71b","ae48dcda-fa01-4d2c-bf23-a1e9a3a0f9cf","33a742f1-5466-4f57-8236-9b64323fccad","8b150f31-ad81-4677-a528-8cda2f7cdd09","b2db5471-c066-4242-b25b-bcad007b2a91","751718a7-f8f9-4f0b-8578-e41e109397dd","5d161179-2349-4d39-a368-f85d4f069ed3","a3116829-f179-4e90-a2c8-d7d26d2d9e66","e40a2f48-ee0a-498c-ad7d-b2306a088564","aedb2fa5-b5ca-4270-8480-393eb6a9052d","cacf2b41-fae6-496b-83c1-cbc64aca55e2","c7487d09-3089-4a66-9988-1d6bb5e234a1","9b8e28a5-1591-4d77-879c-a81d1ae5bcfd","09367bab-d8a7-4cb5-aa73-302fd8777f8b","bde0e637-1c6e-4b4a-9887-41b2ed58bb01","2b9a4280-14bb-4fa8-8525-3a126749ef88","3265760f-0b23-435c-8f98-fed3a5c9b666","cd10d74f-be56-4107-b0fd-90f9cb3ba85f","9cbd5e05-5195-4008-82c7-24499e6c5fa8","cbcae01f-13e2-47ef-a67c-da41a33d1425","4c46175a-52a7-49fb-a569-8f9a5f520045","02fa4e1c-6a67-44ba-8a40-48ad118fe2e3","30d12c67-7a58-4849-8710-35bdaaab8c75","e6c65644-beed-4f23-908d-195640b7ae36","afe2f801-63cf-4010-9944-e9ce0b38384f","160ba7b0-f1b0-4007-b5a4-04af0d581151","17452c0e-1768-4656-b937-68851a8adcc9","b00f8aa0-5a3d-4b91-966b-3fbd25656e24","258ffca0-0639-4058-9a3e-15596e09c3c3","48073a68-208e-4704-b474-6c7272fa1a45","2fe064fa-aeba-4f6e-9369-eb99a60094e4","ef63ebc2-862b-4501-8065-009a8a90a83a","84b44c3c-e689-44ca-9dec-5ffc32b85884","f0390693-d439-4e82-ada3-792256d45410"]}},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"67f8f36e6301b2ffdc5c0760"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67f8f36e6301b2ffdc5c0760"},"id":"agent_Gf7aZ41Lg5_zX4Yprre8Q","name":"U-Studio job description writer ","description":"Add the job title, brand + studio, and any specific skills / requirements. ","provider":"openAI","model":"gpt-5","artifacts":"","tools":[],"tool_kwargs":[],"author":"raestones@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1744368494477"}},"updatedAt":{"$date":{"$numberLong":"1756731126319"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/67b4a06731d9dba7986a2ac4/agent-agent_Gf7aZ41Lg5_zX4Yprre8Q-avatar-1755951064759.png?manual=false","source":"local"},"category":"general","support_contact":{"name":"","email":""}}},{"_id":{"$oid":"68a489c9f7d7c7d608afccaa"},"count":{"$numberInt":"6"},"agentDetails":{"_id":{"$oid":"68a489c9f7d7c7d608afccaa"},"id":"agent_QavDTS149QpZI1sm_9fgu","name":"Internal Training Comms Assistant","description":"Tell me about the comms you want to send? ","provider":"openAI","model":"gpt-4o","artifacts":"","tools":[],"tool_kwargs":[],"author":"emmaknibbs@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1755613641740"}},"updatedAt":{"$date":{"$numberLong":"1755613689814"}},"__v":{"$numberInt":"0"}}},{"_id":{"$oid":"67a6567b18d09acc3e98a50d"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"67a6567b18d09acc3e98a50d"},"id":"agent_W3swRavqCH0OWmHi5ckuO","name":"Runway Prompt Helper","description":"AI Prompt tool for video,. Created by Dave Porter ","provider":"anthropic","model":"claude-sonnet-4-20250514","tools":[],"tool_kwargs":[],"author":"daveporter@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1738954363436"}},"updatedAt":{"$date":{"$numberLong":"1757346555399"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/6647c9028904c2b816298e7f/02af3d73-70bd-44ec-95b6-7a1fa068da95-Leonardo_Kino_XL_Delicate_Watercolor_Portrait_of_a_Blooming_C_2.png","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false,"isCollaborative":false,"category":"general","support_contact":{}}},{"_id":{"$oid":"681e3419cdda83201f3f6d49"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"681e3419cdda83201f3f6d49"},"id":"agent_MKBKj1v8rXmiVWxARlyUC","name":"BAIS Helper (Brazil)","description":"Beauty AI Studio Helper","provider":"openAI","model":"gpt-4o","artifacts":"","tools":["calculator","file_search"],"tool_kwargs":[],"author":"dimigoddard@ustudio.global","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1746809881915"}},"updatedAt":{"$date":{"$numberLong":"1747405535666"}},"__v":{"$numberInt":"0"},"tool_resources":{"file_search":{"file_ids":["b0d9f500-0731-44c8-81e6-ee806eac469e","550c4832-bdc9-4fca-982f-e27851aafdf7","cba1861e-0bc4-40bd-8315-9dabfc76b7ab"]}},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/66618f2a115e699b8e882619/4019cbbc-c774-4b08-b7dc-a1953ef090d7-BAIS BR.png","source":"local"}}},{"_id":{"$oid":"6808b9436301b2ffdc736e26"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"6808b9436301b2ffdc736e26"},"id":"agent_sOIvGuCvTH2cdKLJjSvhy","name":"Slipstream Brief Builder Ai - AJ (TEST GROUP ONLY)","description":"Build your Slipstream Breifs Here","provider":"anthropic","model":"claude-sonnet-4-20250514","artifacts":"","tools":[],"tool_kwargs":[],"author":"andrewjoynson@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1745402179366"}},"updatedAt":{"$date":{"$numberLong":"1756795434955"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"isCollaborative":false,"category":"general","support_contact":{}}},{"_id":{"$oid":"684ae4f69e15477ebab74dce"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"684ae4f69e15477ebab74dce"},"id":"agent_q54cGQutlGkpb_6uD-A5F","name":"Latam BR - Revisor Gramatical (RevisAI)","description":"Revisor gramatical em português brasileiro. Para suporte, entre em contato com ia-latam@oliver.agency","provider":"openAI","model":"gpt-4o","model_parameters":{"temperature":{"$numberDouble":"0.02"},"resendFiles":false},"artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"robertorodrigues@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1749738742480"}},"updatedAt":{"$date":{"$numberLong":"1752629560753"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"686e9e1962fc9dddcdcbea09"},"count":{"$numberInt":"5"},"agentDetails":{"_id":{"$oid":"686e9e1962fc9dddcdcbea09"},"id":"agent_hYh2Nnuf-v5Z5H6BZ6ajM","name":"Pencil Training Material Agent","description":"The agent is an interactive AI agent that guides learners through using Pencil Pro’s key features, from ad creation to AI automation. It provides step-by-step support, practical examples, and on-demand answers to help users create and manage high-performing campaigns with confidence.","provider":"openAI","model":"gpt-4o","artifacts":"custom","tools":["file_search","web_search"],"tool_kwargs":[],"author":"kubeshneemoodley@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"createdAt":{"$date":{"$numberLong":"1752079897229"}},"updatedAt":{"$date":{"$numberLong":"1752150074220"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"68232957cdda83201f45302e"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68232957cdda83201f45302e"},"id":"agent_BmycOb5AtMVzB0QSkqFRr","name":"Category entry points agent","description":"Define the category entry points for your product/brand","provider":"openAI","model":"gpt-4.1","artifacts":"","tools":[],"tool_kwargs":[],"author":"danielbridge@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1747134807394"}},"updatedAt":{"$date":{"$numberLong":"1747139698876"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"686e0d2862fc9dddcdc9b648"},"count":{"$numberInt":"3"},"agentDetails":{"_id":{"$oid":"686e0d2862fc9dddcdc9b648"},"id":"agent_sDA10hq8jRKgziT4ufK-l","name":"QC Buddy","description":"","provider":"openAI","model":"gpt-4o","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"reshmikrishna@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"createdAt":{"$date":{"$numberLong":"1752042792682"}},"updatedAt":{"$date":{"$numberLong":"1754559759792"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false}},{"_id":{"$oid":"68963b28881dbbb7c5b7a210"},"count":{"$numberInt":"2"},"agentDetails":{"_id":{"$oid":"68963b28881dbbb7c5b7a210"},"id":"agent_5wYI1Z8DNFN6vfWJaKPv9","name":"Agent Billie – Billing Email Assistant","description":"Automates monthly billing approval emails for Diageo North America. IMPORTANT: You MUST provide a list of brands for billing emails or agent won't work. To use: 1) Upload Cost Tracker, 2) Upload Brand Contacts, 3) Specify month, 4) Copy/paste brand names from your spreadsheet, 5) Add optional custom message. Tip: Select blue brand headers and paste them directly.","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":["file_search"],"tool_kwargs":[],"author":"soniacase@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[{"$oid":"66c62b0a836edb58b9bd63dc"}],"createdAt":{"$date":{"$numberLong":"1754676008665"}},"updatedAt":{"$date":{"$numberLong":"1754681612972"}},"__v":{"$numberInt":"0"},"avatar":{"filepath":"/images/6650e31aef8cbd13d2906ce7/agent-agent_5wYI1Z8DNFN6vfWJaKPv9-avatar-1754676019675.png?manual=false","source":"local"},"end_after_tools":false,"hide_sequential_outputs":false,"tool_resources":{"file_search":{"file_ids":["a86755dc-574f-4b07-9d37-f4a44b2390cc"]}}}},{"_id":{"$oid":"68483a96a71f3b455e979927"},"count":{"$numberInt":"5"},"agentDetails":{"_id":{"$oid":"68483a96a71f3b455e979927"},"id":"agent_Ux-9lut57oIaZAtRGxJBD","name":"Comms Writing Assistant ","description":"Hello, Tell me what comms you need me to write. Who is it for and what channel are you using to send the comms?","provider":"anthropic","model":"claude-3-7-sonnet-latest","artifacts":"","tools":["web_search"],"tool_kwargs":[],"author":"emmaknibbs@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"createdAt":{"$date":{"$numberLong":"1749564054154"}},"updatedAt":{"$date":{"$numberLong":"1757000808412"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"category":"general","support_contact":{"name":"Emma Knibbs","email":"emmaknibbs@oliver.agency"}}},{"_id":{"$oid":"68763138580d4bd065dfe6cd"},"count":{"$numberInt":"8"},"agentDetails":{"_id":{"$oid":"68763138580d4bd065dfe6cd"},"id":"agent_DRmnCsKsKQYuskWuKONWb","name":"Instructional Design Assistant ","description":"Let me what content would you like me to create! ","provider":"openAI","model":"gpt-5","artifacts":"","tools":["stable-diffusion","file_search"],"tool_kwargs":[],"author":"emmaknibbs@oliver.agency","agent_ids":[],"conversation_starters":[],"projectIds":[],"createdAt":{"$date":{"$numberLong":"1752576312372"}},"updatedAt":{"$date":{"$numberLong":"1757000831857"}},"__v":{"$numberInt":"0"},"end_after_tools":false,"hide_sequential_outputs":false,"avatar":{"filepath":"/images/66703aeffab8b390193f31c9/agent-agent_DRmnCsKsKQYuskWuKONWb-avatar-1752583538828.png?manual=false","source":"local"},"category":"general","support_contact":{"name":"Emma Knibbs","email":"emmaknibbs@oliver.agency"}}}] diff --git a/weekly_agent_sync.sh b/weekly_agent_sync.sh new file mode 100755 index 0000000..7c0a4b6 --- /dev/null +++ b/weekly_agent_sync.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -euo pipefail + +# ======== CONFIGURE THESE ======== +MONGO_CONT="chat-mongodb" # Docker container name/ID for MongoDB +DB_NAME="LibreChat" # MongoDB database name +EXPORT_JS="/opt/agent-sync/export_shared_agents.js" +OUT_JSON="/opt/agent-sync/shared_agents.json" +PY_SCRIPT="/opt/agent-sync/register_agents.py" + +# Path to the Python executable inside your EXISTING venv +VENV_PY="/opt/agent-sync/venv/bin/python" + +# Optional log file; set to /dev/null to disable +LOG_FILE="/opt/agent-sync/log/agent_sync.log" +# ================================= + +timestamp() { date -Is; } + +# quick sanity checks +[[ -x "$VENV_PY" ]] || { echo "[$(timestamp)] ERROR: venv python not found at $VENV_PY"; exit 1; } +command -v docker >/dev/null 2>&1 || { echo "[$(timestamp)] ERROR: docker not found"; exit 1; } + +echo "[$(timestamp)] Starting weekly agent sync" >> "$LOG_FILE" + +# 1) Export from Mongo (valid JSON to host file) +docker exec -i "$MONGO_CONT" env MONGOSH_NO_RC=1 mongosh --norc --quiet "$DB_NAME" --file /dev/stdin < "$EXPORT_JS" > "$OUT_JSON" + + +# 2) (Optional) sanity-check JSON if jq is present +if command -v jq >/dev/null 2>&1; then + jq -e . "$OUT_JSON" >/dev/null 2>&1 || { echo "[$(timestamp)] ERROR: Output is not valid JSON: $OUT_JSON" >> "$LOG_FILE"; exit 1; } +fi + +# 3) Register with the API using your existing venv +"$VENV_PY" "$PY_SCRIPT" --input "$OUT_JSON" >> "$LOG_FILE" 2>&1 + +echo "[$(timestamp)] Done" >> "$LOG_FILE"