Skip to main content

SKOPOS — fleet observability satellite of the AICOM ecosystem

CI Pages deploy Live demo status Cosmic landing Python >=3.11 tests Streamlit + PostgreSQL Test coverage License: MIT

🌐 English · Русский · Español · Français · 中文 · Glossary

WARDEN quality cycle: MOMUS → AI-Factory → SKOPOS → shared node agent → deployment.

Self-hosted nginx & Apache analytics and AI security for your server fleet — GA-like HTTP dashboards, Security Center with 3D threat map, Prometheus Observability (APM KPIs + 3D service graph), scan history, and an AI agent with voice input. No third-party trackers; data stays on your infrastructure.

SKOPOS — Web Analytics and Security Center with 3D threat map

Live demo · Landing · nine built-in themes

In Greek, skopos (σκοπός) means watcher or scout. SKOPOS is the fleet observability satellite of the AICOM / AIMarket ecosystem: nginx traffic over SSH, security posture across factory / metis / oracle hosts, and an LLM analyst in the sidebar.

Role SSH log collection → SQLite/PostgreSQL analytics → Security Center + AI agent
Live demo skopos.modelmarket.dev
Landing (GitHub Pages) alexar76.github.io/skopos
Monitors nginx access logs (primary), Apache combined, CPU/RAM/disk, ports, fail2ban, port knocks
Charter Read-only SSH probes · self-hosted data · optional dashboard password

Features

  • Analytics — nginx access logs over SSH, SQLite, Streamlit charts, traffic globe
  • Security — CPU/RAM/disk/network, port audit, firewall, cyberpunk 3D threat map, consolidated Security Report
  • Scan History — score timeline, findings trends, snapshot comparison
  • Auto-scan — configurable background security scans (default every 60 min)
  • AI Agent — OpenRouter (default), DeepSeek, OpenAI, Anthropic, Ollama, LM Studio; sidebar chat with voice input
  • i18n — English (default), Russian, Spanish (locales/)

Quick start

See docs/quickstart.md.

cp servers.example.yaml servers.yaml
cp agent.example.yaml agent.yaml
export OPENROUTER_API_KEY=sk-or-...
python skoposctl.py collect
python skoposctl.py security-scan
streamlit run dashboard.py
Page URL
Analytics http://localhost:8501
Security sidebar → Security
Scan History sidebar → Scan History
Settings sidebar → Settings

Security

  • Security Score (0–100, grade A–F) in sidebar on every page
  • Threat alerts banner when critical/high issues exist
  • Dashboard password — set/change/regenerate in the admin panel; only a salted PBKDF2 hash is stored in the DB (env SKOPOS_DASHBOARD_PASSWORD still supported for bootstrap). A post-deploy modal prompts you to set one, and passwords expire after 90 days with a Telegram reminder. See configuration → Dashboard password & rotation
  • SKOPOS_SSH_STRICT_HOST_KEYS=1 — verify SSH host keys (recommended)
  • Login limits — 5 failures lock one address for 5 minutes; failures from many addresses together (SKOPOS_LOGIN_GLOBAL_MAX_ATTEMPTS, 30 per 15 min) slow new addresses down, at most a minute per submitted try. The password is checked after that attempt's own delay even if other addresses keep failing; the login form stays available. An address that logged in within SKOPOS_LOGIN_KNOWN_DAYS (30) never waits.
  • Proxy headers — X-Real-IP / X-Forwarded-For count only from SKOPOS_TRUSTED_PROXIES (loopback by default; the compose file adds gateway, the host's nginx)
  • Remediation git push — every SSH remote's host key is pinned on first use; only a loopback Gitea may skip it, with SKOPOS_GIT_SKIP_HOST_KEY_LOOPBACK=1
  • See docs/audit-findings.md

Documentation

Doc Description
In-app Documentation Guides with screenshots (also in sidebar / top bar)
Quick Start 5-minute setup
User Guide Full UI reference
Use Cases Common workflows
Security Module Architecture & extension
Privacy & data handling IP anonymisation, retention & GDPR / US-state-law mapping
nginx scope Analytics are nginx-only — disclaimer & log format
CHANGELOG Release notes

Analytics scope: traffic dashboards parse nginx access logs by default. Apache combined logs are supported when apache.enabled: true. Security probes are stack-agnostic.

Configure servers

Edit servers.yaml — SSH host, nginx log paths. See servers.example.yaml.

For per-domain analytics, include $host in nginx log_format.

AI agent

Default provider: OpenRouter via OPENROUTER_API_KEY. Edit agent.yaml for DeepSeek, OpenAI, Anthropic, Ollama, or LM Studio.

For a full prioritized remediation report, open Security → Security Report. The sidebar agent supports follow-up chat (including voice) on every page.

Docker

docker compose up -d --build

Open http://localhost:8501

License

MIT — see LICENSE.

Testing & coverage

pip install -r requirements.txt pytest pytest-cov
bash scripts/ci_coverage_badge.sh -- tests/ -q --cov=skopos

227 pytest cases · line coverage on skopos/ tracked in docs/badges/coverage.svg (regenerate with bash scripts/ci_coverage_badge.sh, verified by CI).

Screenshots

Captured from skopos.modelmarket.dev — Analytics dashboards (traffic timeline + country-share donuts) in six themes (sidebar Theme picker):

Light theme Premium theme

Light · Premium

Cosmos theme Ocean theme

Cosmos (midnight) · Ocean

Aurora theme Slate theme

Aurora · Slate

View Screenshot
Security — 3D Threat Map 3D threat map
Sidebar & navigation Sidebar
Floating AI agent Agent

Regenerate hero + theme gallery from production:

export SKOPOS_DASHBOARD_PASSWORD='…'
pip install playwright pillow && playwright install chromium
python scripts/capture_readme_screenshots.py --base-url https://skopos.modelmarket.dev/app/

Metadata

Release files for skopos-fleet 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skopos-fleet 0.2.2
File Size Uploaded Provenance Actions
skopos_fleet-0.2.2.tar.gz 640.6 kB Without provenance Details for skopos_fleet-0.2.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for skopos-fleet 0.2.2
File Interpreter ABI Platform Actions
skopos_fleet-0.2.2-py3-none-any.whl Python 3 none any Details for skopos_fleet-0.2.2-py3-none-any.whl

Total release size: 1.2 MB

Release files / skopos_fleet-0.2.2.tar.gz

Download URL skopos_fleet-0.2.2.tar.gz
Size 640.6 kB
Tags Source
SHA-256 checksum
How to use checksums
9c29a17ef92f7d4f5d7f79c3359d49656b2fca27e3c865c04a03ceed213ec333
BLAKE2b-256 checksum
How to use checksums
471c1425d659af7d0ffa69ac756846c064c0d605d83558cfb51ab51c5827b926
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / skopos_fleet-0.2.2-py3-none-any.whl

Download URL skopos_fleet-0.2.2-py3-none-any.whl
Size 569.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0cd9fd09f6794c65f090e2ec4a6f0e826bd4aefe98f34b153c09cd9eda707311
BLAKE2b-256 checksum
How to use checksums
6bc20979dc349fce74baecf86b65fc243a179bfb05becfadcea48c671d9ab4bf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Security for skopos-fleet 0.2.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page