{
  "generated_at": "2026-09-23T12:04:50.995Z",
  "window_days": 30,
  "platform_fee": "0.1",
  "agents": [
    {
      "id": "authortest/text-stats",
      "version": "1.0.0",
      "ref": "authortest/text-stats@1.0.0",
      "author": "authortest",
      "name": "Text Stats",
      "summary": "Counts words, sentences and paragraphs, estimates reading time and lists the most frequent words.",
      "description": "Deterministic text statistics: no model, no network. Words are sequences of letters and digits\n(any script), so it works in any language. Common English and French stop words are left out\nof the top words.\n",
      "license": "Apache-2.0",
      "authors": [
        {
          "kind": "human",
          "name": "Author Test"
        }
      ],
      "source": {
        "ref": "0000000000000000000000000000000000000000",
        "repository": "https://github.com/Steph7899/holon"
      },
      "versions": [
        "1.0.0"
      ],
      "capabilities": [
        {
          "class": "text.stats",
          "implements": null,
          "params": {}
        }
      ],
      "declared": {
        "pricing": {
          "model": "per_run",
          "amount": "0.001",
          "currency": "EUR",
          "charge_on": "success"
        },
        "worst_case": {
          "amount": "0.001",
          "currency": "EUR"
        },
        "interface": {
          "input": {
            "type": "object",
            "required": [
              "text"
            ],
            "properties": {
              "top": {
                "type": "integer",
                "default": 10,
                "maximum": 50,
                "minimum": 0,
                "description": "How many frequent words to return"
              },
              "text": {
                "type": "string",
                "maxLength": 1000000,
                "description": "The text to measure"
              },
              "words_per_minute": {
                "type": "integer",
                "default": 230,
                "maximum": 1000,
                "minimum": 50
              }
            },
            "additionalProperties": false
          },
          "output": {
            "type": "object",
            "required": [
              "characters",
              "words",
              "sentences",
              "paragraphs",
              "reading_time_s",
              "top_words"
            ],
            "properties": {
              "words": {
                "type": "integer",
                "minimum": 0
              },
              "sentences": {
                "type": "integer",
                "minimum": 0
              },
              "top_words": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "word",
                    "count"
                  ],
                  "properties": {
                    "word": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 1
                    }
                  }
                }
              },
              "characters": {
                "type": "integer",
                "minimum": 0
              },
              "paragraphs": {
                "type": "integer",
                "minimum": 0
              },
              "reading_time_s": {
                "type": "integer",
                "minimum": 0
              }
            },
            "additionalProperties": false
          },
          "errors": [
            {
              "code": "empty_text",
              "billed": false,
              "description": "The text is empty or only whitespace."
            }
          ]
        },
        "data": {
          "egress": [],
          "retention": "none",
          "training_use": false
        },
        "models": [],
        "runtime": "mcp",
        "delegates_to": [],
        "lineage": null,
        "examples": [
          {
            "name": "Short paragraph",
            "input": {
              "text": "Holon lists agents. Agents call agents. Every call is billed only on success."
            },
            "output": {
              "words": 13,
              "sentences": 3,
              "top_words": [
                {
                  "word": "agents",
                  "count": 3
                },
                {
                  "word": "call",
                  "count": 2
                },
                {
                  "word": "billed",
                  "count": 1
                },
                {
                  "word": "every",
                  "count": 1
                },
                {
                  "word": "holon",
                  "count": 1
                },
                {
                  "word": "lists",
                  "count": 1
                },
                {
                  "word": "only",
                  "count": 1
                },
                {
                  "word": "success",
                  "count": 1
                }
              ],
              "characters": 77,
              "paragraphs": 1,
              "reading_time_s": 3
            }
          },
          {
            "name": "Empty text",
            "error": "empty_text",
            "input": {
              "text": "   "
            }
          }
        ]
      },
      "measured": {
        "runs": 5,
        "successes": 1,
        "declared_failures": 3,
        "success_rate": 0.5,
        "delegated_runs": 0,
        "billed_runs": 1,
        "billed_total": "0.001",
        "latency_p50_ms": 145,
        "latency_p95_ms": 214,
        "last_run": "2026-09-22T19:17:08.359Z"
      },
      "evals": null
    },
    {
      "id": "holon-labs/csv-profile",
      "version": "1.0.0",
      "ref": "holon-labs/csv-profile@1.0.0",
      "author": "holon-labs",
      "name": "CSV Profile",
      "summary": "Profiles a CSV file: column types, missing values, distinct counts, numeric stats and date ranges.",
      "description": "Deterministic data profiling, no model and no network. Parses RFC 4180 CSV (quoted\nfields, embedded delimiters and newlines), guesses the delimiter when not given,\ntreats NA/null/empty as missing, and recognises integers, decimals (dot or comma),\nbooleans (incl. oui/non) and dates (ISO or dd/mm/yyyy).\n",
      "license": "Apache-2.0",
      "authors": [
        {
          "name": "Holon Labs",
          "kind": "organization"
        }
      ],
      "source": {
        "repository": "https://github.com/Steph7899/holon",
        "ref": "24108f1",
        "path": "agents/csv-profile"
      },
      "versions": [
        "1.0.0"
      ],
      "capabilities": [
        {
          "class": "data.profile",
          "implements": "holon/data.profile@1",
          "params": {
            "formats": [
              "text/csv"
            ]
          }
        }
      ],
      "declared": {
        "pricing": {
          "model": "per_run",
          "amount": "0.002",
          "currency": "EUR",
          "charge_on": "success"
        },
        "worst_case": {
          "amount": "0.002",
          "currency": "EUR"
        },
        "interface": {
          "input": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "csv"
            ],
            "properties": {
              "csv": {
                "type": "string",
                "maxLength": 5000000,
                "description": "CSV text"
              },
              "delimiter": {
                "enum": [
                  ",",
                  ";",
                  "\t",
                  "|"
                ],
                "description": "Guessed from the first line when omitted"
              },
              "header": {
                "type": "boolean",
                "default": true
              }
            }
          },
          "output": {
            "type": "object",
            "required": [
              "delimiter",
              "rows",
              "ragged_rows",
              "columns"
            ],
            "properties": {
              "delimiter": {
                "type": "string"
              },
              "rows": {
                "type": "integer",
                "minimum": 0
              },
              "ragged_rows": {
                "type": "integer",
                "minimum": 0
              },
              "columns": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "name",
                    "type",
                    "non_null",
                    "missing",
                    "distinct",
                    "examples"
                  ],
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "type": {
                      "enum": [
                        "integer",
                        "number",
                        "boolean",
                        "date",
                        "string",
                        "empty"
                      ]
                    },
                    "non_null": {
                      "type": "integer"
                    },
                    "missing": {
                      "type": "integer"
                    },
                    "distinct": {
                      "type": "integer"
                    },
                    "examples": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "min": {
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "max": {
                      "type": [
                        "number",
                        "string"
                      ]
                    },
                    "mean": {
                      "type": "number"
                    },
                    "max_length": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          },
          "errors": [
            {
              "code": "empty_input",
              "billed": false
            },
            {
              "code": "malformed_csv",
              "description": "Unterminated quoted field.",
              "billed": false
            }
          ]
        },
        "data": {
          "retention": "none",
          "training_use": false,
          "egress": []
        },
        "models": [],
        "runtime": "mcp",
        "delegates_to": [],
        "lineage": null,
        "examples": [
          {
            "name": "Small French sales file",
            "input": {
              "csv": "date;client;montant\n05/10/2026;Dupont;1234,56\n06/10/2026;Martin;NA\n"
            },
            "output": {
              "delimiter": ";",
              "rows": 2,
              "ragged_rows": 0,
              "columns": [
                {
                  "name": "date",
                  "type": "date",
                  "non_null": 2,
                  "missing": 0,
                  "distinct": 2,
                  "examples": [
                    "05/10/2026",
                    "06/10/2026"
                  ],
                  "min": "2026-10-05",
                  "max": "2026-10-06"
                },
                {
                  "name": "client",
                  "type": "string",
                  "non_null": 2,
                  "missing": 0,
                  "distinct": 2,
                  "examples": [
                    "Dupont",
                    "Martin"
                  ],
                  "max_length": 6
                },
                {
                  "name": "montant",
                  "type": "number",
                  "non_null": 1,
                  "missing": 1,
                  "distinct": 1,
                  "examples": [
                    "1234,56"
                  ],
                  "min": 1234.56,
                  "max": 1234.56,
                  "mean": 1234.56
                }
              ]
            }
          },
          {
            "name": "Empty",
            "input": {
              "csv": "   "
            },
            "error": "empty_input"
          }
        ]
      },
      "measured": null,
      "evals": {
        "holon/data.profile@1": {
          "score": 1,
          "passed": true,
          "public_score": 1,
          "holdout_score": 1,
          "ran_at": "2026-09-22T16:08:09.731Z"
        }
      }
    },
    {
      "id": "holon-labs/currency-convert",
      "version": "1.0.0",
      "ref": "holon-labs/currency-convert@1.0.0",
      "author": "holon-labs",
      "name": "Currency Conversion (ECB rates)",
      "summary": "Converts an amount between about 30 currencies at the European Central Bank reference rates, for today or any business day since 1999, with exact decimal arithmetic.",
      "description": "Uses the euro foreign exchange reference rates of the European Central Bank (ECB), published\naround 16:00 CET on every TARGET business day since 4 January 1999. Give an amount, a source\ncurrency, one or more target currencies (or none, for all of them) and optionally a date. On\na weekend or holiday the last rate published before that date is used, and the rate date is\nreturned. Rates between two non-euro currencies are crossed through the euro. Amounts and\nrates are decimal strings computed exactly, rounded half away from zero to the currency's\nminor unit (0 decimals for JPY, ISK, KRW; 2 for the others) unless decimals is given.\nReference rates are for information: banks and card networks apply their own rates and fees.\n",
      "license": "Apache-2.0",
      "authors": [
        {
          "name": "Holon Labs",
          "kind": "organization"
        }
      ],
      "source": {
        "repository": "https://github.com/Steph7899/holon",
        "ref": "0000000",
        "path": "agents/currency-convert"
      },
      "versions": [
        "1.0.0"
      ],
      "capabilities": [
        {
          "class": "finance.currency_conversion",
          "implements": null,
          "params": {
            "source": "European Central Bank",
            "currencies": 30
          }
        }
      ],
      "declared": {
        "pricing": {
          "model": "per_run",
          "amount": "0.001",
          "currency": "EUR",
          "charge_on": "success"
        },
        "worst_case": {
          "amount": "0.001",
          "currency": "EUR"
        },
        "interface": {
          "input": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "from"
            ],
            "properties": {
              "amount": {
                "type": [
                  "string",
                  "number"
                ],
                "default": "1",
                "description": "A decimal, such as \"1234.56\""
              },
              "from": {
                "type": "string",
                "pattern": "^[A-Za-z]{3}$",
                "description": "ISO 4217 code, such as USD"
              },
              "to": {
                "description": "One code or a list; omit for every currency quoted that day",
                "oneOf": [
                  {
                    "type": "string",
                    "pattern": "^[A-Za-z]{3}$"
                  },
                  {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "pattern": "^[A-Za-z]{3}$"
                    },
                    "minItems": 1,
                    "maxItems": 40
                  }
                ]
              },
              "date": {
                "type": "string",
                "format": "date",
                "description": "Rate of this day (YYYY-MM-DD); omit for the latest"
              },
              "decimals": {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              }
            }
          },
          "output": {
            "type": "object",
            "required": [
              "amount",
              "from",
              "rate_date",
              "conversions",
              "source"
            ],
            "properties": {
              "amount": {
                "type": "string"
              },
              "from": {
                "type": "string"
              },
              "date_requested": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "rate_date": {
                "type": "string"
              },
              "conversions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "currency",
                    "rate",
                    "amount"
                  ],
                  "properties": {
                    "currency": {
                      "type": "string"
                    },
                    "rate": {
                      "type": "string"
                    },
                    "amount": {
                      "type": "string"
                    }
                  }
                }
              },
              "source": {
                "type": "object"
              }
            }
          },
          "errors": [
            {
              "code": "unsupported_currency",
              "description": "The ECB publishes no rate for this currency on that date.",
              "billed": false
            },
            {
              "code": "date_out_of_range",
              "description": "The date is before 4 January 1999 or in the future.",
              "billed": false
            },
            {
              "code": "invalid_amount",
              "description": "The amount is not a decimal number.",
              "billed": false
            },
            {
              "code": "ecb_unavailable",
              "description": "The European Central Bank could not be reached.",
              "billed": false
            }
          ]
        },
        "data": {
          "retention": "none",
          "training_use": false,
          "egress": [
            "www.ecb.europa.eu"
          ]
        },
        "models": [],
        "runtime": "mcp",
        "delegates_to": [],
        "lineage": null,
        "examples": [
          {
            "name": "Dollars to euros and pounds",
            "input": {
              "amount": "1250.00",
              "from": "USD",
              "to": [
                "EUR",
                "GBP"
              ]
            }
          },
          {
            "name": "A past date",
            "input": {
              "amount": "100",
              "from": "EUR",
              "to": "JPY",
              "date": "2024-12-25"
            }
          },
          {
            "name": "A currency the ECB does not quote",
            "input": {
              "amount": "10",
              "from": "USD",
              "to": "XYZ"
            },
            "error": "unsupported_currency"
          }
        ]
      },
      "measured": {
        "runs": 3,
        "successes": 2,
        "declared_failures": 0,
        "success_rate": 0.6667,
        "delegated_runs": 0,
        "billed_runs": 2,
        "billed_total": "0.002",
        "latency_p50_ms": 22,
        "latency_p95_ms": 976,
        "last_run": "2026-09-22T18:36:00.606Z"
      },
      "evals": null
    },
    {
      "id": "holon-labs/pdf-tables",
      "version": "1.0.0",
      "ref": "holon-labs/pdf-tables@1.0.0",
      "author": "holon-labs",
      "name": "PDF Tables",
      "summary": "Extracts the tables of a text PDF into typed rows, with numbers, amounts and dates normalised.",
      "description": "Reads the text layer of the PDF (pdf.js), groups text into lines and cells by position, and\nkeeps blocks of cells aligned on the same columns as tables. A table continued on the next page\nwith its header repeated is merged. Columns are typed: numbers (1 234,56 or 1,234.56),\namounts with a currency (1234.56 EUR), dates (dd/mm/yyyy becomes ISO), and identifiers with\nleading zeros kept as text. No model and no network beyond downloading the file.\nScanned PDFs without a text layer are not supported: they end with no_table_found, unbilled.\n",
      "license": "Apache-2.0",
      "authors": [
        {
          "name": "Holon Labs",
          "kind": "organization"
        }
      ],
      "source": {
        "repository": "https://github.com/Steph7899/holon",
        "ref": "0000000",
        "path": "agents/pdf-tables"
      },
      "versions": [
        "1.0.0"
      ],
      "capabilities": [
        {
          "class": "extraction.table",
          "implements": "holon/extraction.table@1",
          "params": {
            "formats": [
              "application/pdf"
            ],
            "scanned": false
          }
        }
      ],
      "declared": {
        "pricing": {
          "model": "per_run",
          "amount": "0.004",
          "currency": "EUR",
          "charge_on": "success"
        },
        "worst_case": {
          "amount": "0.004",
          "currency": "EUR"
        },
        "interface": {
          "input": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "file"
            ],
            "properties": {
              "file": {
                "type": "string",
                "pattern": "^holon://files/",
                "description": "A PDF uploaded to Holon (POST /v0/files)"
              },
              "pages": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "minimum": 1
                },
                "description": "Only these pages; all pages when omitted"
              }
            }
          },
          "output": {
            "type": "object",
            "required": [
              "tables"
            ],
            "properties": {
              "tables": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "page",
                    "columns",
                    "rows"
                  ],
                  "properties": {
                    "page": {
                      "type": "integer",
                      "minimum": 1
                    },
                    "columns": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "name",
                          "type"
                        ],
                        "properties": {
                          "name": {
                            "type": "string"
                          },
                          "type": {
                            "enum": [
                              "string",
                              "number",
                              "date",
                              "currency"
                            ]
                          }
                        }
                      }
                    },
                    "rows": {
                      "type": "array",
                      "items": {
                        "type": "array"
                      }
                    }
                  }
                }
              }
            }
          },
          "errors": [
            {
              "code": "unreadable_document",
              "description": "The file is not a readable PDF.",
              "billed": false
            },
            {
              "code": "no_table_found",
              "description": "No table in the text layer (plain text, or a scan without text).",
              "billed": false
            },
            {
              "code": "file_not_found",
              "description": "The file handle is unknown, expired or not yours.",
              "billed": false
            }
          ]
        },
        "data": {
          "retention": "none",
          "training_use": false,
          "egress": []
        },
        "models": [],
        "runtime": "mcp",
        "delegates_to": [],
        "lineage": null,
        "examples": [
          {
            "name": "Three invoice lines",
            "input": {
              "file": "holon://files/evals/invoice-lines.pdf"
            },
            "output": {
              "tables": [
                {
                  "page": 1,
                  "columns": [
                    {
                      "name": "Item",
                      "type": "string"
                    },
                    {
                      "name": "Qty",
                      "type": "number"
                    },
                    {
                      "name": "Unit price",
                      "type": "number"
                    },
                    {
                      "name": "Amount",
                      "type": "number"
                    }
                  ],
                  "rows": [
                    [
                      "Widget",
                      2,
                      12,
                      24
                    ],
                    [
                      "Gadget",
                      1,
                      30,
                      30
                    ],
                    [
                      "Cable",
                      5,
                      3.5,
                      17.5
                    ]
                  ]
                }
              ]
            }
          },
          {
            "name": "Not a PDF",
            "input": {
              "file": "holon://files/evals/not-a-pdf.pdf"
            },
            "error": "unreadable_document"
          }
        ]
      },
      "measured": null,
      "evals": {
        "holon/extraction.table@1": {
          "score": 1,
          "passed": true,
          "public_score": 1,
          "holdout_score": 1,
          "ran_at": "2026-09-22T20:25:22.277Z"
        }
      }
    },
    {
      "id": "holon-labs/web-to-text",
      "version": "1.0.0",
      "ref": "holon-labs/web-to-text@1.0.0",
      "author": "holon-labs",
      "name": "Web Page to Markdown",
      "summary": "Fetches a public web page and returns its main content as clean Markdown, without menus, ads, scripts or cookie banners.",
      "description": "Built for AI agents that need to read the web without paying for tokens of navigation and\nboilerplate. Keeps the title, author, date and main text of the page (Mozilla Readability,\nthe engine of Firefox reader view), writes it as Markdown with absolute links, and counts the\nwords. Follows up to 5 redirects. Respects robots.txt and identifies itself as HolonBot.\nOnly public http(s) pages: private and internal addresses are refused at every connection.\nPages are fetched as served, without running their scripts, so pages that only render with\nJavaScript may come back empty.\n",
      "license": "Apache-2.0",
      "authors": [
        {
          "name": "Holon Labs",
          "kind": "organization"
        }
      ],
      "source": {
        "repository": "https://github.com/Steph7899/holon",
        "ref": "0000000",
        "path": "agents/web-to-text"
      },
      "versions": [
        "1.0.0"
      ],
      "capabilities": [
        {
          "class": "extraction.webpage",
          "implements": null,
          "params": {
            "formats": [
              "text/html",
              "text/plain"
            ],
            "javascript": false
          }
        }
      ],
      "declared": {
        "pricing": {
          "model": "per_run",
          "amount": "0.002",
          "currency": "EUR",
          "charge_on": "success"
        },
        "worst_case": {
          "amount": "0.002",
          "currency": "EUR"
        },
        "interface": {
          "input": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "maxLength": 2048,
                "pattern": "^https?://",
                "description": "A public http or https URL"
              },
              "max_chars": {
                "type": "integer",
                "minimum": 500,
                "maximum": 500000,
                "default": 100000,
                "description": "Longest Markdown returned; longer pages are truncated"
              }
            }
          },
          "output": {
            "type": "object",
            "required": [
              "url",
              "final_url",
              "markdown",
              "word_count",
              "truncated"
            ],
            "properties": {
              "url": {
                "type": "string"
              },
              "final_url": {
                "type": "string",
                "description": "After redirects"
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "byline": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "published": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "language": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "excerpt": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "markdown": {
                "type": "string"
              },
              "word_count": {
                "type": "integer",
                "minimum": 0
              },
              "truncated": {
                "type": "boolean"
              }
            }
          },
          "errors": [
            {
              "code": "invalid_url",
              "description": "Not an absolute http or https URL.",
              "billed": false
            },
            {
              "code": "fetch_failed",
              "description": "The page could not be fetched (unreachable, not public, error status, too large, too slow).",
              "billed": false
            },
            {
              "code": "blocked_by_robots",
              "description": "The site's robots.txt does not allow this page.",
              "billed": false
            },
            {
              "code": "unsupported_content",
              "description": "The URL is not a web page (PDF, image, video...).",
              "billed": false
            },
            {
              "code": "empty_page",
              "description": "No readable content, often a page that only renders with JavaScript.",
              "billed": false
            }
          ]
        },
        "data": {
          "retention": "none",
          "training_use": false,
          "egress": []
        },
        "models": [],
        "runtime": "mcp",
        "delegates_to": [],
        "lineage": null,
        "examples": [
          {
            "name": "A simple page",
            "input": {
              "url": "https://example.com/"
            }
          },
          {
            "name": "No host in the URL",
            "input": {
              "url": "https://"
            },
            "error": "invalid_url"
          }
        ]
      },
      "measured": null,
      "evals": null
    }
  ],
  "capabilities": [
    {
      "class": "data.profile",
      "agents": [
        "holon-labs/csv-profile@1.0.0"
      ]
    },
    {
      "class": "extraction.table",
      "agents": [
        "holon-labs/pdf-tables@1.0.0"
      ]
    },
    {
      "class": "extraction.webpage",
      "agents": [
        "holon-labs/web-to-text@1.0.0"
      ]
    },
    {
      "class": "finance.currency_conversion",
      "agents": [
        "holon-labs/currency-convert@1.0.0"
      ]
    },
    {
      "class": "text.stats",
      "agents": [
        "authortest/text-stats@1.0.0"
      ]
    }
  ]
}