github Python re-analysis due

ScottRBK/forgetful

github

Opensource Memory for Agents

maintainer
ScottRBK
license
MIT
first seen
2026-06-01
last seen
2026-09-01
releases · 30d
1
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 57 tools
transport stdio · streamable-http · http counts 57 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • create_code_artifact
  • create_document
  • create_entity
  • create_entity_relationship
  • create_memory
  • create_project
  • create_skill
  • delete_code_artifact
  • delete_document
  • delete_entity
  • delete_entity_relationship
  • delete_project
  • delete_skill
  • export_skill
  • get_code_artifact
  • get_current_user
  • get_document
  • get_entity
  • get_entity_memories
  • get_entity_relationships
  • get_memory
  • get_project
  • get_recent_memories
  • get_skill
  • how_to_use_forgetful_tool
  • import_skill
  • link_entity_to_memory
  • link_entity_to_project
  • link_memories
  • link_skill_to_code_artifact
  • link_skill_to_document
  • link_skill_to_file
  • link_skill_to_memory
  • list_code_artifacts
  • list_documents
  • list_entities
  • list_projects
  • list_skills
  • mark_memory_obsolete
  • query_memory
  • rebuild_embeddings
  • search_entities
  • search_skills
  • unlink_entity_from_memory
  • unlink_entity_from_project
  • unlink_skill_from_code_artifact
  • unlink_skill_from_document
  • unlink_skill_from_file
  • unlink_skill_from_memory
  • update_code_artifact
  • update_document
  • update_entity
  • update_entity_relationship
  • update_memory
  • update_project
  • update_skill
  • update_user_notes
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 0cc5b2b · analyzer v33 · 1w ago

skills & prompt files 19

danger signals1

code evidence vv0.5.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 256

