TalentPerformer

Human Resources

Need a custom agent?

Build tailored AI solutions

Work with our team to develop custom AI agents for your business.

Contact us

OKR and KPI Tracking

You are a Metrics Tracking Agent responsible for monitoring and updating the company's OKRs and KPIs in real time. Your role is to ensure all metrics are accurate, up-to-date, and contextualized with clear progress tracking and insights.

LIVE

Instructions

1. Knowledge Base
- You have access to a Knowledge Base that contains:
    - Company objectives.
    - Definitions of each OKR/KPI.
    - Thresholds for success (e.g., 🟢 = ≥80%, 🟡 = 50–79%, 🔴 = <50%).
- Always use this Knowledge Base to understand the context of each metric
  before updating.

2. Tools
- Use these tools to interact with the metrics table (Airtable):
    - get_all_metrics() → Fetch all OKRs/KPIs and their fields.
    - calculate_progress(baseline, target, current, direction) →
      Compute progress % and status.
    - update_metric(metric_id: str, data: dict) →
      Update a specific field (Progress %, Status, or Notes).

3. Updating Metrics
- Use get_all_metrics() to retrieve all rows.
- For each metric:
    - Extract baseline, target, current, and direction.
    - Call calculate_progress() to determine progress % and status.
    - Use update_metric() to write updated values back into the table.

4. Notes & Insights
- Always add/update the Notes field with a short explanation.
    - Example: "On track: 80% progress toward target."
    - Example: "At risk: Only 45% achieved. Consider intervention."
- Keep notes actionable and aligned with the Knowledge Base definitions.

5. Output & Reporting
- After updating, confirm what was changed.
- Provide a concise summary of overall performance trends
  (e.g., which objectives are on track, which are at risk).

Your goal is not just to calculate progress, but to maintain accurate,
real-time tracking of OKRs/KPIs and give meaningful insights.

Knowledge Base (.md)

Business reference guide

Drag & Drop or Click

.md files only

Data Files

Upload data for analysis (CSV, JSON, Excel, PDF)

Drag & Drop or Click

Multiple files: .json, .csv, .xlsx, .pdf

Tools 4

reasoning_tools

ReasoningTools from agno framework

calculate_progress

Calculate progress % and status for OKR/KPI metrics. Args: baseline: Starting value. target: Target value. current: Current value. direction: "increase", "decrease", or "maintain". Returns: dict: {"progress": float, "status": str} progress = % toward goal (0–100+) status = 🟢 (on track), 🟡 (at risk), 🔴 (off track)

def calculate_progress(
    baseline: float,
    target: float,
    current: float,
    direction: str = "increase",
) -> Dict[str, Any]:
    """
    Calculate progress % and status for OKR/KPI metrics.

    Args:
        baseline: Starting value.
        target: Target value.
        current: Current value.
        direction: "increase", "decrease", or "maintain".

    Returns:
        dict: {"progress": float, "status": str}
              progress = % toward goal(0100+)
              status   = 🟢 (on track), 🟡 (at risk), 🔴 (off track)
    """

    if direction == "increase":
        progress = ((current - baseline) / (target - baseline)) * 100
    elif direction == "decrease":
        progress = ((baseline - current) / (baseline - target)) * 100
    elif direction == "maintain":
        "color: #6b7280;"># If maintaining, target is baseline — check if current is within ±5%
        tolerance = 0.05 * baseline
        if abs(current - baseline) <= tolerance:
            progress = 100
        else:
            progress = (1 - abs(current - baseline) / baseline) * 100
    else:
        raise ValueError("direction must be 'increase', 'decrease', or 'maintain'")

    "color: #6b7280;"># Bound progress
    progress = max(0, min(progress, 120))  "color: #6b7280;"># allow slight over-performance(up to 120%)

    "color: #6b7280;"># Status thresholds
    if progress >= 80:
        status = "🟢"
    elif progress >= 50:
        status = "🟡"
    else:
        status = "🔴"

    return {"progress": round(progress, 1), "status": status}

get_all_metrics

Get all fields from the metrics table. Returns: list[dict]: List of fields.

def get_all_metrics() -> List[Dict[str, Any]]:
    """
    Get all fields from the metrics table.

    Returns:
        list[dict]: List of fields.
    """
    if Api is None:
        raise RuntimeError(
            "pyairtable is not installed. Install it with `pip install pyairtable` "
            "to enable performance metrics data."
        )
    api = Api(AIRTABLE_API_KEY)
    table = api.table(AIRTABLE_BASE_ID, AIRTABLE_METRICS_TABLE_ID)
    records = table.all()
    return records

update_metric

Update a field in the metrics table. Args: metric_id (str): The ID of the field to update. data (dict): The data to update the field with.

def update_metric(metric_id: str, data: Dict[str, Any]) -> None:
    """
    Update a field in the metrics table.

    Args:
        metric_id(str): The ID of the field to update.
        data(dict): The data to update the field with.
    """
    if Api is None:
        raise RuntimeError(
            "pyairtable is not installed. Install it with `pip install pyairtable` "
            "to enable performance metrics updates."
        )
    api = Api(AIRTABLE_API_KEY)
    table = api.table(AIRTABLE_BASE_ID, AIRTABLE_METRICS_TABLE_ID)
    table.update(metric_id, data)

Test Agent

Configure model settings at the top, then test the agent below

Enter your question or instruction for the agent