Releases: bulletinmybeard/agent-forge
Releases · bulletinmybeard/agent-forge
Release list
Release v0.11.0
What's Changed
Added
- Apple Reminders agent tools (
reminders_status,reminders_lists,reminders_show,reminders_add,reminders_edit,reminders_complete,reminders_delete) inagentforge/tools/reminders_tools.py remindctlbackend (brew install steipete/tap/remindctl) withosascript/ AppleScript fallback whenremindctlis absent- Split-deploy support: reminders tools register on every worker so remote agents pass
has_tool()and cross-dispatch to the Maclocalworker. Execution uses EventKit on Darwin only - Server-side due-date normalization (
tomorrow,today,tomorrow 09:00) and rejection of past absolute ISO dates - Title-to-ID resolution for
reminders_deleteandreminders_complete(exact title match against open reminders) - Agent prompt rule and per-turn reminder-query suffix in
_run_agentto steer models towardreminders_*tools tests/test_reminders_tools.py: registration, remindctl arg building, date validation, title resolution@notescustom agent example documents Apple Reminders alongsidekb_search(markdown/custom-agents/notes.md)
Changed
@agentand@pipelinebase tool sets include allreminders_*tools (macOS execution and omitted from tool specs on non-Darwin workers)custom_agents.example.yamlandmarkdown/custom-agents/notes.mdexpanded with Reminders tool guidance and scheduler/monitor boundaries
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md
Release v0.10.0
What's Changed
Added
- Attachment file storage:
HEAD/GET/POST /knowledge/entries/{id}/filefor checking, downloading, and uploading original attachment files (e.g., PDFs stored alongside their extracted text) KnowledgeFileService: filesystem-backed store for original attachments with configurable size limit- Multi-collection routing via
X-Knowledge-Collectionheader: the KB SPA usesknowledge_entries(default), AgentForge Notes useskb_note_entries knowledge_registrymodule: collection-scoped service caching, FastAPI dependency injection, andensure_all_collections()startup hookforce_uniqueflag onCreateEntryRequest. Bypasses content-hash dedup so the same text can be stored under multiple parents- Auto-relink: creating a duplicate entry with a
parent_idreattaches the existing entry under the new parent instead of returning 409 metadatafield onUpdateEntryRequest(was already on create and now on updatable)- Config keys:
knowledge.notes_collection_name,knowledge.files_dir,knowledge.max_attachment_bytes @kband@notescustom agent examples incustom_agents.example.yamlmarkdown/custom-agents/notes.mdsystem prompt for the Notes agent- Notes-aware WebSocket session routing:
source=notessessions auto-scopekb_searchto the notes collection extracted_bytesin/knowledge/extractresponse metadata- pdftotext page-marker formatting (
--- Page N ---) and scaled timeouts for large PDFs
Changed
- Knowledge API routes use FastAPI
Depends()injection instead of a module-level singleton. Each request resolves the correct collection-scoped service KnowledgeVectorServiceaccepts an optionalcollection_nameparameter (defaults tosettings.knowledge.collection_name)- PDF extraction prefers
pdftotextfor large files (>5 MiB) andpdfplumberfor smaller ones (was pdfplumber-first with pdftotext fallback) delete_entryalso removes stored attachment files for the entry (*optionally)
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md
Release v0.9.0
What's Changed
Changed
- RAG
@aliases centralized inagentforge/mode_prefixes.py(shared bymode_routingandintent_classifier). - Botty engine reads
analysis_interval,max_frequency_seconds, anddismissal_cooldown_secondsfrom config. canvas.enabledandbotty.enabledinconfig.yamlnow gate Canvas init and the/ws/bottyroute (defaults remaintrue).prompt_lab.enabledgates Prompt Lab DB init and/api/prompt-lab/*endpoints;canvas.enabledalso gates the/api/canvas/*router (not just init).- Chat sessions are namespaced by
chat_sessions.source(web,kb, …): clients passoverrides.sourceand/or?source=on/ws/chat; worker auto-create reads the active job's overrides. Agent Chat listssource=webonly. web/server/api.pyimports hoisted to module top;sql_schema_toolstays lazy (private/gitignored module).- In-code RAG comments in
ws_endpoint.pynow treat@qdrantas canonical (@docs/@findas aliases). OllamaSettingsprofile resolution always delegates toagentforge.config.ConfigManager(removed duplicate_merge_profile_chainfallback).- Config loading consolidated:
app/config.pyandagentforge.config.ConfigManagerboth useload_merged_yaml()(framework-config + config.yaml + split profiles).ConfigManager.rawexposes the merged dict. When gitignored config files are absent,load_merged_yaml()falls back to the committed*.example.yamltemplates (CI / fresh clone). - Legacy per-product Google connector plugins (
gmail,google_drive,bigquery,youtube) removed; unifiedgoogleconnector only. Unmigrated SQLite rows are skipped at startup (seescripts/list-legacy-connections.py). - Knowledge Database content types are now
note,reference,documentation,document,cheatsheet, andsnippet(replacing the earliercode/command/url/config/error_solution/api_exampleset). Update clients and any indexed entries accordingly. custom_agents.yamlis gitignored (per-deployment, likeconfig.yaml); shipped template iscustom_agents.example.yamlwith example fallback in the loader.- RAG search mode:
@qdrantis canonical;@docsand@findare documented aliases (all three route to the same mode and can appear anywhere in a prompt). - Mode prefix detection extracted from
ws_endpoint.pytoweb/server/mode_routing.py. - Put.io / Premiumize (
cloud_tools) moved fromregister_core_toolstoregister_optional_tools(still registered byregister_all_toolswhen credentials are set).
Added
GET /knowledge/list: slim metadata listing for the browse view (no content body; optionallimit, default 2000).custom_agents.example.yamltemplate for custom agents (copy to gitignoredcustom_agents.yaml).scripts/list-legacy-connections.py: read-only audit of legacy per-product Google connector rows.tests/test_mode_routing.py: prefix stripping for@qdrant/@docs/@find.tests/test_config_loader.py: merged YAML parity betweenapp.configandagentforge.config.tests/test_feature_flags.py: defaultcanvas.enabled/botty.enabledsettings.tests/test_mode_prefixes.py,tests/test_botty_engine.py: shared RAG aliases and Botty rate limits.web/server/session_source.py,tests/test_session_source.py: shared sessionsourceresolution for WS and worker paths.
Removed
get_connector_config()(unused after unified Google OAuth cleanup).strip_agent_prefix()(unused after mode-routing extraction).translate_legacy_locality()(empty map; inlined at call sites).tools.shell.sudo_passwordstartup warning in the CLI (the key was already ignored; interactive sudo is the only path).AGENTFORGE_WORKER_LOCALITYenv fallback in worker role resolution (useAGENTFORGE_WORKER_ROLE).- Legacy
connectors.google.gmail.credentials_dirconfig path for OAuth client secrets (useconnectors.credentials_dirorGMAIL_CREDENTIALS_DIR).
Breaking
- Knowledge Database content type rename (see Changed above).
- Legacy per-product Google connector plugins removed (see Changed above).
- Chat session listing is scoped by
source; clients must passoverrides.source/?source=where appropriate.
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md
Release v0.8.0
What's Changed
Added
- Knowledge Database (
/knowledge/*onagentforge-api): a personal store for user-created entries (code,command,url,config,error_solution,note,api_example) in its own Qdrant collection (knowledge_entries), separate from the RAG index. CRUD, bulk create/delete, and semantic search with tag/type/project filters, tag faceting, and stats - Smart re-indexing on update: re-embeds only when
title,content, ornoteschange; metadata-only edits skip the embedding call - Parent/child attachments via
parent_id, with per-page chunking so a parent entry and its attached documents are searchable as passages POST /knowledge/filter: list entries by metadata filters (incl.parent_id) without a vector searchPOST /knowledge/entries/{id}/context: most relevant passages from one entry for a query, plus adjacent pages for contextPOST /knowledge/entries/{id}/rechunk: rebuild page chunks for entries indexed before chunking existedPOST /knowledge/extract: server-side text extraction from uploaded files (PDF via pdfplumber,pdftotextfallback; text/code/config decoded as UTF-8), reusing AgentForge's extraction path instead of frontend JSmetadatafree-form field on all knowledge points (request + response)knowledgeconfig block:collection_name,dedup_threshold,composite_template(env prefixKNOWLEDGE_)- SAQ batch job for bulk knowledge ingestion
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md
Release v0.7.0
What's Changed
Added
- Diff-preview confirmation gate for
write_fileandappend_filetools -- shows a unified diff and requires user approval before writing, matching the existingcode_editflow - Agent-level destructive shell/ssh guard:
sed -i,perl -pi, and other in-place edits are intercepted viarun_confirm()before execution sed -i/perl -pipatterns added to CommandGuard's deterministic_DESTRUCTIVE_PATTERNSregexsed -i/perl -piadded to the LLM classification prompt (command_guard.md) as explicit destructive examplesskip_confirmparameter on_dispatch_tool()for callers that already ran confirmation at the agent level
Fixed
- Cross-role dispatch now respects
skip_confirmseparately frominternal, preventing double-confirmation on pre-gated tools
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md
Release v0.6.0
What's Changed
Added
- GitHub connector (
@github/@gh): token (PAT) auth, github.com-only. Reuses theghCLI by injecting each connection's PAT asGH_TOKENrather than reimplementing the REST API; read-only connections apply a best-effort allowlist of readghsubcommands - Per-connection read/write toggle for token connectors (GitLab, GitHub) via
PATCH /api/connectors/{id}, re-registering the agent so its tools and prompt reflect the mode - Answer bookmarks:
command_notesextended withkind+content, so agent answers can be saved, not just tool calls source_branch/target_branchfilters ongitlab_merge_requestsneeds_url/default_urlon connector types, so SaaS-only connectors (GitHub) omit the URL field in the connect form
Changed
- Token connections are verified with a live API call before they are saved so invalid tokens or hosts now fail immediately instead of creating a potential dead connection
/api/agentsreturns asourcefield so clients can distinguish connector connections from built-in and custom modes- Connection listings expose
read_write - Expanded
user_context.example.mdwith richer explanations
Fixed
- The name-greeting parser tolerates bullet variations in
user_context.md
Removed
- The browser-location feature:
location_service.py, the/api/locationendpoint, and the location prompt-injection
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md
Release v0.5.0
What's Changed
First public-ready release: cleanup and hardening, a unified Google connector, and the GitLab toolset reintroduced.
Added
GET /api/toolsendpoint listing every registered runtime tool (name, description, category)- YouTube connector tools:
youtube_search,youtube_video_details,youtube_channel_details,youtube_playlist_items,youtube_my_subscriptions - Full GitLab connector toolset: 28
gitlab_*tools covering projects, branches, merge requests, pipelines, jobs, runners, and users, with a per-connection read/write toggle and confirmation gates on destructive actions - Configurable per-request history character limit, so clients that send large payloads (e.g., the AskPage DOM) aren't truncated
- Botty semantic search over chat session titles and message content, wired into run calls
Changed
- Unified the Gmail, Google Drive, and BigQuery connectors into a single
Googleconnector with per-connection product selection and a shared OAuth client - Derive better connector labels automatically (e.g., the local part of an account email)
- Corrected search-provider settings precedence between environment variables and YAML config
- TMDB: accept a v4 API Read Access Token (sent as
Authorization: Bearer) alongside the v3 API key - Refreshed the hardcoded modes info returned by the
/agentendpoint - Improved sticky-mode handling for the dry-run feature
- Made the
GETuploads endpoint a catch-all (droppedsession_idfrom the path)
Removed
- Deprecated and outdated configs, files, and logic
Breaking
- Google connector config moved from the per-product
connectors.gmail,connectors.google_drive, andconnectors.big_queryblocks to a singleconnectors.googleblock. Updateconfig.yamlaccordingly (seeconfig.example.yaml).
Full changelog: https://github.com/bulletinmybeard/agent-forge/blob/master/CHANGELOG.md