atlas-os 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- atlas_os-0.3.0/.env.example +97 -0
- atlas_os-0.3.0/.gitignore +76 -0
- atlas_os-0.3.0/CHANGELOG.md +249 -0
- atlas_os-0.3.0/LICENSE +21 -0
- atlas_os-0.3.0/PKG-INFO +941 -0
- atlas_os-0.3.0/README.md +883 -0
- atlas_os-0.3.0/atlas_os/__init__.py +7 -0
- atlas_os-0.3.0/atlas_os/__main__.py +6 -0
- atlas_os-0.3.0/atlas_os/_paths.py +78 -0
- atlas_os-0.3.0/atlas_os/_probe.py +63 -0
- atlas_os-0.3.0/atlas_os/_skills.py +263 -0
- atlas_os-0.3.0/atlas_os/audit.py +246 -0
- atlas_os-0.3.0/atlas_os/backends.py +427 -0
- atlas_os-0.3.0/atlas_os/cli.py +889 -0
- atlas_os-0.3.0/dashboard/README.md +45 -0
- atlas_os-0.3.0/docs/ARCHITECTURE.md +97 -0
- atlas_os-0.3.0/docs/CONFIGURATION.md +204 -0
- atlas_os-0.3.0/docs/DATA-CLASSIFICATION.md +42 -0
- atlas_os-0.3.0/docs/EXAMPLES.md +261 -0
- atlas_os-0.3.0/docs/FAQ.md +115 -0
- atlas_os-0.3.0/docs/PUBLISHING.md +216 -0
- atlas_os-0.3.0/docs/QUICKSTART.md +119 -0
- atlas_os-0.3.0/docs/README.md +82 -0
- atlas_os-0.3.0/docs/REBUILD.md +92 -0
- atlas_os-0.3.0/docs/SCHEDULED-TASKS.md +95 -0
- atlas_os-0.3.0/docs/SCRIPTS.md +317 -0
- atlas_os-0.3.0/docs/SETUP.md +278 -0
- atlas_os-0.3.0/docs/SKILLS-CATALOGUE.md +1037 -0
- atlas_os-0.3.0/docs/SKILLS-FRAMEWORK.md +269 -0
- atlas_os-0.3.0/docs/features/README.md +44 -0
- atlas_os-0.3.0/docs/features/email-reports.md +96 -0
- atlas_os-0.3.0/docs/features/git-automation.md +169 -0
- atlas_os-0.3.0/docs/features/health-and-dashboard.md +117 -0
- atlas_os-0.3.0/docs/features/knowledge-graph.md +117 -0
- atlas_os-0.3.0/docs/features/knowledge-vault.md +99 -0
- atlas_os-0.3.0/docs/features/rag-search.md +171 -0
- atlas_os-0.3.0/docs/features/skills-and-automation.md +97 -0
- atlas_os-0.3.0/docs/features/trading-sdk.md +183 -0
- atlas_os-0.3.0/pyproject.toml +93 -0
- atlas_os-0.3.0/schemas/enforce_schemas.py +433 -0
- atlas_os-0.3.0/schemas/frontmatter-schemas.md +73 -0
- atlas_os-0.3.0/scripts/build_graph.py +153 -0
- atlas_os-0.3.0/scripts/embed_vault.py +718 -0
- atlas_os-0.3.0/scripts/health_check.py +336 -0
- atlas_os-0.3.0/scripts/send_email.py +121 -0
- atlas_os-0.3.0/scripts/trading_briefing.py +274 -0
- atlas_os-0.3.0/scripts/vault_changelog.py +200 -0
- atlas_os-0.3.0/scripts/vault_commit.py +201 -0
- atlas_os-0.3.0/skills/afternoon-job-tracker-update/SKILL.md +40 -0
- atlas_os-0.3.0/skills/atlas-daily-report-email/SKILL.md +42 -0
- atlas_os-0.3.0/skills/daily-job-tracker-update/SKILL.md +47 -0
- atlas_os-0.3.0/skills/daily-trading-report/SKILL.md +44 -0
- atlas_os-0.3.0/skills/friday-it-newsletter/SKILL.md +53 -0
- atlas_os-0.3.0/skills/generate-vault-report-doc/SKILL.md +45 -0
- atlas_os-0.3.0/skills/inbox-triage-digest/SKILL.md +62 -0
- atlas_os-0.3.0/skills/nightly-obsidian-index/SKILL.md +71 -0
- atlas_os-0.3.0/skills/nightly-rag-incremental/SKILL.md +35 -0
- atlas_os-0.3.0/skills/spreadsheet-analysis/SKILL.md +53 -0
- atlas_os-0.3.0/skills/topic-research-brief/SKILL.md +45 -0
- atlas_os-0.3.0/skills/vault-lint-report/SKILL.md +77 -0
- atlas_os-0.3.0/skills/weekly-digest-report/SKILL.md +54 -0
- atlas_os-0.3.0/skills/weekly-rag-full-reembed/SKILL.md +37 -0
- atlas_os-0.3.0/skills/weekly-system-health-check/SKILL.md +39 -0
- atlas_os-0.3.0/templates/CLAUDE.md.template +67 -0
- atlas_os-0.3.0/templates/memory-structure/MEMORY.md.template +25 -0
- atlas_os-0.3.0/templates/memory-structure/example-memories/example-feedback.md +15 -0
- atlas_os-0.3.0/templates/memory-structure/example-memories/example-user-profile.md +13 -0
- atlas_os-0.3.0/templates/ops-dashboard.html +104 -0
- atlas_os-0.3.0/templates/vault-skeleton/.claude-index.md.template +40 -0
- atlas_os-0.3.0/templates/vault-skeleton/Operations Dashboard.md +52 -0
- atlas_os-0.3.0/templates/vault-skeleton/wiki/hot.md.template +19 -0
- atlas_os-0.3.0/templates/vault-skeleton/wiki/index.md.template +26 -0
- atlas_os-0.3.0/templates/vault-skeleton/wiki/log.md.template +17 -0
- atlas_os-0.3.0/tests/conftest.py +79 -0
- atlas_os-0.3.0/tests/test_audit.py +215 -0
- atlas_os-0.3.0/tests/test_backends.py +259 -0
- atlas_os-0.3.0/tests/test_build_graph.py +74 -0
- atlas_os-0.3.0/tests/test_cli.py +60 -0
- atlas_os-0.3.0/tests/test_embed_vault.py +130 -0
- atlas_os-0.3.0/tests/test_health_check.py +109 -0
- atlas_os-0.3.0/tests/test_send_email.py +119 -0
- atlas_os-0.3.0/tests/test_skills.py +192 -0
- atlas_os-0.3.0/tests/test_trading_briefing.py +75 -0
- atlas_os-0.3.0/tests/test_vault_changelog.py +77 -0
- atlas_os-0.3.0/tests/test_vault_commit.py +72 -0
- atlas_os-0.3.0/trading/README.md +66 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
# Atlas OS configuration
|
|
3
|
+
#
|
|
4
|
+
# Copy this file to `.env` and fill in your own values:
|
|
5
|
+
# cp .env.example .env
|
|
6
|
+
#
|
|
7
|
+
# Load it into your shell before running scripts:
|
|
8
|
+
# set -a; source .env; set +a
|
|
9
|
+
#
|
|
10
|
+
# `.env` is git-ignored. NEVER commit real secrets. All values below are
|
|
11
|
+
# placeholders / safe defaults — none are real credentials.
|
|
12
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
# ── Vault ───────────────────────────────────────────────────────────────────
|
|
15
|
+
# Absolute path to your markdown vault. Required by almost every script.
|
|
16
|
+
VAULT_PATH=~/Documents/Obsidian/MyVault
|
|
17
|
+
|
|
18
|
+
# Where to write the RAG vector store and graph (default: $VAULT_PATH/.rag)
|
|
19
|
+
# RAG_DIR=~/Documents/Obsidian/MyVault/.rag
|
|
20
|
+
|
|
21
|
+
# Where your Claude scheduled-task SKILL.md folders live
|
|
22
|
+
# SCHEDULED_DIR=~/Documents/Claude/Scheduled
|
|
23
|
+
|
|
24
|
+
# Where `atlas skills install <name>` writes installed skills
|
|
25
|
+
# (default: $VAULT_PATH/.claude/skills)
|
|
26
|
+
# ATLAS_SKILLS_DIR=~/Documents/Claude/Scheduled
|
|
27
|
+
|
|
28
|
+
# ── Pluggable LLM backends (auto-detected) ───────────────────────────────────
|
|
29
|
+
# Atlas OS talks to any OpenAI-compatible LLM server. If you leave the EMBED_*
|
|
30
|
+
# and LM_STUDIO_* vars below unset, it auto-detects a running backend by probing
|
|
31
|
+
# (in order): LM Studio → Ollama → llama.cpp → a custom OpenAI-compatible URL.
|
|
32
|
+
# Run `atlas backends` to see what's detected, `atlas backends test` to verify.
|
|
33
|
+
#
|
|
34
|
+
# ATLAS_LLM_BACKEND force one backend, skipping detection:
|
|
35
|
+
# lmstudio | ollama | llamacpp | openai-compatible
|
|
36
|
+
# ATLAS_LLM_MODEL override the chat model name reported to callers
|
|
37
|
+
# ATLAS_LLM_BACKEND=
|
|
38
|
+
# ATLAS_LLM_MODEL=
|
|
39
|
+
#
|
|
40
|
+
# Per-backend base URL overrides (only needed if not on the default localhost port):
|
|
41
|
+
# LM_STUDIO_URL (default :5555) · OLLAMA_URL (default :11434)
|
|
42
|
+
# LLAMACPP_URL (default :8080) · OPENAI_COMPATIBLE_URL (no default — must be set)
|
|
43
|
+
# OLLAMA_URL=http://localhost:11434
|
|
44
|
+
# LLAMACPP_URL=http://localhost:8080
|
|
45
|
+
# OPENAI_COMPATIBLE_URL=
|
|
46
|
+
|
|
47
|
+
# ── Local LLM: embeddings (OpenAI-compatible, e.g. LM Studio / Ollama) ───────
|
|
48
|
+
# Explicit values here take precedence over backend auto-detection above.
|
|
49
|
+
EMBED_HOST=localhost
|
|
50
|
+
EMBED_PORT=5555
|
|
51
|
+
EMBED_MODEL=text-embedding-nomic-embed-text-v1.5
|
|
52
|
+
# EMBED_API_KEY= # only if your endpoint requires a bearer token
|
|
53
|
+
# EMBED_URL= # overrides host/port if set
|
|
54
|
+
|
|
55
|
+
# ── Local LLM: chat completions (used by trading module) ─────────────────────
|
|
56
|
+
LM_STUDIO_HOST=localhost
|
|
57
|
+
LM_STUDIO_PORT=5555
|
|
58
|
+
LM_STUDIO_MODEL=local-model
|
|
59
|
+
# Two scripts read the chat endpoint and expect DIFFERENT shapes — set whichever
|
|
60
|
+
# you use, or leave both unset to fall back to host/port:
|
|
61
|
+
# LM_STUDIO_URL used by scripts/trading_briefing.py — include the /v1 suffix
|
|
62
|
+
# default: http://$LM_STUDIO_HOST:$LM_STUDIO_PORT/v1
|
|
63
|
+
# LM_STUDIO_ENDPOINT used by trading/config.py + trading/core.py — NO /v1 suffix
|
|
64
|
+
# default: http://$LM_STUDIO_HOST:$LM_STUDIO_PORT
|
|
65
|
+
# LM_STUDIO_URL=
|
|
66
|
+
# LM_STUDIO_ENDPOINT=
|
|
67
|
+
|
|
68
|
+
# ── Text-to-speech (optional) ────────────────────────────────────────────────
|
|
69
|
+
TTS_HOST=localhost
|
|
70
|
+
TTS_PORT=8800
|
|
71
|
+
|
|
72
|
+
# ── Email (SMTP) ──────────────────────────────────────────────────────────────
|
|
73
|
+
# The account that sends reports/newsletters.
|
|
74
|
+
SENDER_EMAIL=your-atlas-account@example.com
|
|
75
|
+
SENDER_NAME=Atlas
|
|
76
|
+
SMTP_SERVER=smtp.gmail.com
|
|
77
|
+
SMTP_PORT=587
|
|
78
|
+
# Gmail app password (https://myaccount.google.com/apppasswords) — NEVER commit
|
|
79
|
+
SMTP_APP_PASSWORD=your-app-password
|
|
80
|
+
|
|
81
|
+
# Where reports are sent (usually yourself)
|
|
82
|
+
USER_EMAIL=your-email@example.com
|
|
83
|
+
|
|
84
|
+
# ── Dashboard ports (optional) ────────────────────────────────────────────────
|
|
85
|
+
DASHBOARD_FRONTEND_PORT=3000
|
|
86
|
+
DASHBOARD_BACKEND_PORT=5001
|
|
87
|
+
|
|
88
|
+
# ── Trading module (optional) ─────────────────────────────────────────────────
|
|
89
|
+
TRADING_AGENTS_PATH=~/Documents/TradingAgents
|
|
90
|
+
TRADING_TICKERS=BTC-USD,ETH-USD
|
|
91
|
+
# Cloud Portfolio Manager step (off by default) — only if you opt in:
|
|
92
|
+
# ANTHROPIC_API_KEY=sk-ant-your-key
|
|
93
|
+
# ANTHROPIC_MODEL=claude-opus-4-6
|
|
94
|
+
|
|
95
|
+
# ── Git (optional) ────────────────────────────────────────────────────────────
|
|
96
|
+
# If you mirror your vault to a remote, set it here (your private repo).
|
|
97
|
+
# GITHUB_REPO=your-username/your-vault
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# ── Secrets & credentials ───────────────────────────────────────────────────
|
|
2
|
+
.env
|
|
3
|
+
.env.*
|
|
4
|
+
!.env.example
|
|
5
|
+
*.key
|
|
6
|
+
*.pem
|
|
7
|
+
*.p12
|
|
8
|
+
credentials*
|
|
9
|
+
*credential*
|
|
10
|
+
*password*
|
|
11
|
+
*secret*
|
|
12
|
+
*.token
|
|
13
|
+
.anthropic-api-key
|
|
14
|
+
*-app-password
|
|
15
|
+
*gmail-app-password*
|
|
16
|
+
|
|
17
|
+
# ── Personal data / PII (never commit) ──────────────────────────────────────
|
|
18
|
+
*.xlsx # job trackers and other spreadsheets contain PII
|
|
19
|
+
*.xls
|
|
20
|
+
*.csv # may contain personal/exported data
|
|
21
|
+
vault-content/
|
|
22
|
+
vault/
|
|
23
|
+
personal/
|
|
24
|
+
private/
|
|
25
|
+
job-search/
|
|
26
|
+
job-tracker*
|
|
27
|
+
briefings/
|
|
28
|
+
*briefing*.md
|
|
29
|
+
session-logs/
|
|
30
|
+
*.eml
|
|
31
|
+
|
|
32
|
+
# ── Generated RAG / graph data (contains embedded personal notes) ───────────
|
|
33
|
+
*.sqlite
|
|
34
|
+
*.sqlite3
|
|
35
|
+
*.db
|
|
36
|
+
vectors.json
|
|
37
|
+
vectors.json.tmp
|
|
38
|
+
graph.json
|
|
39
|
+
graph.json.tmp
|
|
40
|
+
last_embed.txt
|
|
41
|
+
last_embed_fallback.txt
|
|
42
|
+
embed_checkpoint.json
|
|
43
|
+
.rag/
|
|
44
|
+
.vectors/
|
|
45
|
+
cache/
|
|
46
|
+
|
|
47
|
+
# ── Trading (local config may contain real paths / keys) ────────────────────
|
|
48
|
+
trading/config.py
|
|
49
|
+
signals.json
|
|
50
|
+
|
|
51
|
+
# ── Python ──────────────────────────────────────────────────────────────────
|
|
52
|
+
__pycache__/
|
|
53
|
+
*.py[cod]
|
|
54
|
+
*.egg-info/
|
|
55
|
+
.venv/
|
|
56
|
+
venv/
|
|
57
|
+
.env.bak
|
|
58
|
+
.pytest_cache/
|
|
59
|
+
.mypy_cache/
|
|
60
|
+
.ruff_cache/
|
|
61
|
+
|
|
62
|
+
# ── Node / dashboard ────────────────────────────────────────────────────────
|
|
63
|
+
node_modules/
|
|
64
|
+
dist/
|
|
65
|
+
build/
|
|
66
|
+
*.log
|
|
67
|
+
|
|
68
|
+
# ── OS / editor ─────────────────────────────────────────────────────────────
|
|
69
|
+
.DS_Store
|
|
70
|
+
Thumbs.db
|
|
71
|
+
*.swp
|
|
72
|
+
.idea/
|
|
73
|
+
.vscode/
|
|
74
|
+
|
|
75
|
+
# ── Local Claude Code / agent tooling state (not part of the public repo) ────
|
|
76
|
+
.claude/
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Atlas OS are documented here. The format is based on
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
|
|
5
|
+
aims to follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **Automated PyPI publishing via GitHub Actions + Trusted Publishing.** Pushing
|
|
11
|
+
a `v*` tag (e.g. `v0.4.0`) now builds, tests, and publishes the release to
|
|
12
|
+
PyPI with no stored token — authentication is
|
|
13
|
+
[OIDC Trusted Publishing](https://docs.pypi.org/trusted-publishers/).
|
|
14
|
+
[`.github/workflows/publish.yml`](.github/workflows/publish.yml) runs
|
|
15
|
+
`test → build → publish`: lint + `pytest`, then `python -m build` +
|
|
16
|
+
`twine check`, then `pypa/gh-action-pypi-publish` against the `pypi`
|
|
17
|
+
environment with `id-token: write`. A companion
|
|
18
|
+
[`.github/workflows/test-publish.yml`](.github/workflows/test-publish.yml)
|
|
19
|
+
routes pre-release tags (`v*rc*`, `v*dev*`) to TestPyPI for dress rehearsals.
|
|
20
|
+
[`docs/PUBLISHING.md`](docs/PUBLISHING.md) documents the flow and the one-time
|
|
21
|
+
PyPI trusted-publisher setup (pending-publisher or manual-first-upload).
|
|
22
|
+
- **`atlas skills install <name>`** — one-command skill deployment. Copies a
|
|
23
|
+
skill's `SKILL.md` into your scheduled-tasks directory (`$ATLAS_SKILLS_DIR`,
|
|
24
|
+
default `$VAULT_PATH/.claude/skills/<name>/`) and substitutes its
|
|
25
|
+
`{{PLACEHOLDER}}` tokens from the environment / `.env`. Most tokens map to the
|
|
26
|
+
env var of the same name (`{{VAULT_PATH}}` ← `VAULT_PATH`); `{{ATLAS_OS}}`
|
|
27
|
+
resolves to the repo path and `{{LLM_PORT}}` reads `LM_STUDIO_PORT`. Tokens
|
|
28
|
+
with no value are left in place and reported so you can fill them by hand;
|
|
29
|
+
`--force` overwrites an existing install. Two companion subcommands:
|
|
30
|
+
`atlas skills list` (every available skill) and `atlas skills show <name>`
|
|
31
|
+
(print a skill's `SKILL.md`). The placeholder logic and install live in
|
|
32
|
+
[`atlas_os/_skills.py`](atlas_os/_skills.py), covered by
|
|
33
|
+
[`tests/test_skills.py`](tests/test_skills.py).
|
|
34
|
+
- **PyPI release preparation.** The package is now publish-ready: the version is
|
|
35
|
+
single-sourced from `__version__` in
|
|
36
|
+
[`atlas_os/__init__.py`](atlas_os/__init__.py) via `[tool.hatch.version]`
|
|
37
|
+
(bump it in one place), the sdist explicitly bundles `scripts/`, `schemas/`,
|
|
38
|
+
`templates/`, `skills/`, and `docs/` (`[tool.hatch.build.targets.sdist]`), and
|
|
39
|
+
the metadata gained AI/indexing topic classifiers. A new
|
|
40
|
+
[`docs/PUBLISHING.md`](docs/PUBLISHING.md) is the maintainer runbook (bump →
|
|
41
|
+
`python -m build` → `twine check` → TestPyPI → `twine upload` → tag). No
|
|
42
|
+
release is published yet — everything is staged so `pipx install atlas-os`
|
|
43
|
+
works the moment it is.
|
|
44
|
+
- **Pluggable LLM backends** ([`atlas_os/backends.py`](atlas_os/backends.py)).
|
|
45
|
+
Atlas OS now auto-detects any OpenAI-compatible LLM server, probing **LM Studio
|
|
46
|
+
(`:5555`) → Ollama (`:11434`) → llama.cpp (`:8080`) → a custom
|
|
47
|
+
`OPENAI_COMPATIBLE_URL`** in that order and using the first that responds. The
|
|
48
|
+
module exposes `detect_backend()`, `get_client()`, `list_models()`, and a
|
|
49
|
+
one-shot `run_inference()` test. Two env vars override the defaults:
|
|
50
|
+
`ATLAS_LLM_BACKEND` forces a backend (`lmstudio`/`ollama`/`llamacpp`/
|
|
51
|
+
`openai-compatible`, skipping detection) and `ATLAS_LLM_MODEL` overrides the
|
|
52
|
+
chat model name. New CLI: `atlas backends` lists every backend with
|
|
53
|
+
reachability + models, and `atlas backends test` runs an end-to-end inference.
|
|
54
|
+
The RAG (`embed_vault.py`), trading (`trading_briefing.py`), and health
|
|
55
|
+
(`health_check.py`) scripts now resolve their endpoint through this module.
|
|
56
|
+
**Fully backward compatible:** explicit `EMBED_*` / `LM_STUDIO_*` settings still
|
|
57
|
+
win, so existing setups are unchanged. Covered by
|
|
58
|
+
[`tests/test_backends.py`](tests/test_backends.py).
|
|
59
|
+
- **Skills catalogue & framework docs.** A
|
|
60
|
+
[`docs/SKILLS-CATALOGUE.md`](docs/SKILLS-CATALOGUE.md) documenting the full menu
|
|
61
|
+
of **160+ skills** — 149 capability skills across seven domains (Security,
|
|
62
|
+
DevOps, Frontend, Backend, Quality, Data & AI, Business), each with a one-line
|
|
63
|
+
summary, what it does, and when to use it, plus the four Atlas-native skills
|
|
64
|
+
(`autoresearch`, `save-to-vault`, `wiki-search`, `send-email`) and the nine
|
|
65
|
+
scheduled automations. A companion
|
|
66
|
+
[`docs/SKILLS-FRAMEWORK.md`](docs/SKILLS-FRAMEWORK.md) explains what a skill is,
|
|
67
|
+
the anatomy of a `SKILL.md`, the placeholder-token system, the lifecycle
|
|
68
|
+
(creation → installation → scheduling → execution → audit logging), how the
|
|
69
|
+
RAG-indexed catalog reaches sub-agents, the `skill-creator` meta-skill, and a
|
|
70
|
+
copy-paste `SKILL.md` template. Everything is generic and `{{PLACEHOLDER}}`-
|
|
71
|
+
tokenised — no personal data.
|
|
72
|
+
- **Six example skills** ([`skills/`](skills)) demonstrating the framework across
|
|
73
|
+
document creation (`generate-vault-report-doc`), email automation
|
|
74
|
+
(`inbox-triage-digest`), data analysis (`spreadsheet-analysis`), web research
|
|
75
|
+
(`topic-research-brief`), vault management (`vault-lint-report`), and report
|
|
76
|
+
generation (`weekly-digest-report`) — bringing the shipped skill count to 15.
|
|
77
|
+
- **Audit trail** ([`atlas_os/audit.py`](atlas_os/audit.py)). An append-only
|
|
78
|
+
JSONL log of every autonomous action, written to `$ATLAS_AUDIT_PATH` (default
|
|
79
|
+
`$VAULT_PATH/.atlas/audit.jsonl`). Each entry records the timestamp, action,
|
|
80
|
+
trigger (`scheduled`/`manual`/`cli`), status, duration, what changed, why it
|
|
81
|
+
ran, and any error. Appends are serialised with an in-process lock plus an
|
|
82
|
+
OS-level advisory file lock (safe across concurrent `atlas` processes) and the
|
|
83
|
+
file auto-rotates at 10 MB to `audit.jsonl.1`, `.2`, …. Every script-wrapping
|
|
84
|
+
command (`embed`, `commit`, `graph`, `changelog`, `health`, `trading`,
|
|
85
|
+
`email`) now logs its outcome automatically; scheduled tasks tag their runs by
|
|
86
|
+
setting `ATLAS_TRIGGER=scheduled`. New `atlas audit` subcommands: `show`
|
|
87
|
+
(`--limit`/`--action`/`--since`), `tail` (last 5, compact), and `export`
|
|
88
|
+
(`--format csv|json`, `--output`) for compliance reporting. Strengthens ISO
|
|
89
|
+
27001 control A.12.4 (logging & monitoring). Covered by
|
|
90
|
+
[`tests/test_audit.py`](tests/test_audit.py).
|
|
91
|
+
- **GitHub issue & PR templates**
|
|
92
|
+
([`.github/ISSUE_TEMPLATE/`](.github/ISSUE_TEMPLATE/),
|
|
93
|
+
[`.github/PULL_REQUEST_TEMPLATE.md`](.github/PULL_REQUEST_TEMPLATE.md)) — a
|
|
94
|
+
structured bug report (with an environment block: OS, Python, Atlas OS
|
|
95
|
+
version, install method), a feature request (use case / proposed solution /
|
|
96
|
+
alternatives), and a PR checklist (tests, docs, the PII scan). An
|
|
97
|
+
`ISSUE_TEMPLATE/config.yml` disables blank issues and routes security reports
|
|
98
|
+
to `SECURITY.md` and questions to the FAQ.
|
|
99
|
+
- **README status badges** — GitHub Actions CI status, GitHub stars, and
|
|
100
|
+
last-commit, alongside the existing license / Python / privacy / docs badges.
|
|
101
|
+
- **`atlas trading`** — wraps `scripts/trading_briefing.py` (`--ticker`,
|
|
102
|
+
`--date`, `--dry-run`); the last optional pipeline script to gain a first-class
|
|
103
|
+
subcommand, so the whole system is now reachable through one `atlas` command.
|
|
104
|
+
- **Up-front env validation.** Every vault/optional command checks its required
|
|
105
|
+
environment variables before shelling out and exits with a clear message and a
|
|
106
|
+
non-zero code if any are missing — a half-configured feature fails fast instead
|
|
107
|
+
of part-way through.
|
|
108
|
+
- **`atlas email` flags.** Send mail with `--to` / `--subject` / `--body`
|
|
109
|
+
(`--text` for plain text, repeatable `--attach`), or the original raw payload
|
|
110
|
+
via `--json`.
|
|
111
|
+
- **Docker support.** A minimal [`Dockerfile`](Dockerfile) (Python 3.11-slim +
|
|
112
|
+
git) that packages the `atlas` CLI, a [`docker-compose.yml`](docker-compose.yml)
|
|
113
|
+
that bind-mounts your vault and loads `.env`, and a `.dockerignore`. Run any
|
|
114
|
+
subcommand in a container without installing Python tooling on the host.
|
|
115
|
+
Build-tested end-to-end (`atlas --version` / `doctor` / `commit` against a
|
|
116
|
+
bind-mounted vault), with three fixes from that pass: copy the
|
|
117
|
+
`scripts/schemas/templates/skills` dirs *before* `pip install` (the wheel
|
|
118
|
+
force-includes them, so the build failed without them); `git config --global
|
|
119
|
+
--add safe.directory` so git operations work on a vault owned by a non-root
|
|
120
|
+
host user (avoids "dubious ownership"); and an optional `env_file` so compose
|
|
121
|
+
runs before a `.env` exists.
|
|
122
|
+
- **CLI tests** ([`tests/test_cli.py`](tests/test_cli.py)) covering `--version`,
|
|
123
|
+
every registered subcommand, and the env-validation guards.
|
|
124
|
+
- **Core vs optional** section in [`docs/SETUP.md`](docs/SETUP.md) separating the
|
|
125
|
+
always-available core (vault, commit, changelog, schemas, health) from opt-in
|
|
126
|
+
features (RAG/embeddings, trading, email, LM Studio, dashboard) with each one's
|
|
127
|
+
extra deps and env vars, plus a Docker quick-start.
|
|
128
|
+
- **Automated test suite** in [`tests/`](tests/) — 74 hermetic `pytest` tests
|
|
129
|
+
covering the core scripts (`embed_vault`, `build_graph`, `health_check`,
|
|
130
|
+
`send_email`, `vault_commit`, `vault_changelog`, `trading_briefing`). They stub
|
|
131
|
+
every external dependency (network, SMTP, git, and the optional
|
|
132
|
+
`tradingagents` package) and point `VAULT_PATH`/`RAG_DIR` at a temp directory,
|
|
133
|
+
so they need no env vars, no network, and never touch a real vault.
|
|
134
|
+
- **GitHub Actions CI** ([`.github/workflows/ci.yml`](.github/workflows/ci.yml))
|
|
135
|
+
— runs ruff, pytest, and pip-audit on every push and pull request to `main`.
|
|
136
|
+
- **Development & testing** section in the README and dev/CI tooling (`pytest`,
|
|
137
|
+
`ruff`, `pip-audit`) added to `requirements.txt`.
|
|
138
|
+
- **Feature deep-dive docs** in [`docs/features/`](docs/features/README.md) — one
|
|
139
|
+
per feature, explaining how it actually works (internals, data formats,
|
|
140
|
+
configuration, edge cases), grounded in the source: knowledge vault & schemas,
|
|
141
|
+
local RAG search, knowledge graph, git automation, scheduled tasks & skills
|
|
142
|
+
catalog, email reports, trading SDK, and health check & dashboard. Linked from
|
|
143
|
+
the README and the docs index.
|
|
144
|
+
|
|
145
|
+
### Changed
|
|
146
|
+
- **`CONTRIBUTING.md` expanded** into a full contributor guide — dev-environment
|
|
147
|
+
setup, running the test/lint/audit suite, code style, the PR workflow, and a
|
|
148
|
+
project-structure overview — on top of the existing "golden rule" (never
|
|
149
|
+
commit personal data) and PII scan.
|
|
150
|
+
- **README**: documented `atlas trading`, the new `atlas email` flags,
|
|
151
|
+
env-validation behaviour, a Docker section (+ a Docker pointer under
|
|
152
|
+
Installation), the Docker files in the repo-layout diagram, and updated the
|
|
153
|
+
`.github/` layout line to note the issue/PR templates.
|
|
154
|
+
- **Docs sync across the set** to match the streamlined CLI:
|
|
155
|
+
- `docs/ARCHITECTURE.md` — added the `atlas` CLI as component 0 (the unified
|
|
156
|
+
entry point) and a Deployment section covering checkout / installed tool /
|
|
157
|
+
Docker.
|
|
158
|
+
- `docs/EXAMPLES.md`, `docs/features/email-reports.md` — updated every
|
|
159
|
+
`atlas email` example to the new flags (with `--json` for raw payloads),
|
|
160
|
+
fixing samples that the flag change would otherwise have broken.
|
|
161
|
+
- `docs/QUICKSTART.md` — corrected the minimum Python to 3.11+ and linked the
|
|
162
|
+
Docker quick-start.
|
|
163
|
+
- `docs/README.md` (docs index) — linked the SETUP core-vs-optional matrix and
|
|
164
|
+
the Docker files.
|
|
165
|
+
- `SECURITY.md` — added a "Running in containers (Docker)" section (no secrets
|
|
166
|
+
or vault data in the image; runtime-only `--env-file`; bind-mounted vault).
|
|
167
|
+
- **`pyproject.toml`** continues to declare the `atlas` entry point and the
|
|
168
|
+
optional dependency groups (`[pdf]`, `[trading]`, `[all]`); these are now the
|
|
169
|
+
documented install path (`pip install -e ".[all]"`) for the optional features.
|
|
170
|
+
|
|
171
|
+
## [0.3.0] — 2026-06-02
|
|
172
|
+
|
|
173
|
+
### Added
|
|
174
|
+
- **Agent skills catalog.** A self-updating `Skills Catalog.md` note generated
|
|
175
|
+
into the vault, listing every skill (name, description, suggested cadence)
|
|
176
|
+
read from each `skills/*/SKILL.md` frontmatter — so agents reading or
|
|
177
|
+
searching the vault can discover what automations they can invoke. Carries
|
|
178
|
+
`type: reference` frontmatter so the RAG indexer picks it up.
|
|
179
|
+
- **`atlas skills`** — list the catalog in the terminal; `atlas skills --sync`
|
|
180
|
+
(re)generates the note in the vault (`--output` to override the path).
|
|
181
|
+
`atlas init` now generates it automatically on setup.
|
|
182
|
+
- The `skills/` directory is bundled into the wheel so the catalog works in an
|
|
183
|
+
installed `atlas` without the source checkout.
|
|
184
|
+
|
|
185
|
+
## [0.2.0] — 2026-06-02
|
|
186
|
+
|
|
187
|
+
### Added
|
|
188
|
+
- **Installable package** with a unified **`atlas` CLI** (`pyproject.toml`,
|
|
189
|
+
`atlas_os/`). Install via `uv tool install` / `pipx` / `pip install -e .`.
|
|
190
|
+
Subcommands `embed`, `graph`, `commit`, `changelog`, `health`, `email`, and
|
|
191
|
+
`schemas` wrap the existing scripts and forward their flags; configuration
|
|
192
|
+
(`.env`) is auto-loaded.
|
|
193
|
+
- **`atlas init`** — guided onboarding: auto-detects a local LLM (LM Studio /
|
|
194
|
+
Ollama / any OpenAI-compatible endpoint), writes `.env`, scaffolds the vault
|
|
195
|
+
skeleton, initialises the vault git repo, and optionally installs the
|
|
196
|
+
`CLAUDE.md` template. Supports `--vault`, `--yes`, `--force`.
|
|
197
|
+
- **`atlas doctor`** — validates the whole setup (Python, vault, git, RAG
|
|
198
|
+
index, embeddings endpoint, SMTP) and reports OK / WARN / FAIL with a
|
|
199
|
+
non-zero exit on failures.
|
|
200
|
+
- Optional dependency extras: `atlas-os[trading]` (yfinance),
|
|
201
|
+
`atlas-os[pdf]` (pdfplumber), `atlas-os[all]`.
|
|
202
|
+
- `docs/CONFIGURATION.md` — authoritative reference for every environment
|
|
203
|
+
variable (purpose, default, required/optional, consuming scripts).
|
|
204
|
+
- `docs/SCRIPTS.md` — complete CLI reference for all scripts and their flags,
|
|
205
|
+
including the previously-undocumented `embed_vault.py` flags
|
|
206
|
+
(`--incremental`, `--folder`, `--pdfs-only`, `--checkpoint-interval`,
|
|
207
|
+
`--batch-size`).
|
|
208
|
+
- `docs/FAQ.md` — frequently asked questions and troubleshooting.
|
|
209
|
+
- `docs/README.md` — documentation index and recommended reading order.
|
|
210
|
+
- `CHANGELOG.md` — this file.
|
|
211
|
+
|
|
212
|
+
### Changed
|
|
213
|
+
- The scripts/schemas/templates are now bundled into the wheel (under
|
|
214
|
+
`atlas_os_data/`) so an installed `atlas` works without the source checkout;
|
|
215
|
+
in a source checkout the CLI uses the live files.
|
|
216
|
+
- `.env.example` now documents `LM_STUDIO_URL` (used by
|
|
217
|
+
`scripts/trading_briefing.py`, expects a `/v1` suffix) alongside
|
|
218
|
+
`LM_STUDIO_ENDPOINT` (used by `trading/config.py`/`core.py`, no suffix),
|
|
219
|
+
clarifying which script reads which.
|
|
220
|
+
- Root `README.md` expanded with the install/CLI quick start, a CLI command
|
|
221
|
+
table, badges, a documentation map, and a configuration pointer.
|
|
222
|
+
- `docs/SETUP.md` restructured into "install the package" (recommended) vs
|
|
223
|
+
"run from a source checkout".
|
|
224
|
+
|
|
225
|
+
## [0.1.0] — 2026-06-02
|
|
226
|
+
|
|
227
|
+
### Added
|
|
228
|
+
- Initial public release of Atlas OS — a local-first personal AI operating
|
|
229
|
+
system built on Claude Cowork.
|
|
230
|
+
- Knowledge vault conventions with per-folder frontmatter schema enforcement
|
|
231
|
+
(`schemas/`).
|
|
232
|
+
- Local RAG pipeline (`scripts/embed_vault.py`) and wikilink knowledge graph
|
|
233
|
+
(`scripts/build_graph.py`).
|
|
234
|
+
- Git automation: auto-commit (`scripts/vault_commit.py`) and changelog
|
|
235
|
+
(`scripts/vault_changelog.py`).
|
|
236
|
+
- Credential-free SMTP email sender (`scripts/send_email.py`).
|
|
237
|
+
- System health check across all subsystems (`scripts/health_check.py`).
|
|
238
|
+
- Optional multi-agent trading research SDK (`trading/`) and briefing generator
|
|
239
|
+
(`scripts/trading_briefing.py`).
|
|
240
|
+
- Nine Claude Cowork scheduled-task skills (`skills/`).
|
|
241
|
+
- Templates for `CLAUDE.md`, memory structure, vault skeleton, and a static ops
|
|
242
|
+
dashboard (`templates/`, `dashboard/`).
|
|
243
|
+
- Documentation: setup, architecture, rebuild runbook, scheduled tasks, data
|
|
244
|
+
classification; `SECURITY.md`, `CONTRIBUTING.md`, MIT `LICENSE`.
|
|
245
|
+
|
|
246
|
+
[Unreleased]: https://github.com/paulholland511/atlas-os/compare/v0.3.0...HEAD
|
|
247
|
+
[0.3.0]: https://github.com/paulholland511/atlas-os/compare/v0.2.0...v0.3.0
|
|
248
|
+
[0.2.0]: https://github.com/paulholland511/atlas-os/compare/v0.1.0...v0.2.0
|
|
249
|
+
[0.1.0]: https://github.com/paulholland511/atlas-os/releases/tag/v0.1.0
|
atlas_os-0.3.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Atlas OS contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|