{"id":49584795,"url":"https://github.com/chariton-kyp/memgentic","last_synced_at":"2026-05-03T22:03:27.747Z","repository":{"id":351587906,"uuid":"1211283191","full_name":"Chariton-kyp/Memgentic","owner":"Chariton-kyp","description":"Universal AI memory layer — your second brain across every AI tool. Local-first, open source, MCP-compatible.","archived":false,"fork":false,"pushed_at":"2026-05-03T13:12:17.000Z","size":1993,"stargazers_count":2,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T13:17:16.427Z","etag":null,"topics":["agent-skills","ai","aider","chatgpt","claude","claude-code","codex","cross-tool-memory","cursor","gemini-cli","knowledge-graph","llm","local-first","mcp","memory","python","rag","rust","semantic-search","skills"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/memgentic/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Chariton-kyp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["Chariton-kyp"]}},"created_at":"2026-04-15T08:33:50.000Z","updated_at":"2026-04-30T08:47:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Chariton-kyp/Memgentic","commit_stats":null,"previous_names":["chariton-kyp/memgentic"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/Chariton-kyp/Memgentic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chariton-kyp%2FMemgentic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chariton-kyp%2FMemgentic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chariton-kyp%2FMemgentic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chariton-kyp%2FMemgentic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Chariton-kyp","download_url":"https://codeload.github.com/Chariton-kyp/Memgentic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Chariton-kyp%2FMemgentic/sbom","scorecard":{"id":1246892,"data":{"date":"2026-04-27T07:42:23Z","repo":{"name":"github.com/Chariton-kyp/Memgentic","commit":"6c2da7cba0580eb50f181b436417d5affb45f007"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":5.4,"checks":[{"name":"Maintained","score":0,"reason":"project was created within the last 90 days. Please review its contents carefully","details":["Warn: Repository was created within the last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/25 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-api.yml:167","Info: jobLevel 'contents' permission set to 'read': .github/workflows/release-api.yml:34","Info: jobLevel 'contents' permission set to 'read': .github/workflows/release-api.yml:94","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-native.yml:237","Info: jobLevel 'contents' permission set to 'read': .github/workflows/release-native.yml:39","Info: jobLevel 'contents' permission set to 'read': .github/workflows/release.yml:51","Info: jobLevel 'contents' permission set to 'read': .github/workflows/release.yml:110","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release.yml:191","Info: topLevel 'contents' permission set to 'read': .github/workflows/build.yml:13","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:13","Info: topLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:14","Warn: topLevel 'security-events' permission set to 'write': .github/workflows/codeql.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/commitlint.yml:9","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/commitlint.yml:10","Warn: topLevel 'contents' permission set to 'write': .github/workflows/dependabot-auto-merge.yml:22","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependency-review.yml:8","Warn: topLevel 'contents' permission set to 'write': .github/workflows/linked-version-align.yml:25","Info: topLevel 'contents' permission set to 'read': .github/workflows/pre-commit.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/release-api.yml:17","Info: topLevel 'contents' permission set to 'read': .github/workflows/release-native.yml:24","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release-please.yml:16","Info: topLevel 'contents' permission set to 'read': .github/workflows/release.yml:29","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/version-consistency.yml:8"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":4,"reason":"dependency not pinned by hash detected -- score normalized to 4","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:95: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:127: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:128: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:131: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commitlint.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/commitlint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/commitlint.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/commitlint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linked-version-align.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/linked-version-align.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pre-commit.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/pre-commit.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pre-commit.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/pre-commit.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-api.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-api.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-api.yml:140: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-api.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-api.yml:146: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-api.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-api.yml:153: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-api.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-api.yml:173: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-api.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:103: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:113: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:130: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:139: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:156: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:184: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:209: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:214: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:221: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-native.yml:227: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-native.yml:242: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release-native.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:147: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:171: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:178: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:197: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/version-consistency.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/version-consistency.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/version-consistency.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/Chariton-kyp/Memgentic/version-consistency.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:2: pin your Docker image by updating python:3.13-slim to python:3.13-slim@sha256:a0779d7c12fc20be6ec6b4ddc901a4fd7657b8a6bc9def9d3fde89ed5efe0a3d","Warn: containerImage not pinned by hash: Dockerfile:37: pin your Docker image by updating python:3.13-slim to python:3.13-slim@sha256:a0779d7c12fc20be6ec6b4ddc901a4fd7657b8a6bc9def9d3fde89ed5efe0a3d","Warn: containerImage not pinned by hash: benchmarks/docker/Dockerfile:20: pin your Docker image by updating python:3.12-slim to python:3.12-slim@sha256:46cb7cc2877e60fbd5e21a9ae6115c30ace7a077b9f8772da879e4590c18c2e3","Warn: downloadThenRun not pinned by hash: Dockerfile:9-11","Warn: pipCommand not pinned by hash: Dockerfile:13","Warn: pipCommand not pinned by hash: Dockerfile:31-33","Warn: pipCommand not pinned by hash: benchmarks/docker/Dockerfile:40","Warn: npmCommand not pinned by hash: .github/workflows/commitlint.yml:27","Info:  21 out of  55 GitHub-owned GitHubAction dependencies pinned","Info:  13 out of  23 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned","Info:   1 out of   2 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":9,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 29 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.6.0 not signed: https://api.github.com/repos/Chariton-kyp/Memgentic/releases/310857198","Warn: release artifact v0.5.0 not signed: https://api.github.com/repos/Chariton-kyp/Memgentic/releases/310851508","Warn: release artifact v0.6.0 does not have provenance: https://api.github.com/repos/Chariton-kyp/Memgentic/releases/310857198","Warn: release artifact v0.5.0 does not have provenance: https://api.github.com/repos/Chariton-kyp/Memgentic/releases/310851508"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release-api.yml:129"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-qx2v-qp2m-jg93"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":5,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Info: codeowner review is required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Info: 'up-to-date branches' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Contributors","score":0,"reason":"project has 0 contributing companies or organizations -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"30 out of 30 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}}]},"last_synced_at":"2026-05-03T13:17:37.584Z","repository_id":351587906,"created_at":"2026-05-03T13:17:37.584Z","updated_at":"2026-05-03T13:17:37.584Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32586189,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-skills","ai","aider","chatgpt","claude","claude-code","codex","cross-tool-memory","cursor","gemini-cli","knowledge-graph","llm","local-first","mcp","memory","python","rag","rust","semantic-search","skills"],"created_at":"2026-05-03T22:03:26.894Z","updated_at":"2026-05-03T22:03:27.725Z","avatar_url":"https://github.com/Chariton-kyp.png","language":"Python","funding_links":["https://github.com/sponsors/Chariton-kyp"],"categories":[],"sub_categories":[],"readme":"# Memgentic\n\n\u003e **Universal AI memory layer — your second brain across every AI tool.**\n\n[![PyPI version](https://img.shields.io/pypi/v/memgentic.svg)](https://pypi.org/project/memgentic/)\n[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-green.svg)](LICENSE)\n[![CI](https://github.com/Chariton-kyp/memgentic/actions/workflows/ci.yml/badge.svg)](https://github.com/Chariton-kyp/memgentic/actions/workflows/ci.yml)\n[![Tests](https://img.shields.io/badge/tests-1000+-brightgreen)](memgentic/tests)\n\nMemgentic captures knowledge from every AI tool you use, then makes it searchable, shareable, and distributable across all of them. **One memory layer. Every AI tool. Local-first.**\n\nNamed after Mneme, the Greek Titaness of memory and mother of the Muses.\n\n---\n\n## What is Memgentic?\n\nEvery conversation with an AI assistant is **ephemeral**. What Claude figured out yesterday is gone today. What ChatGPT learned, Cursor doesn't know. Your architecture decisions, debug sessions, and hard-won insights are scattered across a dozen tools that can't talk to each other.\n\n**Memgentic is the missing layer.** It silently watches every AI tool you use, extracts the signal from the noise, and builds a unified, searchable memory graph that follows you across Claude Code, Cursor, Gemini CLI, Codex, ChatGPT, Aider, and more. Then it turns that memory into **Skills** — reusable knowledge templates that get automatically distributed to every AI tool via the open Agent Skills standard.\n\n**Capture once. Remember everywhere.**\n\n### Key features\n\n- **Captures from 11+ AI tools automatically** — Claude Code, Cursor, Gemini CLI, Codex CLI, Copilot CLI, Aider, ChatGPT, Antigravity, Claude Web, OpenCode\n- **Cross-tool continuation** — stop in Claude Code, reopen in Codex or Gemini CLI, and resume from the latest source-backed handoff context\n- **Transparent memory inventory** — inspect exactly what is stored and what memory has already been loaded into the current agent context\n- **Universal skill distribution** — create a skill once, push it to 26+ AI tools via the Agent Skills open standard\n- **Local-first** — your memories live on your machine, no cloud required, no telemetry, no tracking\n- **Rust native acceleration** — optional PyO3 module makes hot paths 5-50x faster (auto-detected, pure Python fallback)\n- **Hybrid search** — semantic vectors + FTS5 keyword + knowledge graph, fused with RRF\n- **Credential scrubbing** — 15+ patterns (API keys, tokens, PEM, JWT) redacted before storage\n- **Write-time dedup + noise filtering** — only the stuff worth remembering gets stored\n- **Knowledge graph** — entity co-occurrence graph for associative recall\n- **MCP server + REST API + Dashboard** — use it however you like\n\n---\n\n## Quick Start\n\n```bash\n# 1. Install\npip install memgentic\n\n# 2. Full onboarding — detects AI tools, configures models, sets up MCP and hooks\nmemgentic init\n\n# 3. Start the capture daemon\nmemgentic daemon\n```\n\nThat's it. Your Claude Code, Cursor, Gemini CLI, and Codex now have shared cross-tool memory via MCP.\n\n\u003e **Tip:** Already installed and just want to change the embedding model or storage backend?\n\u003e Run `memgentic setup` (model/backend reconfiguration only, no tool detection).\n\n---\n\n## The Dashboard\n\nA live second brain for your AI work. Browse, search, organize, and curate your memories.\n\n\u003e Run it locally with `make dashboard` after `make install`.\n\n| Feature | What it does |\n|---|---|\n| **Pinned row** | Star important memories for permanent quick access at the top |\n| **Memory grid** | Source-badged cards with topics, confidence, and quick actions |\n| **Collections sidebar** | User-defined groups for organizing by project, context, or topic |\n| **Upload modal** | Write text, drop files (`.md`/`.txt`/`.pdf`), or import from URL |\n| **Skills page** | Master-detail editor with file tree and per-tool distribution status |\n| **Command palette** | Cmd+K global semantic search across every memory and skill |\n| **Activity feed** | Real-time event log via WebSocket |\n| **Memory detail** | Inline editing, related memories via vector similarity |\n\n---\n\n## Skills: Universal Knowledge Across Every AI Tool\n\nMemgentic is a **universal skill manager**. Write a skill once, and it's automatically distributed to every AI tool you use via the open [Agent Skills standard](https://agentskills.io) (26+ tools).\n\n```\n~/.claude/skills/deploy-runbook/SKILL.md         → Claude Code\n~/.codex/skills/deploy-runbook/SKILL.md          → Codex CLI\n~/.cursor/rules/deploy-runbook/SKILL.md          → Cursor\n~/.config/opencode/skills/deploy-runbook/SKILL.md → OpenCode\n```\n\nAdd a skill from the dashboard, **import one from any GitHub repo**, or let Memgentic's LLM auto-extract skills from your existing memories. The daemon keeps every tool's copy in sync automatically.\n\nA `SKILL.md` file uses the standard YAML frontmatter format:\n\n```markdown\n---\nname: deploy-runbook\ndescription: Production deployment checklist\nversion: 1.0.0\ntags: [deploy, ops]\n---\n\n# Deployment Runbook\n\n## Pre-deployment\n...\n```\n\n---\n\n## How It Works\n\n```\n   ┌──────────────┐       ┌──────────┐       ┌──────────────┐       ┌──────────────┐\n   │  AI Tools    │       │          │       │  Pipeline    │       │              │\n   │  Claude Code │       │          │       │              │       │  SQLite+FTS5 │\n   │  Cursor      │  ───\u003e │  Daemon  │  ───\u003e │  Scrub →     │  ───\u003e │  Qdrant      │\n   │  Gemini CLI  │       │  Watcher │       │  Filter →    │       │  NetworkX    │\n   │  Codex CLI   │       │          │       │  Embed →     │       │              │\n   │  11+ others  │       │          │       │  Distill →   │       │              │\n   └──────────────┘       └──────────┘       │  Dedup →     │       └──────┬───────┘\n                                             │  Store       │              │\n                                             └──────────────┘              │\n                                                                            │\n                    ┌───────────────────────────┬──────────────────────────┤\n                    │                           │                          │\n              ┌─────▼──────┐             ┌─────▼──────┐            ┌──────▼──────┐\n              │ MCP Server │             │  REST API  │            │  Dashboard  │\n              │  30+ tools │             │  FastAPI   │            │  Next.js 16 │\n              └─────┬──────┘             └────────────┘            └─────────────┘\n                    │\n              ┌─────▼──────────────────────────────────┐\n              │ Back to AI Tools (recall + skills)     │\n              └────────────────────────────────────────┘\n```\n\n---\n\n## Tool Integrations\n\nThis table pairs **capture** and **skill-injection** scopes per tool. The capture-mechanism breakdown (hook vs. file watcher vs. MCP vs. one-shot import) lives in the [Watchers matrix](#watchers--cross-tool-automatic-capture) section.\n\n| Tool | Capture | Skill injection |\n|------|---------|-----------|\n| Claude Code | Daemon | `~/.claude/skills/` + MCP + SessionStart hook |\n| Codex CLI | Daemon | `~/.codex/skills/` + MCP + AGENTS.md |\n| Cursor | Daemon | `~/.cursor/rules/` + MCP |\n| Gemini CLI | Daemon | MCP + GEMINI.md |\n| OpenCode | Daemon | `~/.config/opencode/skills/` |\n| Aider | Import | Context file |\n| ChatGPT (export) | Import (JSON) | — |\n| Copilot CLI | Daemon | — |\n| Antigravity | Daemon | — |\n| Claude Web (export) | Import (JSON) | — |\n\n---\n\n## CLI Usage\n\n```bash\n# Semantic + keyword + graph hybrid search\nmemgentic search \"database migration\" -s claude_code -t decision\n\n# Store a memory manually\nmemgentic remember \"We chose PostgreSQL over MongoDB for consistency\"\n\n# Skills\nmemgentic skill list\nmemgentic skill import https://github.com/owner/repo/tree/main/skill-name\n\n# Health check\nmemgentic doctor\n\n# See all commands\nmemgentic --help\n```\n\n---\n\n## Recall Tiers — tier-aware briefing\n\nMemgentic's briefing is a structured, token-budgeted stack rather than a flat dump. Five tiers, each loaded on demand:\n\n| Tier | Name | Loaded by default | Source |\n|---|---|---|---|\n| **T0** | Persona | yes | `~/.memgentic/persona.yaml` (identity, people, projects, preferences) |\n| **T1** | Horizon | yes | top-N memories + top-3 skills (importance × recency × pinned × cluster × skill-link, MMR-selected) |\n| **T2** | Orbit | on match | memories filtered by collection / topic |\n| **T3** | Deep Recall | explicit | hybrid semantic + FTS5 search |\n| **T4** | Atlas | on KG query | Chronograph graph traversal |\n\nThe default `memgentic_briefing()` call returns **T0 + T1** under ~900 tokens (adaptive to the target model's context window). Deeper tiers are one call away.\n\n**Example — agent wakes up and asks for a briefing:**\n\n```jsonc\n// MCP call\n{\n  \"name\": \"memgentic_briefing\",\n  \"arguments\": { \"collection\": \"journaling-app\", \"model_context\": 200000 }\n}\n```\n\n**Sketch of the returned text:**\n\n```\n## T0 — Persona\nYou are Atlas, personal AI assistant for Alice.\nTone: warm, direct, remembers everything.\nActive projects: journaling-app (next.js + postgres).\nRemember: code stack choices, naming conventions, decisions with rationale.\nAvoid: apology-heavy responses, unrelated refactors during bug fixes.\n\n## T1 — Horizon\n[collection:journaling-app]\n  - decided Clerk over Auth0 (pricing) — 2026-02-01, pinned\n  - Kai fixed OAuth refresh flow in middleware.ts — 2026-02-08\n  - migrated to PostgreSQL 18 for pgvector support — 2026-03-14, pinned\n  - chose TanStack Query over SWR for shared cache semantics — 2026-03-22\n[skills:top]\n  - debugging/pr-review (used 34x)\n  - deploy-runbook (used 21x)\n  - postgres-migration-checklist (used 9x)\n```\n\nExplicit deeper calls:\n\n```bash\nmemgentic briefing --tier T2 --collection journaling-app --topic auth\nmemgentic briefing --tier T3 --query \"why graphql\"\nmemgentic briefing --tier T4 --entity Kai\nmemgentic briefing --status                  # show budgets + last-run stats\nmemgentic briefing --weights importance=0.4,recency=0.3\n```\n\nAgents can also call `memgentic_tier_recall(tier=\"T3\", query=\"...\")` directly when they already know which tier they want.\n\n---\n\n## Watchers — cross-tool automatic capture\n\nEach AI tool uses the capture mechanism native to it. All paths converge on the same daemon (dedup → pipeline → store). Zero tokens spent in the chat window.\n\n| Tool | Capture mechanism | Status | Notes |\n|---|---|---|---|\n| Claude Code | Hook (`Stop`, `PreCompact`, `SessionStart`, `UserPromptSubmit`) | Shipped | Edits `~/.claude/settings.json`; SessionStart injects T0+T1 briefing |\n| Codex CLI | Hook (`Stop`, `PreCompact`) | Shipped | Edits `~/.codex/hooks.json` |\n| Gemini CLI | File watcher (JSONL tail) | Shipped | Watches `~/.gemini/tmp/*/chats/*.json`; delta-only via `last_offset` |\n| Copilot CLI | File watcher (log appends) | Shipped | Parses `~/.copilot/...` log stream |\n| Aider | File watcher (markdown appends) | Shipped | Parses `\u003cproject\u003e/.aider.chat.history.md` by session header |\n| ChatGPT import | One-shot import (JSON) | Shipped | `memgentic import chatgpt \u003cexport.json\u003e` |\n| Claude Web import | One-shot import (JSON) | Shipped | `memgentic import claude-web \u003cexport.json\u003e` |\n| Cursor | MCP (agent-initiated) | Shipped | No file watcher — Cursor's agent calls `memgentic_remember` / `memgentic_recall` directly |\n| Antigravity | File watcher + protobuf decode | Shipped | Watches `~/.gemini/antigravity/conversations/`; schema-pinned, graceful skip on mismatch |\n\nManage them uniformly:\n\n```bash\nmemgentic watchers install   --tool claude_code\nmemgentic watchers status\nmemgentic watchers disable   --tool copilot_cli\nmemgentic watchers uninstall --tool aider\nmemgentic watchers logs      --tool claude_code --tail 50\n```\n\nThe dashboard's `/watchers` page shows the same table live (last-capture timestamp, captured count, install state, per-tool logs).\n\n---\n\n## MCP Tools\n\nWhen Memgentic's MCP server is connected to an AI tool, the tool can call:\n\n| Tool | Purpose |\n|------|---------|\n| `memgentic_handoff()` | **Cross-tool resume** — source-backed continuation brief grouped by recent source session (call this at session start) |\n| `memgentic_context()` | Show what memory has been loaded into the current MCP session |\n| `memgentic_inventory()` | Auditable manifest of stored memories (counts, sources, content types, paginated IDs) |\n| `memgentic_recall(query)` | Semantic search with source filtering |\n| `memgentic_search(query)` | Full-text keyword search |\n| `memgentic_remember(content)` | Save a new memory |\n| `memgentic_briefing()` | Recent cross-tool activity |\n| `memgentic_recent()` | Latest memories |\n| `memgentic_sources()` | List platforms and counts |\n| `memgentic_expand(memory_id)` | Full content of a memory |\n| `memgentic_pin(memory_id)` | Pin/unpin a memory |\n| `memgentic_skills()` | List available skills |\n| `memgentic_skill(name)` | Get a specific skill's content |\n| `memgentic_configure_session(filters)` | Session-level source filters |\n| `memgentic_stats()` | Memory statistics |\n| `memgentic_export()` | Export memories as JSON |\n\nA `continue` MCP prompt is also registered — clients that surface MCP prompts can invoke it at startup to ask the agent to call `memgentic_handoff` and resume from the latest source session.\n\n---\n\n## Local-first, Privacy-first\n\n- **No telemetry.** Zero outbound calls except to Ollama (localhost) and — only if you opt in — OpenAI, Anthropic, or Gemini for intelligence extras\n- **Credential scrubbing on by default.** API keys, passwords, tokens, PEM keys, JWTs — all redacted before storage\n- **Write-time dedup + noise filtering.** Acknowledgments, tool output dumps, and stack traces never make it into your memory\n- **Source provenance on every memory.** You always know which tool, session, and timestamp produced any piece of knowledge\n- **Local SQLite + Qdrant.** Your data lives in `~/.memgentic/` and never leaves unless you export it\n\n---\n\n## Native Rust Acceleration\n\nMemgentic includes an optional Rust extension module (`memgentic-native`) that accelerates CPU-bound operations 5-50x. It is **automatically detected** — no configuration needed.\n\n| What it accelerates | Improvement |\n|---|---|\n| Credential scrubbing | 20-50x faster |\n| Text overlap / dedup | 10-20x faster |\n| Noise detection \u0026 classification | 5-10x faster |\n| JSONL / ChatGPT / Protobuf parsing | 5-30x faster |\n| Knowledge graph (petgraph vs NetworkX) | 10-50x faster |\n\nIf Rust is installed, `make install` builds it automatically. If not, the pure Python fallback is used and everything still works.\n\n```bash\nmake native    # Build native acceleration manually\n```\n\n---\n\n## Installation\n\n### Default (local-first)\n\n- **Python 3.12+**\n- **Ollama** — https://ollama.com — for embeddings (`qwen3-embedding:0.6b`, ~500MB)\n- **Rust** (optional) — https://rustup.rs — for native acceleration\n\n### Alternative (cloud embeddings)\n\n```bash\nexport MEMGENTIC_EMBEDDING_PROVIDER=openai\nexport MEMGENTIC_OPENAI_API_KEY=sk-...\nexport MEMGENTIC_EMBEDDING_MODEL=text-embedding-3-small\n```\n\n### Docker\n\n```bash\nmake dev    # auto-detects NVIDIA GPU\n```\n\n---\n\n## Architecture\n\n- **Backend** — Python 3.12+ / FastAPI / aiosqlite / Qdrant / structlog\n- **Native** — Rust + PyO3 (optional, auto-detected)\n- **Frontend** — Next.js 16, React 19, Tailwind 4, shadcn/ui, TanStack Query, Zustand\n- **Embeddings** — Qwen3-Embedding-0.6B via Ollama (default) or OpenAI\n- **LLM intelligence** — Gemini Flash Lite via LangChain (optional, opt-in)\n- **MCP** — FastMCP / `mcp[cli]\u003e=1.26`\n\nSee [CLAUDE.md](CLAUDE.md) for full architecture details.\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/Chariton-kyp/memgentic.git\ncd memgentic\nmake install    # Python deps + Rust native (if available)\nmake test       # Run all tests\nmake dashboard  # Start the dashboard locally\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) and [docs/](docs/) for details.\n\n---\n\n## License\n\n[Apache 2.0](LICENSE) — free for any use, commercial or personal.\n\n---\n\n## Acknowledgements\n\n- Built on the [Agent Skills](https://agentskills.io) open standard\n- MCP via [FastMCP](https://github.com/jlowin/fastmcp)\n- Inspired by [Multica](https://github.com/multica-ai/multica) for the universal skill distribution pattern\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchariton-kyp%2Fmemgentic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchariton-kyp%2Fmemgentic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchariton-kyp%2Fmemgentic/lists"}