{
  "slug": "io-github-scarletkc-perenna",
  "name": "io.github.scarletkc/perenna",
  "title": "Perenna",
  "description": "A lightweight, Git-backed permanent memory for AI agents.",
  "version": "0.4.1",
  "publishedAt": "2026-08-28T02:15:07.590934Z",
  "updatedAt": "2026-08-28T02:15:07.590934Z",
  "repoUrl": "https://github.com/scarletkc/Perenna",
  "websiteUrl": null,
  "namespace": {
    "type": "github",
    "owner": "scarletkc"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "pypi",
      "identifier": "perenna",
      "version": "0.4.1",
      "transport": "stdio",
      "runtimeHint": "uvx"
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "PERENNA_GIT_REMOTE",
      "isSecret": false,
      "isRequired": false,
      "description": "Git remote name used for optional synchronization (for example, origin); leave unset for local-only operation"
    },
    {
      "name": "VEXOR_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Embedding provider API key (optional; overrides a stored key; providers can also be configured via `vexor init`)"
    },
    {
      "name": "VEXOR_REMOTE_RERANK_API_KEY",
      "isSecret": true,
      "isRequired": false,
      "description": "Remote reranker API key (optional; overrides a stored key; only needed when rerank is set to remote)"
    },
    {
      "name": "VEXOR_CONFIG_JSON",
      "isSecret": false,
      "isRequired": false,
      "description": "Non-secret Vexor config as a JSON object, e.g. {\"provider\": \"gemini\", \"rerank\": \"bm25\"} (optional; merged over ~/.vexor/config.json; credential fields are rejected, use the dedicated variables)"
    }
  ],
  "category": "productivity",
  "subcategory": "memory",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/scarletkc/Perenna"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "info",
      "detail": "Asks for 2 secrets: VEXOR_API_KEY, VEXOR_REMOTE_RERANK_API_KEY"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account scarletkc"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "pass",
      "detail": "perenna 0.4.1 has no setup.py; nothing runs at install"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "warn",
      "detail": "Reads SSH or cloud credentials (perenna-0.4.1/src/perenna/deploy_keys.py:34: \"id_ed25519\")"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "pass",
      "detail": "No hidden characters or instructions to the AI in 30 files, including comments and the README"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (pypi)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"perenna\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"perenna==0.4.1\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 61,
  "archived": false,
  "pushedAt": "2026-09-09T03:51:15Z",
  "health": {
    "score": 59,
    "parts": {
      "popularity": 0.341828735381805,
      "activity": 0.88,
      "issues": null,
      "security": 0.8
    },
    "fail": 0,
    "warn": 1,
    "raw": {
      "stars": 61,
      "forks": 3,
      "downloads": 25,
      "hn": {
        "n": 0,
        "pts": 0,
        "t": []
      },
      "issuesOpen": 1,
      "issuesClosed": 1,
      "prsMerged": 37,
      "commits90": 72,
      "release": "2026-08-28T02:14:42Z",
      "pushed": "2026-09-09T03:51:15Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:42:38.200Z"
  }
}
