Opensource Memory for Agents
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
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
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
- agent-rules ScottRBK-forgetful-0cc5b2b/AGENTS.md
- agent-rules ScottRBK-forgetful-0cc5b2b/CLAUDE.md
- agent-rules ScottRBK-forgetful-0cc5b2b/GEMINI.md
- prompt-file ScottRBK-forgetful-0cc5b2b/docs/prompts/comprehensive_project_understanding_prompt.md
- prompt-file ScottRBK-forgetful-0cc5b2b/docs/prompts/custom_agent_integration.md
- prompt-file ScottRBK-forgetful-0cc5b2b/docs/prompts/example_system_prompt.md
- prompt-file ScottRBK-forgetful-0cc5b2b/docs/prompts/knowledge_base_bootstrap_prompt.md
- prompt-file ScottRBK-forgetful-0cc5b2b/docs/prompts/prompts_overview.md
- prompt-file ScottRBK-forgetful-0cc5b2b/docs/prompts/rapid_project_scan_prompt.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-cli-setup/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-context-gather/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-encode-repo/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-entities/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-explore/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-files/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-mcp-setup/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-procedures/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-recall/SKILL.md
- skill ScottRBK-forgetful-0cc5b2b/skills/forgetful-remember/SKILL.md
danger signals1
- dynamic code execution __import__ sink ScottRBK-forgetful-0cc5b2b/tests/e2e/conftest.py :293
env={**dict(__import__("os").environ), **env},
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