[Bug]: Context Agent crashes with TypeError (tool_status NoneType) due to 400 Bad Request on config init
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 196
- Forks
- 26
- Avg merge
- 4d 15h
- Merged PRs (30d)
- 31
Description
Description
Upon freshly deploying the Context Agent, it fails to initialize its default tool configuration. Any attempt to interact with the agent results in a crash because nc.appconfig_ex.get_value('tool_status') returns None.
Under the hood, it appears the enabled_handler is attempting to POST its default preferences to the AppAPI config endpoint, but the Nextcloud server rejects it with a 400 Bad Request. Because the save is rejected, the JSON is never written, causing json.loads() to throw a TypeError on every subsequent task.
Environment
- Nextcloud Version: NC 32.0.8 AIO 12.9.2
- AppAPI Version: Latest
- Context Agent Version: Latest
- LLM Backend: Ollama
Steps to Reproduce
- Deploy the Context Agent via AppAPI.
- Send a message to the Nextcloud Assistant assigned to the Context Agent provider.
- Observe the "Error generating a response" banner in the UI.
- Attempt to go to Administration Settings -> Context Agent and toggle a permission (e.g., Calendar) to force a save. The UI fails to write the config.
Expected Behavior
The Agent should successfully write its default tool_status JSON via the AppAPI upon deployment, and correctly read those permissions to handle tool-calling tasks.
Actual Behavior & Logs
The container fails to set the configuration during the enabled callback, throwing a 400 error:
2026-04-20 14:54:13,252 - context_agent - INFO - enabled=True
2026-04-20 14:54:13,612 - context_agent - WARNING - App enabled: context_agent
INFO: - "PUT /enabled?enabled=1 HTTP/1.1" 500 Internal Server Error
# ... [Traceback skipped for brevity] ...
File "/ex_app/lib/main.py", line 126, in enabled_handler
await nc.appconfig_ex.set_value('tool_status', json.dumps(pref_settings))
File "/root/.cache/pypoetry/virtualenvs/context-agent-il7asoJj-py3.11/lib/python3.11/site-packages/nc_py_api/_preferences_ex.py", line 135, in set_value
await self._session.ocs("POST", f"{self._session.ae_url}/{self._url_suffix}", json=params)
File "/root/.cache/pypoetry/virtualenvs/context-agent-il7asoJj-py3.11/lib/python3.11/site-packages/nc_py_api/_session.py", line 371, in ocs
raise NextcloudException(
nc_py_api._exceptions.NextcloudException: [400] Error setting app config value <request: POST /ocs/v1.php/apps/app_api/api/v1/ex-app/config>
When a task is received, it instantly crashes trying to read the blank config:
2026-04-20 14:55:43,874 - context_agent - INFO - {'input': 'Hi there, would you tell me my evening programs from my calendar for today?', 'confirmation': 0, 'conversation_token': '<skipped>', 'memories': None}
2026-04-20 14:55:44,235 - context_agent - ERROR - Error: Traceback (most recent call last):
File "/ex_app/lib/main.py", line 180, in handle_task
output = await react(task, nextcloud)
File "/ex_app/lib/agent.py", line 97, in react
safe_tools, dangerous_tools = await get_tools(nc)
File "/ex_app/lib/tools.py", line 21, in get_tools
is_activated = json.loads(await nc.appconfig_ex.get_value('tool_status'))
File "/usr/local/lib/python3.11/json/__init__.py", line 339, in loads
raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not NoneType
Troubleshooting Attempted
I attempted to bypass the 400 API error by hardcoding the configuration directly into Nextcloud via OCC:
docker exec --user www-data nextcloud-aio-nextcloud php occ config:app:set context_agent tool_status --value='{"calendar":true}'
This successfully saved to the fast cache, but the nc_py_api bridge still fetched NoneType upon container restart, indicating a disconnect between standard occ configs and appconfig_ex ExApp storage.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in /ex_app/lib/main.py at enabled_handler, then inspect /ex_app/lib/tools.py at get_tools and the failing AppAPI config POST shown in the traceback. Reproduce the deployment and configuration toggle, trace why tool_status is not persisted or returned, and verify that the default JSON survives restart and tasks no longer raise the NoneType TypeError.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php, python
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100