filesystem 25

  • fs ScottRBK-forgetful-0cc5b2b/alembic/env.py :8 from pathlib import Path
  • fs ScottRBK-forgetful-0cc5b2b/alembic/versions/0c7b964dd1e7_initial_schema_with_entity_many_to_many.py :15 from pathlib import Path
  • fs ScottRBK-forgetful-0cc5b2b/app/bootstrap.py :8 from pathlib import Path
  • fs ScottRBK-forgetful-0cc5b2b/app/config/settings.py :3 from pathlib import Path
  • fs ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/postgres_adapter.py :88 from pathlib import Path
  • fs ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/sqlite_adapter.py :59 from pathlib import Path
  • fs ScottRBK-forgetful-0cc5b2b/app/routes/cli/auth_commands.py :7 import shutil
  • fs ScottRBK-forgetful-0cc5b2b/app/routes/cli/paths.py :6 from pathlib import Path
  • fs ScottRBK-forgetful-0cc5b2b/app/services/backup_service.py :6 import shutil
  • fs ScottRBK-forgetful-0cc5b2b/main.py :13 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/test_harness/__main__.py :12 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/test_harness/config.py :8 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/test_harness/container.py :17 import shutil
  • fs (weak) ScottRBK-forgetful-0cc5b2b/test_harness/docker/runner.py :15 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/test_harness/report.py :10 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/test_harness/server.py :14 import shutil
  • fs (weak) ScottRBK-forgetful-0cc5b2b/test_harness/walkthrough.py :13 import shutil
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/conftest.py :21 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/test_zz_backup_restore_e2e.py :6 import shutil
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_cli_passthrough.py :11 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_backup_service.py :6 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_cli_remote_executor.py :8 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_config_precedence.py :23 from pathlib import Path
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_harness_container.py :9 import shutil
  • fs (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_harness_walkthrough.py :48 with (skill_dir / "events.jsonl").open("w") as event_log:

shell / exec 8

  • shell ScottRBK-forgetful-0cc5b2b/app/services/backup_service.py :7 import subprocess
  • shell (weak) ScottRBK-forgetful-0cc5b2b/test_harness/container.py :18 import subprocess
  • shell (weak) ScottRBK-forgetful-0cc5b2b/test_harness/server.py :16 import subprocess
  • shell (weak) ScottRBK-forgetful-0cc5b2b/test_harness/walkthrough.py :14 import subprocess
  • shell (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/conftest.py :17 import subprocess
  • shell (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_cli_passthrough.py :9 import subprocess
  • shell (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_config_precedence.py :20 import subprocess
  • shell (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_harness_walkthrough.py :10 import subprocess

network 11

  • net ScottRBK-forgetful-0cc5b2b/app/repositories/embeddings/reranker_adapter.py :5 import httpx
  • net ScottRBK-forgetful-0cc5b2b/app/routes/cli/remote_executor.py :11 from urllib.parse import urlparse
  • net (weak) ScottRBK-forgetful-0cc5b2b/test_harness/server.py :15 import socket
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/conftest.py :26 from httpx import ASGITransport, AsyncByteStream, AsyncClient, Request, Response
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/conftest.py :401 This fixture creates an httpx.AsyncClient connected to the FastMCP app
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_api_auth.py :11 from httpx import ASGITransport, AsyncClient
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_api_graph.py :14 from httpx import ASGITransport, AsyncClient
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_cli_remote.py :8 import socket
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_feature_flags_sqlite.py :116 from httpx import ASGITransport, AsyncClient
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_harness_server.py :8 import httpx
  • net (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_http_reranker_adapter.py :7 import httpx

secrets 2

  • secrets ScottRBK-forgetful-0cc5b2b/app/routes/cli/auth_commands.py :119 token = os.environ.get("FORGETFUL_TOKEN") or None
  • secrets ScottRBK-forgetful-0cc5b2b/app/routes/cli/parser.py :218 return RemoteExecutor(server_url, token=os.environ.get("FORGETFUL_TOKEN") or None)

database 46

  • db ScottRBK-forgetful-0cc5b2b/alembic/_db_helpers/db_postgres_impl.py :11 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/_db_helpers/db_sqlite_impl.py :11 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/env.py :10 from sqlalchemy import pool
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20251216143413_add_aka_to_entities.py :13 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20260106_add_activity_log_table.py :21 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20260106_add_provenance_tracking_to_memories.py :19 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20260312_add_plans_tasks_criteria_dependencies.py :13 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20260315_add_files_table.py :14 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20260321_add_skills_table.py :14 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20260408_add_provenance_to_all_object_types.py :21 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/alembic/versions/20260704_add_memory_usage_tracking.py :26 import sqlalchemy as sa
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/activity_repository.py :11 from sqlalchemy import delete, func, select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/code_artifact_repository.py :6 from sqlalchemy import select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/document_repository.py :6 from sqlalchemy import select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/entity_repository.py :6 from sqlalchemy import and_, func, or_, select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/file_repository.py :7 from sqlalchemy import select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/memory_repository.py :7 from sqlalchemy import or_, select, text, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/plan_repository.py :6 from sqlalchemy import delete, select, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/postgres_adapter.py :6 from sqlalchemy import text
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/postgres_tables.py :7 from sqlalchemy import (
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/project_repository.py :7 from sqlalchemy import delete, select, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/skill_repository.py :6 from sqlalchemy import select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/task_repository.py :6 from sqlalchemy import delete, select, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/postgres/user_repository.py :6 from sqlalchemy import select, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/activity_repository.py :11 from sqlalchemy import delete, func, select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/code_artifact_repository.py :6 from sqlalchemy import func, or_, select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/document_repository.py :6 from sqlalchemy import func, or_, select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/entity_repository.py :6 from sqlalchemy import and_, func, or_, select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/file_repository.py :7 from sqlalchemy import func, or_, select
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/memory_repository.py :8 from sqlalchemy import or_, select, text, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/plan_repository.py :6 from sqlalchemy import delete, select, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/project_repository.py :7 from sqlalchemy import delete, select, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/skill_repository.py :6 from sqlalchemy import func, or_, select, text
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/sqlite_adapter.py :7 from sqlalchemy import event, text
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/sqlite_tables.py :14 from sqlalchemy import (
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/task_repository.py :6 from sqlalchemy import delete, select, update
  • db ScottRBK-forgetful-0cc5b2b/app/repositories/sqlite/user_repository.py :6 from sqlalchemy import select, update
  • db ScottRBK-forgetful-0cc5b2b/app/services/user_service.py :6 from sqlalchemy.exc import IntegrityError
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/conftest.py :27 from sqlalchemy import text
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/test_graph_e2e.py :939 from sqlalchemy import insert
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/test_re_embedding_e2e.py :15 from sqlalchemy import text
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e/test_zz_backup_restore_e2e.py :12 from sqlalchemy import text
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_api_graph.py :1881 from sqlalchemy import insert
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/e2e_sqlite/test_re_embedding_sqlite.py :9 from sqlalchemy import text
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_targeted_rebuild_sqlite.py :16 from sqlalchemy import text
  • db (weak) ScottRBK-forgetful-0cc5b2b/tests/integration/test_user_service.py :8 from sqlalchemy.exc import IntegrityError

tool registrations 57

  • create_code_artifact ScottRBK-forgetful-0cc5b2b/app/routes/mcp/code_artifact_tools.py :24
  • get_code_artifact ScottRBK-forgetful-0cc5b2b/app/routes/mcp/code_artifact_tools.py :115
  • list_code_artifacts ScottRBK-forgetful-0cc5b2b/app/routes/mcp/code_artifact_tools.py :161
  • update_code_artifact ScottRBK-forgetful-0cc5b2b/app/routes/mcp/code_artifact_tools.py :234
  • delete_code_artifact ScottRBK-forgetful-0cc5b2b/app/routes/mcp/code_artifact_tools.py :316
  • create_document ScottRBK-forgetful-0cc5b2b/app/routes/mcp/document_tools.py :24
  • get_document ScottRBK-forgetful-0cc5b2b/app/routes/mcp/document_tools.py :123
  • list_documents ScottRBK-forgetful-0cc5b2b/app/routes/mcp/document_tools.py :169
  • update_document ScottRBK-forgetful-0cc5b2b/app/routes/mcp/document_tools.py :242
  • delete_document ScottRBK-forgetful-0cc5b2b/app/routes/mcp/document_tools.py :328
  • create_entity ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :30
  • get_entity ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :148
  • list_entities ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :194
  • search_entities ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :261
  • update_entity ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :341
  • delete_entity ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :425
  • link_entity_to_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :471
  • unlink_entity_from_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :527
  • link_entity_to_project ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :574
  • unlink_entity_from_project ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :630
  • create_entity_relationship ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :677
  • get_entity_relationships ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :773
  • update_entity_relationship ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :849
  • delete_entity_relationship ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :920
  • get_entity_memories ScottRBK-forgetful-0cc5b2b/app/routes/mcp/entity_tools.py :964
  • create_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :28
  • query_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :173
  • update_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :280
  • link_memories ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :399
  • get_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :479
  • get_recent_memories ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :541
  • mark_memory_obsolete ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :630
  • rebuild_embeddings ScottRBK-forgetful-0cc5b2b/app/routes/mcp/memory_tools.py :697
  • how_to_use_forgetful_tool ScottRBK-forgetful-0cc5b2b/app/routes/mcp/meta_tools.py :509
  • create_project ScottRBK-forgetful-0cc5b2b/app/routes/mcp/project_tools.py :26
  • update_project ScottRBK-forgetful-0cc5b2b/app/routes/mcp/project_tools.py :147
  • delete_project ScottRBK-forgetful-0cc5b2b/app/routes/mcp/project_tools.py :279
  • list_projects ScottRBK-forgetful-0cc5b2b/app/routes/mcp/project_tools.py :359
  • get_project ScottRBK-forgetful-0cc5b2b/app/routes/mcp/project_tools.py :470
  • create_skill ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :27
  • get_skill ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :134
  • list_skills ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :184
  • update_skill ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :260
  • delete_skill ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :356
  • search_skills ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :408
  • import_skill ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :475
  • export_skill ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :555
  • link_skill_to_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :605
  • unlink_skill_from_memory ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :665
  • link_skill_to_file ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :714
  • unlink_skill_from_file ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :765
  • link_skill_to_code_artifact ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :814
  • unlink_skill_from_code_artifact ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :865
  • link_skill_to_document ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :914
  • unlink_skill_from_document ScottRBK-forgetful-0cc5b2b/app/routes/mcp/skill_tools.py :965
  • get_current_user ScottRBK-forgetful-0cc5b2b/app/routes/mcp/user_tools.py :24
  • update_user_notes ScottRBK-forgetful-0cc5b2b/app/routes/mcp/user_tools.py :57

declared dependencies 25

  • fastmcp@==3.2.2
  • aiosqlite@==0.22.1
  • alembic@==1.18.4
  • asyncpg@==0.31.0
  • dotenv@==0.9.9
  • fastapi@==0.136.3
  • fastembed@==0.8.0
  • google-genai@==1.66.0
  • httpx@==0.28.1
  • ollama@==0.6.1
  • openai@==2.20.0
  • pgvector@==0.4.2
  • platformdirs@==4.7.0
  • psycopg2-binary@==2.9.11
  • py-key-value-aio@==0.4.4
  • pydantic@==2.12.5
  • pydantic-settings@==2.14.2
  • pytest@==9.0.3
  • pytest-asyncio@==1.3.0
  • requests@==2.33.0
  • sqlalchemy@==2.0.46
  • sqlite-vec@==0.1.6
  • starlette@==1.3.1
  • tiktoken@==0.12.0
  • uvicorn@==0.40.0