Deploying to a private Hugging Face Docker Space
The app is fully self-contained: public PyPI dependencies only (pydantic-ai,
gradio) and the agent's CARE workspace artifacts bundled under artifact/.
No build secrets, no private packages β pushing is just git.
0. Prerequisites
- A Hugging Face account (and the
huggingface_hubCLI:pip install -U huggingface_hub). - The FastMCP token(s) for the discovery servers (see Secrets below). At
minimum
CODE_SEARCH_MCP_KEY; the token must be valid for the server URL the Space uses (CODE_SEARCH_MCP_URLcan override the default).
1. Create the Space
UI: huggingface.co β New Space β SDK Docker, Private, name e.g.
code-search-agent.
Or CLI:
huggingface-cli login # paste an HF token (write)
huggingface-cli repo create code-search-agent --type space --space_sdk docker --private
2. Set the secrets (Space β Settings β Secrets)
All secrets are runtime β there is no build secret anymore.
| Name | Required | Value |
|---|---|---|
CODE_SEARCH_MCP_KEY |
yes | FastMCP token for the primary discovery server (repository_search_tool + sde_search_tool). |
CODE_SEARCH_MCP_URL |
no | Primary server URL override (default: the plugin's sde-repo-search server; set this if your token belongs to a different deployment). |
CODE_SIGNALS_MCP_KEY |
no | Token for the code-signals server (static code inspection). |
ADS_ASCL_MCP_KEY |
no | Token for the ASCL/ADS server (Astrophysics citation channel, Step 5). |
AKD_GUARDRAILS_URL |
no | AKD guardrails service base URL (default: the dev ALB; gliguard input + risk_agent output checks relay here). |
The OpenAI key is not a secret β each visitor enters their own in the UI.
At startup the app probes each configured server, drops any that fail auth (so a bad token can't break every chat turn), and tells the agent which channels are live; the agent notes missing channels in Search Notes instead of fabricating.
3. Push the files
git clone https://huggingface.co/spaces/nasa-impact/code-search-agent
cd code-search-agent
git add Dockerfile app.py requirements.txt README.md bot-avatar-v2.png artifact
git commit -m "Code search agent v2 β artifacts-driven pydantic-ai backend"
git push
(.env and .venv/ are for local runs only and are gitignored.)
4. Build & test
HF builds automatically on push (the build is light β public wheels only, a
couple of minutes). When it's Running, open the Space, paste your OpenAI
key, and run a search. The boot log prints one [mcp] <server>: [toolsβ¦] line
per live discovery server β check it if a channel seems missing.
Updating the agent's instructions
The prompt and references live in artifact/ β a copy of
NASA-IMPACT/akd-plugins β plugins/code-search-assistant/skills/code-search
(SKILL.md β artifact/agents.md, references/* β artifact/*). To pick up a
new revision of the plugin, re-copy those files and push; app.py needs no
changes.
Troubleshooting
- "No discovery MCP server is configured" in chat β
CODE_SEARCH_MCP_KEYis missing, or every configured server failed auth (see the boot log). - A channel is missing from results (e.g. no ASCL/ADS evidence) β that server's token isn't set or was rejected; the agent will say so in Search Notes. Set/fix the corresponding secret.
- 401 in chat replies β the visitor's OpenAI key was rejected; that's theirs to fix (the MCP tokens are unrelated to this error).