Replace 7 read tools with generic read-only api_get tool #23
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
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?
Type
Feature
Lineage
Standalone — simplifies Nemo's read architecture so new basketball-api endpoints (jerseys, schedules, billing) work automatically.
Repo
forgejo_admin/westside-ai-assistantUser Story
As Marcus (admin)
I want to ask Nemo any question about the program data
So that I don't have to wait for new tools to be added every time basketball-api gets a new endpoint
Context
Nemo currently has 7 hand-coded read tools (get_dashboard, list_players, get_player, list_teams, get_roster, get_subscriptions_overview, list_subscriptions). Each maps to one basketball-api endpoint. When new endpoints land (jersey orders, schedules, billing tiers), Nemo can't access them without a code change.
Replace all 7 read tools with a single generic
api_gettool that accepts a path and makes a GET request to basketball-api. Claude determines the correct endpoint from the user's question. The Keycloak service account already has admin access.Safety: the tool MUST enforce GET-only at the code level. No POST/PUT/DELETE/PATCH regardless of what path is passed. Write operations stay as explicit confirmed tools.
File Targets
Files to modify:
app/ai.py— replace 7 read tool definitions with 1api_gettool, remove_execute_read_tooldispatch, add generic GET executor, update system prompt with available endpoint examplesapp/basketball.py— add genericget(path)method (GET only, no body)Files NOT to touch:
app/confirmation.py— write confirmation unchangedapp/groupme.py— webhook handler unchangedai.py— keep all 7 write tools with confirmationAcceptance Criteria
api_gettool replaces all 7 read toolsapi_getenforces GET method at code level (not prompt level)api_getTest Expectations
pytest tests/ -k test_api_getConstraints
method="GET"in the execution function. No parameter to override.Checklist
Related
project-westside-basketball— parent projectScope Review: NEEDS_REFINEMENT
Review note:
review-721-2026-03-30Well-scoped issue with verified file targets, but traceability gaps need fixing before dispatch.
project-westside-ai-assistantbut pal-e-docs project slug iswestside-basketball.Scope refinement (review-721-2026-03-30):
Relatedsection:project-westside-ai-assistant→project-westside-basketball(correct parent project)arch:westside-ai-assistant→arch:basketball-api(references existing arch component, no missing arch note)story:WS-S5— this ticket serves WS-S5 ("view registration stats on a dashboard") by giving Nemo generic read access to all admin data including dashboard stats. The generic tool is a superset of what WS-S5 needs.Scope Review: READY
Review note:
review-721-2026-03-30-r2Re-review after refinement. All three issues from
review-721-2026-03-30resolved:Ticket is ready for dispatch.