You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
These are user-facing features that agents use automatically when deployed as a bot. No end-user documentation exists yet for them. This issue defines exactly what needs to be created/updated and provides SDK source references so a follow-up agent can implement the docs per AGENTS.md.
Important
Per AGENTS.md folder-placement rules, all new pages below MUST be created under docs/features/, never docs/concepts/ (concepts is human-approved only). docs.json entries go under the Features group.
Summary of SDK Changes
Area
SDK File
Change
Workspace
praisonaiagents/workspace/__init__.py
NEW — Workspace dataclass, path containment, access modes
NEW (stub) — session_search (placeholder, honest empty result)
Delegation tools
praisonaiagents/tools/delegation_tools.py
NEW (stub) — delegate_task (placeholder)
Bot smart defaults
praisonai/bots/_defaults.py
UPDATED — auto-injects workspace + 20+ tools when agent has none
Documentation Plan
Each page below uses the standard template from AGENTS.md: frontmatter, hero Mermaid diagram (standard color scheme), Quick Start with <Steps>, How It Works, Configuration Options table, Common Patterns, Best Practices with <AccordionGroup>, Related <CardGroup>.
All examples must be agent-centric (open with an Agent(...) snippet), beginner-friendly, and use simple imports like from praisonaiagents import Agent.
1. NEW — docs/features/workspace.mdx
Why: Workspace sandboxing is brand-new and has zero documentation.
Agent-centric opening example (Quick Start Step 1):
frompraisonaiagentsimportAgentfrompraisonai.botsimportTelegramBotagent=Agent(
name="Assistant",
instructions="You help users with files and tasks"
)
# Workspace is applied automatically when agent runs as a botbot=TelegramBot(token="YOUR_TOKEN", agent=agent)
graph LR
subgraph "Workspace Sandbox"
A[🤖 Agent] --> T[🛠️ File Tools]
T --> W[📁 Workspace Root]
W --> OK[✅ Inside = Allowed]
W --> NO[🚫 Outside = Rejected]
end
classDef agent fill:#8B0000,stroke:#7C90A0,color:#fff
classDef tool fill:#189AB4,stroke:#7C90A0,color:#fff
classDef safe fill:#10B981,stroke:#7C90A0,color:#fff
classDef danger fill:#F59E0B,stroke:#7C90A0,color:#fff
class A agent
class T,W tool
class OK safe
class NO danger
Loading
Access-mode decision diagram (to help users pick):
graph TD
Q1["What should the agent do with files?"]
Q1 -->|"Read AND write"| RW["rw (default)"]
Q1 -->|"Only read"| RO["ro"]
Q1 -->|"Isolated scratch only"| NONE["none (sandbox)"]
classDef q fill:#F59E0B,stroke:#7C90A0,color:#fff
classDef a fill:#10B981,stroke:#7C90A0,color:#fff
class Q1 q
class RW,RO,NONE a
Loading
Configuration options table (extract exactly from praisonaiagents/workspace/__init__.py):
Related cards: BotOS, Skills (Manage), Bot Default Tools
2. NEW — docs/features/skill-manage.mdx (self-improving skills)
Why: The skill_manage write API + SkillManager write methods are entirely new. Existing docs/concepts/skills.mdx and docs/features/skills.mdx only cover reading/loading skills, not creating/editing them at runtime.
Frontmatter:
---
title: "Self-Improving Skills"sidebarTitle: "Skill Manage"description: "Let agents create, edit, and patch their own skills at runtime"icon: "wand-magic-sparkles"
---
Agent-centric opening:
frompraisonaiagentsimportAgentagent=Agent(
name="Skill Builder",
instructions="When users teach you something, save it as a skill for next time.",
tools=["skill_manage", "skills_list", "skill_view"] # auto-injected in bots
)
agent.start("Create a skill called 'weekly-summary' that summarises the week's work.")
Hero diagram — the self-improving loop:
graph LR
subgraph "Self-Improving Loop"
U[👤 User Request] --> A[🤖 Agent]
A --> M{🔍 Skill Exists?}
M -->|Yes| USE[⚡ Use Skill]
M -->|No| NEW[✨ create/edit/patch]
NEW --> SAVE[💾 SKILL.md]
SAVE --> A
end
classDef user fill:#8B0000,stroke:#7C90A0,color:#fff
classDef agent fill:#8B0000,stroke:#7C90A0,color:#fff
classDef decide fill:#F59E0B,stroke:#7C90A0,color:#fff
classDef action fill:#189AB4,stroke:#7C90A0,color:#fff
classDef done fill:#10B981,stroke:#7C90A0,color:#fff
class U,A user
class M decide
class NEW,SAVE action
class USE done
Loading
Actions table — document every action in skill_manage (from praisonaiagents/tools/skill_tools.py::skill_manage):
Security guards: 100KB SKILL.md limit, 1MB file limit, atomic writes via temp files, name validation, path validation
Why this matters: agents can teach themselves and persist knowledge across sessions
Typical user interaction flow (example): user teaches agent a new workflow in chat → agent calls skill_manage(action="create", ...) → agent uses that skill on the next matching request
How workspace containment applies (skill files are written under the workspace root)
Link to docs/concepts/skills.mdx for what skills are
Related cards: Workspace, Skills (concepts), Bot Default Tools
3. NEW — docs/features/bot-default-tools.mdx
Why:BotConfig.default_tools now ships with 20+ tools auto-injected. Existing docs/concepts/bot-os.mdx mentions --memory --web flags only. Users need a single place that shows what a bot can do out of the box.
Frontmatter:
---
title: "Bot Default Tools"sidebarTitle: "Bot Default Tools"description: "The 20+ tools every bot gets automatically"icon: "toolbox"
---
Agent-centric opening — "zero-config bot" with every superpower:
frompraisonaiagentsimportAgentfrompraisonai.botsimportTelegramBotagent=Agent(
name="Assistant",
instructions="You help users. Use any tool you need."
)
# No tools= passed — bot auto-injects safe defaultsTelegramBot(token="YOUR_TOKEN", agent=agent).start()
Full default tool table (extract verbatim from BotConfig.default_tools in praisonaiagents/bots/config.py):
Tool
Category
Safe without workspace?
Notes
search_web
Web
✅
Existing
web_crawl
Web
✅
Existing
store_memory
Memory
✅
Existing
search_memory
Memory
✅
Existing
store_learning
Learning
✅
Existing
search_learning
Learning
✅
Existing
schedule_add
Scheduling
✅
Existing
schedule_list
Scheduling
✅
Existing
schedule_remove
Scheduling
✅
Existing
clarify
Clarification
✅
Existing
read_file
Files
✅ (read-only)
NEW — workspace-scoped
write_file
Files
⚠️ requires workspace
NEW
edit_file
Files
⚠️ requires workspace
NEW
list_files
Files
✅
NEW
search_files
Files
✅
NEW
todo_add
Planning
✅
NEW
todo_list
Planning
✅
NEW
todo_update
Planning
✅
NEW
skills_list
Skills
✅
NEW
skill_view
Skills
✅
NEW
skill_manage
Skills
⚠️ requires workspace
NEW
Opt-in (not auto-injected):delegate_task, session_search — both are stub implementations right now and return honest "not configured" errors. Document this clearly so users aren't surprised.
How smart defaults work (agent has no tools → bot auto-injects safe defaults from apply_bot_smart_defaults)
How to disable: explicitly pass tools=[] (bot respects _explicit_empty_tools)
Relationship with workspace: destructive file tools (write_file, edit_file, skill_manage) are filtered out unless a workspace is configured
auto_approve_tools flag (default True for bots because chat UIs can't show approval prompts)
Related cards: BotOS, Workspace, Tools
4. NEW — docs/features/todo-planning.mdx
Why:todo_tools.py is a brand-new module. Great for "agent-centric planning" per AGENTS.md principle (show how an agent uses todos in a real flow).
Frontmatter:
---
title: "Todo Planning"sidebarTitle: "Todos"description: "Let agents plan multi-step tasks with a persistent todo list"icon: "list-check"
---
Agent-centric Quick Start:
frompraisonaiagentsimportAgentagent=Agent(
name="Planner",
instructions="Break tasks into todos, then execute them one by one.",
tools=["todo_add", "todo_list", "todo_update"]
)
agent.start("Plan a blog launch — research, draft, publish.")
User interaction flow diagram:
sequenceDiagram
participant U as 👤 User
participant A as 🤖 Agent
participant T as 📋 Todos
U->>A: "Plan a blog launch"
A->>T: todo_add("research topic")
A->>T: todo_add("draft post")
A->>T: todo_add("publish")
A->>T: todo_list()
T-->>A: 3 pending todos
A->>T: todo_update(1, status="completed")
A-->>U: "Done ✅ — moving to drafting"
Context
PraisonAI PR #1503 was merged into
main(commit9386823). It brings bots/gateways up to parity with modern agent frameworks by adding:praisonaiagents.workspace)SkillManager+skill_managetool)These are user-facing features that agents use automatically when deployed as a bot. No end-user documentation exists yet for them. This issue defines exactly what needs to be created/updated and provides SDK source references so a follow-up agent can implement the docs per
AGENTS.md.Important
Per
AGENTS.mdfolder-placement rules, all new pages below MUST be created underdocs/features/, neverdocs/concepts/(concepts is human-approved only).docs.jsonentries go under the Features group.Summary of SDK Changes
praisonaiagents/workspace/__init__.pyWorkspacedataclass, path containment, access modespraisonaiagents/bots/config.pyworkspace_dir,workspace_access,workspace_scope, expandeddefault_toolspraisonaiagents/skills/manager.pycreate_skill,edit_skill,patch_skill,delete_skill,write_skill_file,remove_skill_filepraisonaiagents/tools/skill_tools.pyskill_manage,skills_list,skill_viewfunctionspraisonaiagents/tools/todo_tools.pytodo_add,todo_list,todo_updatepraisonaiagents/tools/edit_tools.pyedit_file,search_files(fuzzy find/replace)praisonaiagents/tools/file_tools.pycreate_file_tools(workspace=...)praisonaiagents/tools/session_tools.pysession_search(placeholder, honest empty result)praisonaiagents/tools/delegation_tools.pydelegate_task(placeholder)praisonai/bots/_defaults.pyDocumentation Plan
Each page below uses the standard template from
AGENTS.md: frontmatter, hero Mermaid diagram (standard color scheme), Quick Start with<Steps>, How It Works, Configuration Options table, Common Patterns, Best Practices with<AccordionGroup>, Related<CardGroup>.All examples must be agent-centric (open with an
Agent(...)snippet), beginner-friendly, and use simple imports likefrom praisonaiagents import Agent.1. NEW —
docs/features/workspace.mdxWhy: Workspace sandboxing is brand-new and has zero documentation.
Frontmatter:
Agent-centric opening example (Quick Start Step 1):
Quick Start Step 2 — Custom workspace:
Hero Mermaid diagram:
graph LR subgraph "Workspace Sandbox" A[🤖 Agent] --> T[🛠️ File Tools] T --> W[📁 Workspace Root] W --> OK[✅ Inside = Allowed] W --> NO[🚫 Outside = Rejected] end classDef agent fill:#8B0000,stroke:#7C90A0,color:#fff classDef tool fill:#189AB4,stroke:#7C90A0,color:#fff classDef safe fill:#10B981,stroke:#7C90A0,color:#fff classDef danger fill:#F59E0B,stroke:#7C90A0,color:#fff class A agent class T,W tool class OK safe class NO dangerAccess-mode decision diagram (to help users pick):
graph TD Q1["What should the agent do with files?"] Q1 -->|"Read AND write"| RW["rw (default)"] Q1 -->|"Only read"| RO["ro"] Q1 -->|"Isolated scratch only"| NONE["none (sandbox)"] classDef q fill:#F59E0B,stroke:#7C90A0,color:#fff classDef a fill:#10B981,stroke:#7C90A0,color:#fff class Q1 q class RW,RO,NONE aConfiguration options table (extract exactly from
praisonaiagents/workspace/__init__.py):rootPath/)access"rw","ro","none""rw"scope"shared","session","user","agent""session"session_keyOptional[str]NoneBotConfig fields (from
praisonaiagents/bots/config.py):workspace_dirOptional[str]None→~/.praisonai/workspaces/<scope>/<session_key>workspace_accessstr"rw"workspace_scopestr"session"Must cover:
shared/session/user/agent) and when to use eachos.getcwd()when no workspace is configured (backward compatibility)Workspace.contains(path)andWorkspace.resolve(path)usage for advanced users~/.praisonai/workspaces/<scope>/<session_key>/Related cards: BotOS, Skills (Manage), Bot Default Tools
2. NEW —
docs/features/skill-manage.mdx(self-improving skills)Why: The
skill_managewrite API +SkillManagerwrite methods are entirely new. Existingdocs/concepts/skills.mdxanddocs/features/skills.mdxonly cover reading/loading skills, not creating/editing them at runtime.Frontmatter:
Agent-centric opening:
Hero diagram — the self-improving loop:
graph LR subgraph "Self-Improving Loop" U[👤 User Request] --> A[🤖 Agent] A --> M{🔍 Skill Exists?} M -->|Yes| USE[⚡ Use Skill] M -->|No| NEW[✨ create/edit/patch] NEW --> SAVE[💾 SKILL.md] SAVE --> A end classDef user fill:#8B0000,stroke:#7C90A0,color:#fff classDef agent fill:#8B0000,stroke:#7C90A0,color:#fff classDef decide fill:#F59E0B,stroke:#7C90A0,color:#fff classDef action fill:#189AB4,stroke:#7C90A0,color:#fff classDef done fill:#10B981,stroke:#7C90A0,color:#fff class U,A user class M decide class NEW,SAVE action class USE doneActions table — document every action in
skill_manage(frompraisonaiagents/tools/skill_tools.py::skill_manage):createname,content, optionalcategoryeditname,contentpatchname,old_string,new_string, optionalfile_path,replace_alldeletenamewrite_filename,file_path,file_contentscripts/run.py)remove_filename,file_pathPython-level API (from
praisonaiagents/skills/manager.py):Must cover:
skill_manage(action="create", ...)→ agent uses that skill on the next matching requestdocs/concepts/skills.mdxfor what skills areRelated cards: Workspace, Skills (concepts), Bot Default Tools
3. NEW —
docs/features/bot-default-tools.mdxWhy:
BotConfig.default_toolsnow ships with 20+ tools auto-injected. Existingdocs/concepts/bot-os.mdxmentions--memory --webflags only. Users need a single place that shows what a bot can do out of the box.Frontmatter:
Agent-centric opening — "zero-config bot" with every superpower:
Hero diagram — tool categories:
graph TB subgraph "Auto-Injected Bot Tools" BOT[🤖 Bot] BOT --> FILE[📁 Files<br/>read/write/edit/list/search] BOT --> PLAN[📋 Planning<br/>todo_add/list/update] BOT --> SKILL[🧠 Skills<br/>skill_manage/list/view] BOT --> WEB[🌐 Web<br/>search_web/web_crawl] BOT --> MEM[💾 Memory<br/>store/search memory & learning] BOT --> SCHED[⏰ Schedule<br/>schedule_add/list/remove] end classDef bot fill:#8B0000,stroke:#7C90A0,color:#fff classDef cat fill:#189AB4,stroke:#7C90A0,color:#fff class BOT bot class FILE,PLAN,SKILL,WEB,MEM,SCHED catFull default tool table (extract verbatim from
BotConfig.default_toolsinpraisonaiagents/bots/config.py):search_webweb_crawlstore_memorysearch_memorystore_learningsearch_learningschedule_addschedule_listschedule_removeclarifyread_filewrite_fileedit_filelist_filessearch_filestodo_addtodo_listtodo_updateskills_listskill_viewskill_manageOpt-in (not auto-injected):
delegate_task,session_search— both are stub implementations right now and return honest "not configured" errors. Document this clearly so users aren't surprised.Customising defaults:
Must cover:
apply_bot_smart_defaults)tools=[](bot respects_explicit_empty_tools)write_file,edit_file,skill_manage) are filtered out unless a workspace is configuredauto_approve_toolsflag (defaultTruefor bots because chat UIs can't show approval prompts)Related cards: BotOS, Workspace, Tools
4. NEW —
docs/features/todo-planning.mdxWhy:
todo_tools.pyis a brand-new module. Great for "agent-centric planning" per AGENTS.md principle (show how an agent uses todos in a real flow).Frontmatter:
Agent-centric Quick Start:
User interaction flow diagram:
sequenceDiagram participant U as 👤 User participant A as 🤖 Agent participant T as 📋 Todos U->>A: "Plan a blog launch" A->>T: todo_add("research topic") A->>T: todo_add("draft post") A->>T: todo_add("publish") A->>T: todo_list() T-->>A: 3 pending todos A->>T: todo_update(1, status="completed") A-->>U: "Done ✅ — moving to drafting"Parameters table (from
praisonaiagents/tools/todo_tools.py):todo_addtask,priority="medium",category="general"todo_liststatus="all",category=Nonetodo_updatetodo_id,status,task,priorityMust cover:
<workspace.root>/todos.json(or~/.praisonai/todos.jsonwithout workspace)skill_manageand file tools5. NEW —
docs/features/file-editing.mdxWhy:
edit_tools.py(edit_file,search_files) is new and workspace-aware.file_tools.pygained acreate_file_tools(workspace=...)factory.Frontmatter:
Must cover:
edit_file(filepath, old_string, new_string, replace_all=False)— approval-gated at risk levelhighsearch_files(directory, pattern, file_pattern="*")— returns JSON with match locationsread_file/write_file/list_filesfromfile_tools.pyWorkspace"Path escapes workspace: ..."Agent-centric opening:
6. UPDATE —
docs/features/skills.mdxWhy: Current file covers reading/loading skills. Needs a new section pointing to the new "Self-Improving Skills" page.
Add to the existing file:
docs/features/skill-manage.mdxskills_listandskill_vieware now tools agents can call directlyDo NOT touch
docs/concepts/skills.mdx— it is in the human-only folder.7. UPDATE —
docs.jsonAdd the new features pages under the Features group (never under Concepts). Expected entries:
Verify
docs.jsonstays valid JSON after editing.Writing Rules Recap (from
AGENTS.md)For every page the follow-up agent writes:
#8B0000,#189AB4,#10B981,#F59E0B,#6366F1, white text,#7C90A0strokefrom praisonaiagents import Agent), not deep subpaths<Steps>in Quick Start,<AccordionGroup>in Best Practices,<CardGroup>in Relateddocs/features/— neverdocs/concepts/docs.jsonunder the Features groupReferences
93868235518512d872cd72cbb6dc30d6a51a8928Exact SDK source files to read (in
MervinPraison/PraisonAIat PR head)src/praisonai-agents/praisonaiagents/workspace/__init__.pysrc/praisonai-agents/praisonaiagents/bots/config.pysrc/praisonai-agents/praisonaiagents/skills/manager.pysrc/praisonai-agents/praisonaiagents/tools/skill_tools.pysrc/praisonai-agents/praisonaiagents/tools/todo_tools.pysrc/praisonai-agents/praisonaiagents/tools/edit_tools.pysrc/praisonai-agents/praisonaiagents/tools/file_tools.pysrc/praisonai-agents/praisonaiagents/tools/session_tools.pysrc/praisonai-agents/praisonaiagents/tools/delegation_tools.pysrc/praisonai/praisonai/bots/_defaults.pysrc/praisonai/praisonai/bots/bot.pyRemember:
session_searchanddelegate_taskare stubs — don't invent behaviour they don't have. Document them as planned/opt-in placeholders.