mirror of
https://github.com/Mintplex-Labs/anything-llm.git
synced 2026-07-19 14:13:35 -04:00
[GH-ISSUE #4681] [FEAT]: Global System Prompt needs to be truly global and layered (current implementation causes confusion and does not solve multi-agent or enterprise use cases). #2965
Closed
opened 2026-02-22 18:32:04 -05:00 by yindo
·
2 comments
No Branch/Tag Specified
master
5846-bug-when-scrolling-up-scrolling-jumps
refactor-remove-workspace-pfp
5969-bug-stopgenerationbutton-disappears-on-the-first-prompt-that-initiates-an-agent-session
2235-bug-how-to-upload-a-folder-with-subfolders-with-files-to-anythingllm
5990-workspace-update-fails-with-unknown-argument-router_id-v1130v1150-intel-mac
opencomputer-examples
pg
feat/image-generation-translations
feat/image-generation
5924-bug-meeting-summary-fails-with-sincludes-is-not-a-function-when-default-llm-is-anthropic-claude
render
feat/uniform-modal-component
5883-bug-unescaped-content-in-json-strings-being-passed-to-document-generator-tools
5901-bug-api-update-embeddings-fails-prisma-argument-filename-is-missing-on-workspace_documentscreate-desktop-windows-v1141
hybrid-search
1981-translations
5752-bug-prompts-to-local-jan-endpoint-unresponsive
feat-disable-native-tool-calling-env-var
5676-bug-non-ollama-agent-providers-do-not-parse-and-present-reasoning-content
feat/markdown-web-scraping
5717-bug-apiv1documentupload-silently-drops-metadata-field-in-desktop-1130-arg-count-mismatch-nested-payload-key
fix/aibitat-context-overflow
5711-bug-erratic-deepseek-v4-flash-the-agent-model-failed-to-respond-400-the-reasoning_content
5631-feat-custom-api-request-timeouts-for-ai-providers
feat-reasoning-control
feat-agent-clarifying-questions-translations
5583-bug-lm-studio-provider-does-not-present-reasoning-output
5313-normalize-translations
feat/memory-translations
5305-lemonade-embedding-engine-swallows-errors-falsely-reports-documents-as-embedded
5060-bug-agent-interactions-agent-are-not-persisted-to-thread-history-via-api
pptx-subagent
feat-render-images-from-mcp-tool-results
stt-provider-expansion-openai-api-compatible
feat-file-search-agent-tool
feat-native-embedder-job-queue
5189-normalize-translations
feat-file-search-agent-tool-translations
i18n-eslint
5140-auto-migration
5112-bug-openrouter-failed-message-bug
3506-feat-parameters-for-openrouter-models
4992-feat-preserve-scroll-position
4973-bug-markdown-numbered-list-display-in-reasoning-pane
desktop
4938-bug-pending-chat-rerendering-ui-bug
quickstart-env
node-llama-cpp-in-container-cuda
node-llama-cpp-in-container
ollama-in-container
4817-feat-set-cooldown-per-mcp-server
4845-keyboard-shortcuts-to-navigate-in-chat
4844-feat-reorder-threads-by-latest-interaction
standardize-username-constraints-normalize-translations
4792-feat-refactor-workspacepfp-image
1382-embed-ip-improvements
1382-bug-embed-api-improvements
refactor-eslint-frontend
4687-feat-refactor-vector-db-providers
4615-feat-disable-apidocs-with-environment-variable
4559-feat-agent-web-search-enable-ordering-of-results
4599-bug-ollama-race-condition-bug
4572-bug-lmstudio-provided-llm-stopped-working-with-anything-llm-after-upgrading-to-190
4508-agent-youtube-transcript-analysis
4497-feat-workspace-names
frontend-eslint
ollama-lmstudio-auto-context-window
4431-validate-vector-database-connectioN
2019-slash-command-keyboard-selection
microsoft-foundry-provider
4431-validate-vector-database-connection
4325-sys-prompt-var-improvements
3209-feat-apiv1workspacestream-chat-sources-citations
4210-bug-voice-to-text-overwrite
4136-feat-jan-as-a-backend-server-option
4172-feat-openai-o3-support
1.8.3-rerelease
web-push-notifications-service
tasks
3955-feat-jinaai-embedder-provider-support
3921-feat-agent-skills-uiux-improvements
3901-bug-validfunccall-checks-optional-arguments
keyboard-dev
1787-custom-roles-and-permissions
add-jira-slack-data-connector
office-extension-wip
lightmode-dropdown-color-update
3586-bug-agent-flow-function-description-provided-by-user-is-not-seen-in-the-llm-query
3463-bug-agent-continues-to-run-if-request-failed-even-after-exit
3439-feat-call-variables-within-the-flow-api-block-url-field
3282-manager-view-models-workspace
3280-token-counting-server-side-truncation-improvements
3147-bug-embedded-chat-widget---not-considering-query-mode-option-always-working-in-chat-mode
2995-feat-disable-temperature-setting-for-deepseek-r1-deepseek-reasoner-model
2827-feat-perplexity-citations
2866-feat-finally-a-gemini-models-endpoint
2647-feat-hpp-header-for-a-c++-code-file-mime-addition
lancedb-revert
1656-feat-implement-tooltip-ui-designs
2011-feat-bump-perplexity-models
1873-feat-auto-add-and-watch-folder-for-document-uploads
1297-feat-gemini-agent-support
1759-bug-ui-bug-fixes
1686-feat-implement-winston-for-logging
1536-bug-toggling-on-users-can-delete-workspaces-does-not-take-effect
agent-ui-mobile-styles
1522-feat-chromadb-support
1595-bug-unable-to-get-live-web-search-and-browsing-agent-working-using-google-custom-search-engine-error-getaddrinfo-enotfound-http-errno-3008
1582-bug-lm-studio-does-not-allow-for-different-model-selection
1312-bug-usernames-should-not-be-case-sensitive-when-logging-in
1029-feat-hf-serverless-inference-api
1086-feat-implement-normalized-input-fields
knowledge-graph-support
644-bug-uploaded-file-name-does-not-match-the-displayed-file-name-after-the-upload
v1.15.0
v1.14.2
v1.14.1
v1.14.0
v1.13.0
v1.12.1
v1.12.0
v1.11.2
v1.11.1
v1.11.0
v1.10.0
v1.9.1
v1.9.0
v1.8.5
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.8
v1.7.6
v1.7.5
v1.7.4
v1.4.0
v1.3.0
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.1.1
v1.1.0
v1.0.0
Labels
Clear labels
Desktop
Docker
Integration Request
Integration Request
OS: Linux
OS: Mobile
OS: Windows
UI/UX
blocked
bug
bug
core-team-only
documentation
duplicate
embed-widget
enhancement
feature request
github_actions
good first issue
investigating
needs info / can't replicate
possible bug
pull-request
question
stage: specifications
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Mintplex-Labs/anything-llm#2965
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @HanJammer on GitHub (Nov 24, 2025).
Original GitHub issue: https://github.com/Mintplex-Labs/anything-llm/issues/4681
What would you like to see?
I’m reopening the core problem from #3906 , because the recently closed PR #4487 does not address the requested functionality.
It introduces a “Default System Prompt for new workspaces”, which is essentially a template initializer, not a global prompt layer.
In its current form, the new feature actually increases confusion and adds no real value for multi-agent or complex deployments.
What was expected (from #3906 )
A true global system prompt, analogous to how ChatGPT / Claude / enterprise LLM deployments structure their instruction pipeline:
1. Global System Prompt (hidden, always applied)
2. Workspace Prompt (layered on top of global)
3. User Personalization Prompt
4. Per-Tool / Per-Skill Prompt
Every tool/skill should have:
Right now tools are global, which makes them borderline unusable in serious multi-agent setups.
What was delivered in #4487
A single setting:
“Default System Prompt is copied into new workspaces when they are created.”
This does not provide:
It simply clones a text field into the workspace’s openAiPrompt.
After that, the “global prompt” disappears entirely and cannot influence anything.
This does not solve the problem described in #3906 .
Why this matters in real deployments
In serious, multi-agent systems (AnythingLLM + n8n + MCP + toolchains) we need:
Not:
[WORKSPACE PROMPT only]The current system forces admins to generate large monolithic prompts for each workspace manually (in my case via Python + Jinja2 + YAML modules). This works, but it defeats the purpose of a framework intended for composable agents and forces to use API to update prompts which doesn't seem to leverage built-in prompt versioning unfortunately (I had to code my own prompt versioning system which is fine as well.
What needs to be implemented
I propose the following actual global prompt architecture:
1. Global System Prompt (hidden, always applied)
This is the "You are a helpful assistant disguised as a cat and you reply only with meowing..." part (similar to the hidden kernel prompts used by ChatGPT).
2. Workspace Prompt (visible)
This is the workspace prompt - just like we have already or similar to the "Project instructions" in the ChatGPT.
3. User Personalization
This is the fine-tuning of the agent style - precautions should be taken to avoid the prompt injection leading to the override of the guardrails/global system prompt/workspace prompt/tool prompts (!)
4. Tool / Skill Prompts (per-tool, per-workspace)
5. Final runtime prompt = concatenation of all layers
This mirrors state-of-the-art LLM instruction handling and enables AnythingLLM to operate in serious multi-agent deployments.
Summary
PR #4487 is a useful addition for template initialization, but it does not fulfill the purpose of #3906 .
A true global prompt layer, applied at runtime and concatenated with workspace/user/tool instructions, is required for AnythingLLM to scale beyond simple single-workspace setups.
I can provide architectural diagrams and a reference implementation if needed.
@timothycarambat commented on GitHub (Nov 24, 2025):
We added the feature as it stands because it is an annoyance to retype a prompt for every new workspace when you have a common prompt. That is what it should have solved and does.
That being said
is, quite literally, what is occurring now works fully within the current structure of how chats are managed now.
You can set a custom system variable called
globalPromptand inject that into every workspace's system prompt + use more system vars for user personalization (to be improved more by #4677). Every time we run a tool-call chat, we also inject tool definitions andexamplesas well. Lastly, we also send the current conversation history and user prompt + RAG/attachments.This is what you describe - it just is done in a process that is continuously appended as opposed to a singular massive prompt. As for the "hidden" aspect of this prompt, I do not see the benefit of hiding this information from those who can edit the system prompt for a workspace, as it is highly likely to confuse people more when information is injected and is not easily viewable or auditable by the user.
@HanJammer commented on GitHub (Nov 27, 2025):
Thanks for the explanation.
To avoid prolonging the discussion, I'll just leave one clarification that may help others reading the thread:
What you describe (variable expansion + runtime concatenation of tools/history/context) is not equivalent to a layered prompt architecture as implemented in ChatGPT, Claude, or enterprise LLM stacks.
Your approach works functionally, but:
This is perfectly fine for lightweight setups, but not optimal for multi-agent or high-isolation deployments. I understand it’s not planned, that’s fair enough. I'll possibly consider handling proper layering in my own fork.
No further input needed.
[FEAT]: Global System Prompt needs to be truly global and layered (current implementation causes confusion and does not solve multi-agent or enterprise use cases).to [GH-ISSUE #4681] [FEAT]: Global System Prompt needs to be truly global and layered (current implementation causes confusion and does not solve multi-agent or enterprise use cases).