Contributor handbook — Shell Sentinel
This summary captures the internal policies that govern collaboration on Shell Sentinel: project structure, documentation standards and website maintenance. Every contribution should follow these guidelines to protect product coherence.
General principles
- Terminal-oriented application with persistent SSH/SFTP sessions and a conversational AI assistant.
- Python 3.12 ecosystem, Textual 8.2.8 TUI, Strands Agents 1.61.1 with Strands Agents Tools 0.8.9, MCP transports on
mcp2.x and MCP tools such as Firecrawl. - Dependencies managed via
pyproject.tomland pip-tools lockfiles (make lock,make install). - Daily work relies on
make install,make format,make lint,make testandmake run. - GitHub Actions CI (lint + tests on Python 3.12) runs on every pull request via
.github/workflows/ci.yml.
Configuration and content
- All configuration lives in
conf/(avoid hardcoding values in code). - New strings must be added in
conf/locales/and referenced with_("key"). - User manuals must stay in EN/ES/DE whenever a flow changes.
- Document custom providers in the technical guide and link them from the website.
Plugins and extensibility
- Plugins load from
plugins/; each must register commands, translations and local documentation. - Do not mix plugin-specific documentation with general manuals.
- Respect system prompts and avoid duplicating SSH/SFTP connections outside the official tools.
Website documentation policy
- The site in
website/is part of the product and must reflect every functional or narrative change. - When manuals, commands or providers change, sync site content (sections, cards, links and translations).
- Online manuals use HTML pages in
website/manuals/; mirror relevant changes fromdocs/.
Test suite
make testruns the unit tests plus the offline end-to-end layer (tests/e2e/offline, markere2e_offline): the real Textual app,AgentRuntimeandstrands.Agentagainst an in-process SSH/SFTP server with a scripted model, so it needs no keys and runs in CI. It also starts real MCP servers (a scriptedstdioserver and local HTTP endpoints) to check tool calls, startup diagnostics and process cleanup.make test-e2eruns only that layer.make test-e2e-live(tests/e2e/live, markere2e) runs operator scenarios against the real providers; it requiresRUN_E2E=1plusOPENAI_API_KEY,MISTRAL_API_KEYand/orGEMINI_API_KEY, caps model calls per test and never runs in CI. Its MCP scenarios run the real Firecrawl server and needFIRECRAWL_API_KEYand Node.js (npx).make test-mistralkeeps the Mistral PoC tests (markermistral, requiresMISTRAL_API_KEY); they are taggede2esomake testnever spends tokens.
Recommended workflow
- Activate virtualenv (
python3.12 -m venv .venv, thensource .venv/bin/activate). - Install dependencies (
make install). - After changes:
make format,make lint,make test(required before opening a PR); addmake test-e2e-livewhen touching the TUI, the agent runtime or a provider. - Validate the TUI with
make runand the website withmake website-serve.
Consult the internal policy portal for more detail. After each contribution, verify that the website, manuals and repository remain aligned.