oasr 0.4.0__tar.gz → 0.5.1__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.
- {oasr-0.4.0 → oasr-0.5.1}/CHANGELOG.md +94 -2
- {oasr-0.4.0 → oasr-0.5.1}/PKG-INFO +1 -1
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/.INDEX.md +4 -2
- oasr-0.5.1/docs/commands/CLEAN.md +13 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/CLONE.md +0 -1
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/CONFIG.md +77 -1
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/EXEC.md +172 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/REGISTRY.md +36 -0
- oasr-0.5.1/docs/config.example.toml +220 -0
- oasr-0.5.1/docs/configuration/.INDEX +58 -0
- oasr-0.5.1/docs/configuration/README.md +226 -0
- oasr-0.5.1/docs/configuration/adapter.md +72 -0
- oasr-0.5.1/docs/configuration/agent.md +196 -0
- oasr-0.5.1/docs/configuration/environment-variables.md +371 -0
- oasr-0.5.1/docs/configuration/examples/ci-cd.toml +71 -0
- oasr-0.5.1/docs/configuration/examples/development.toml +70 -0
- oasr-0.5.1/docs/configuration/examples/minimal.toml +12 -0
- oasr-0.5.1/docs/configuration/examples/production.toml +61 -0
- oasr-0.5.1/docs/configuration/precedence.md +307 -0
- oasr-0.5.1/docs/configuration/profiles.md +393 -0
- oasr-0.5.1/docs/configuration/validation.md +97 -0
- {oasr-0.4.0 → oasr-0.5.1}/pyproject.toml +1 -1
- {oasr-0.4.0 → oasr-0.5.1}/src/cli.py +1 -1
- oasr-0.5.1/src/commands/clean.py +30 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/config.py +78 -26
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/exec.py +65 -12
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/registry.py +144 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/config/__init__.py +30 -11
- oasr-0.5.1/src/config/defaults.py +40 -0
- oasr-0.5.1/src/config/env.py +248 -0
- oasr-0.5.1/src/config/schema.py +111 -0
- oasr-0.5.1/src/policy/__init__.py +50 -0
- oasr-0.5.1/src/policy/defaults.py +27 -0
- oasr-0.5.1/src/policy/enforcement.py +98 -0
- oasr-0.5.1/src/policy/profile.py +185 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_config.py +121 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_config_command.py +9 -9
- oasr-0.5.1/tests/test_config_env.py +308 -0
- oasr-0.5.1/tests/test_config_integration.py +148 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_exec.py +47 -13
- oasr-0.5.1/tests/test_policy_enforcement.py +158 -0
- oasr-0.5.1/tests/test_policy_profile.py +181 -0
- {oasr-0.4.0 → oasr-0.5.1}/uv.lock +1 -1
- oasr-0.4.0/docs/commands/CLEAN.md +0 -11
- oasr-0.4.0/doctor/SKILL.md +0 -35
- oasr-0.4.0/doctor/assets/schemas/session.schema.yaml +0 -87
- oasr-0.4.0/doctor/assets/schemas/treatment.schema.yaml +0 -70
- oasr-0.4.0/doctor/references/00_ROUTER.md +0 -104
- oasr-0.4.0/doctor/references/01_SUMMARY.md +0 -44
- oasr-0.4.0/doctor/references/02_TRIGGERS.md +0 -40
- oasr-0.4.0/doctor/references/03_ALWAYS.md +0 -43
- oasr-0.4.0/doctor/references/04_NEVER.md +0 -45
- oasr-0.4.0/doctor/references/05_PROCEDURE.md +0 -99
- oasr-0.4.0/doctor/references/06_FAILURES.md +0 -77
- oasr-0.4.0/doctor/scripts/include/.doctor/session.yaml +0 -11
- oasr-0.4.0/doctor/scripts/include/doctor_cli.py +0 -357
- oasr-0.4.0/doctor/scripts/include/doctor_parse.py +0 -348
- oasr-0.4.0/doctor/scripts/include/pyproject.toml +0 -12
- oasr-0.4.0/doctor/scripts/include/uv.lock +0 -78
- oasr-0.4.0/doctor/scripts/router_checks.sh +0 -87
- oasr-0.4.0/doctor/scripts/skill.ps1 +0 -65
- oasr-0.4.0/doctor/scripts/skill.sh +0 -57
- oasr-0.4.0/src/commands/clean.py +0 -155
- oasr-0.4.0/src/config/defaults.py +0 -16
- oasr-0.4.0/src/config/schema.py +0 -36
- {oasr-0.4.0 → oasr-0.5.1}/.gitignore +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/CONTRIBUTING.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/LICENSE +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/NOTICE +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/README.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.INDEX.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/adapter.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/add-glob.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/add-remote.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/add.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/find-add.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/find.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/help.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/info.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/list.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/rm-glob.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/rm.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/status.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/sync-update.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/sync.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/.images/use.png +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/QUICKSTART.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/ADAPTER.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/ADD.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/DIFF.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/FIND.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/HELP.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/INFO.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/LIST.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/RM.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/ROOT.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/STATUS.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/SYNC.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/UPDATE.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/USE.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/commands/VALIDATE.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/validation/.INDEX.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/validation/ERRORS.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/validation/INFO.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/validation/RULES.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/docs/validation/WARNINGS.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/install.ps1 +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/install.sh +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/llms.txt +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/scripts/README.md +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/scripts/fix.sh +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/scripts/lint.sh +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/scripts/test.sh +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/__init__.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/__main__.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapter.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapters/__init__.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapters/base.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapters/claude.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapters/codex.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapters/copilot.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapters/cursor.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/adapters/windsurf.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/agents/__init__.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/agents/base.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/agents/claude.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/agents/codex.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/agents/copilot.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/agents/opencode.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/agents/registry.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/__init__.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/adapter.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/add.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/clone.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/diff.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/find.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/help.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/info.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/list.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/rm.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/status.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/sync.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/update.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/use.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/commands/validate.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/discovery.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/manifest.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/registry.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/remote.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/skillcopy/__init__.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/skillcopy/local.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/skillcopy/remote.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/tracking.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/src/validate.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/conftest.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_adapters.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_agents.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_clone.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_copy.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_help.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_list.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_multi_skill.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_remote.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_tracking.py +0 -0
- {oasr-0.4.0 → oasr-0.5.1}/tests/test_use_glob.py +0 -0
|
@@ -4,9 +4,101 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
-
## [
|
|
7
|
+
## [0.5.1] - 2026-02-02
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
### Added
|
|
10
|
+
- **🌍 Environment Variable Support** — Full OASR_* environment variable support for all configuration
|
|
11
|
+
- Naming convention: `OASR_<SECTION>_<KEY>` (e.g., `OASR_AGENT`, `OASR_PROFILE`)
|
|
12
|
+
- Type-aware parsing: bool, int, list (comma-separated), string
|
|
13
|
+
- Clear precedence: CLI flags > env vars > config file > defaults
|
|
14
|
+
- 17 documented environment variables
|
|
15
|
+
- **✅ Enhanced Config Validation** — Early validation with helpful error messages
|
|
16
|
+
- `oasr config set` validates agent names against available drivers
|
|
17
|
+
- Profile reference validation (checks if profile exists)
|
|
18
|
+
- `--force` flag to bypass validation when needed
|
|
19
|
+
- Dotted notation support: `validation.strict`, `adapter.default`
|
|
20
|
+
- Suggestions in error messages: "Invalid agent 'foo'. Valid agents: codex, copilot..."
|
|
21
|
+
- **📚 Configuration Documentation Restructure** — Progressive disclosure documentation
|
|
22
|
+
- New `docs/configuration/` directory with 12 files (~37KB)
|
|
23
|
+
- Navigation manifest: `.INDEX` file for documentation structure
|
|
24
|
+
- 7 detailed guides: Overview, Agent, Profiles, Validation, Adapter, Env Vars, Precedence
|
|
25
|
+
- 4 example configs: Minimal, Development, CI/CD, Production
|
|
26
|
+
- Easy-to-find specific information with cross-references
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- **Config loading**: Now accepts `cli_overrides` parameter for precedence merging
|
|
30
|
+
- **Config command**: Enhanced validation and better error messages
|
|
31
|
+
- **Documentation**: `docs/commands/CONFIG.md` updated with pointers to new structure
|
|
32
|
+
|
|
33
|
+
### Technical
|
|
34
|
+
- **New module**: `src/config/env.py` with parsing, type coercion, and merging logic
|
|
35
|
+
- **50 new tests**: 40 env var tests + 10 integration tests (287 total tests passing)
|
|
36
|
+
- **Backward compatible**: All existing functionality preserved
|
|
37
|
+
- **Type safety**: Enhanced type checking and validation throughout
|
|
38
|
+
|
|
39
|
+
### Documentation
|
|
40
|
+
- **[docs/configuration/](docs/configuration/README.md)**: New comprehensive configuration guide
|
|
41
|
+
- **[Environment Variables](docs/configuration/environment-variables.md)**: Complete OASR_* reference
|
|
42
|
+
- **[Precedence](docs/configuration/precedence.md)**: Detailed precedence rules and examples
|
|
43
|
+
- **[Examples](docs/configuration/examples/)**: 4 ready-to-use configuration examples
|
|
44
|
+
|
|
45
|
+
## [0.5.0] - 2026-02-02
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
- **🔒 Execution Policy System** — Host-level security boundaries for `oasr exec`
|
|
49
|
+
- Policy profiles define what agents can and cannot do
|
|
50
|
+
- Conservative safe defaults (fail closed)
|
|
51
|
+
- User-defined custom profiles in `config.toml`
|
|
52
|
+
- Pre-execution confirmation for risky operations
|
|
53
|
+
- Risk triggers: stdin, file prompts, non-safe profiles, network/env/shell access
|
|
54
|
+
- **New CLI flags for `oasr exec`**:
|
|
55
|
+
- `--profile <name>` — Choose execution policy profile
|
|
56
|
+
- `-y/--yes` — Skip confirmation prompt
|
|
57
|
+
- `--confirm` — Force confirmation even for safe operations
|
|
58
|
+
- **Configuration support for policies**:
|
|
59
|
+
- `[oasr]` section with `default_profile` setting
|
|
60
|
+
- `[profiles.<name>]` tables for custom profiles
|
|
61
|
+
- Policy field validation in config schema
|
|
62
|
+
- Built-in "safe" profile with conservative defaults
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
- **Security model**: `oasr exec` now requires explicit confirmation for risky execution contexts
|
|
66
|
+
- **Config schema**: Extended to support execution policy profiles
|
|
67
|
+
|
|
68
|
+
### Security
|
|
69
|
+
- **Prompt injection mitigation**: Policy enforcement reduces impact of malicious skill instructions
|
|
70
|
+
- **Sensitive file protection**: Default deny list includes `~/.ssh`, `~/.aws`, `~/.gnupg`, `.env`, etc.
|
|
71
|
+
- **Execution boundaries**: Clear limits on filesystem access, network, environment variables, and shell commands
|
|
72
|
+
- **User awareness**: Policy summary shown before risky executions
|
|
73
|
+
- **Fail-closed design**: Missing/malformed config falls back to safe defaults
|
|
74
|
+
|
|
75
|
+
### Documentation
|
|
76
|
+
- **[EXEC.md](docs/commands/EXEC.md)**: Added comprehensive Security Model section
|
|
77
|
+
- **[CONFIG.md](docs/commands/CONFIG.md)**: Added Execution Policy Profiles documentation
|
|
78
|
+
- **Policy examples**: Multiple profile configurations for different use cases
|
|
79
|
+
|
|
80
|
+
### Technical
|
|
81
|
+
- **New module**: `src/policy/` subpackage with clean API (Profile, load, assess_risk, prompt_confirmation)
|
|
82
|
+
- **41 new tests**: 30 policy tests + 11 config profile tests
|
|
83
|
+
- **Test coverage**: 187 total tests passing (all existing tests still pass)
|
|
84
|
+
- **Backward compatible**: No breaking changes to existing commands
|
|
85
|
+
|
|
86
|
+
## [0.4.2] - 2026-02-01
|
|
87
|
+
|
|
88
|
+
### Added
|
|
89
|
+
- **registry prune subcommand**: Added `oasr registry prune` to align with registry command taxonomy
|
|
90
|
+
|
|
91
|
+
### Changed
|
|
92
|
+
- **clean command**: Deprecated `oasr clean` in favor of `oasr registry prune` (will be removed in v0.6.0)
|
|
93
|
+
- **documentation**: Updated REGISTRY.md with prune subcommand documentation and usage examples
|
|
94
|
+
|
|
95
|
+
## [0.4.1] - 2026-02-01
|
|
96
|
+
|
|
97
|
+
### Fixed
|
|
98
|
+
- **exec command**: Fixed `CompletedProcess` attribute error where code incorrectly referenced `.success`, `.output`, and `.error` attributes that don't exist. Now correctly uses `.returncode`
|
|
99
|
+
- **clone documentation**: Removed non-existent `-r, --recursive` flag from CLONE.md documentation
|
|
100
|
+
|
|
101
|
+
## [0.4.0] - 2026-01-31
|
|
10
102
|
|
|
11
103
|
### Added
|
|
12
104
|
- **🚀 `oasr exec` command** — Execute skills as CLI tools from anywhere
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## Core Commands (v0.4.0)
|
|
4
4
|
|
|
5
5
|
- [oasr](ROOT.md) - Global flags and options
|
|
6
|
-
- [oasr registry](REGISTRY.md) - Manage skill registry (validate, add, remove, list, sync)
|
|
6
|
+
- [oasr registry](REGISTRY.md) - Manage skill registry (validate, add, remove, list, sync, prune)
|
|
7
7
|
- [oasr diff](DIFF.md) - Show status of tracked skills
|
|
8
8
|
- [oasr sync](SYNC.md) - Refresh outdated tracked skills
|
|
9
9
|
- [oasr config](CONFIG.md) - Manage configuration (NEW in v0.4.0)
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
- [oasr exec](EXEC.md) - Execute skills as CLI tools (NEW in v0.4.0)
|
|
12
12
|
- [oasr find](FIND.md) - Find/discover skills in your file system
|
|
13
13
|
- [oasr validate](VALIDATE.md) - Validate a skill
|
|
14
|
-
- [oasr clean](CLEAN.md) - Clean up the registry
|
|
15
14
|
- [oasr adapter](ADAPTER.md) - Generate IDE/Tooling adapters
|
|
16
15
|
- [oasr update](UPDATE.md) - Update the `oasr` CLI
|
|
17
16
|
- [oasr info](INFO.md) - Show detailed information about a skill
|
|
@@ -19,6 +18,9 @@
|
|
|
19
18
|
|
|
20
19
|
## Deprecated Commands
|
|
21
20
|
|
|
21
|
+
### v0.4.1 Deprecations
|
|
22
|
+
- [oasr clean](CLEAN.md) - **Deprecated**, use `oasr registry prune` instead (will be removed in v0.6.0)
|
|
23
|
+
|
|
22
24
|
### v0.4.0 Deprecations
|
|
23
25
|
- [oasr use](USE.md) - **Deprecated**, use `oasr clone` instead (will be removed in v0.5.0)
|
|
24
26
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# `oasr clean` (DEPRECATED)
|
|
2
|
+
|
|
3
|
+
> **⚠️ Warning: This command is deprecated and will be removed in v0.6.0.**
|
|
4
|
+
> Use `oasr registry prune` instead.
|
|
5
|
+
|
|
6
|
+
Remove orphaned manifests and entries for missing skills.
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
oasr clean # Shows deprecation warning
|
|
10
|
+
oasr registry prune # New command (recommended)
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This command now delegates to `oasr registry prune`. See [REGISTRY.md](./REGISTRY.md#oasr-registry-prune) for full documentation.
|
|
@@ -17,7 +17,6 @@ oasr clone skill-one skill-two # Multiple skills
|
|
|
17
17
|
## Options
|
|
18
18
|
|
|
19
19
|
- `-d, --dest DIR` — Destination directory (default: current directory)
|
|
20
|
-
- `-r, --recursive` — Create destination directory if it doesn't exist
|
|
21
20
|
- `--quiet` — Suppress informational output
|
|
22
21
|
- `--json` — Output results in JSON format
|
|
23
22
|
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
# `oasr config`
|
|
2
2
|
|
|
3
|
-
Manage OASR configuration settings.
|
|
3
|
+
Manage OASR configuration settings.
|
|
4
|
+
|
|
5
|
+
> **Note:** For comprehensive configuration documentation, see [`docs/configuration/`](../configuration/README.md)
|
|
6
|
+
|
|
7
|
+
## Quick Reference
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
oasr config set <key> <value> # Set a config value
|
|
11
|
+
oasr config get <key> # Get a config value
|
|
12
|
+
oasr config list # Show all configuration
|
|
13
|
+
oasr config path # Show config file location
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**See also:**
|
|
17
|
+
- [Configuration Overview](../configuration/README.md) - Complete config guide
|
|
18
|
+
- [Environment Variables](../configuration/environment-variables.md) - OASR_* reference
|
|
19
|
+
- [Agent Configuration](../configuration/agent.md) - Agent settings
|
|
20
|
+
- [Policy Profiles](../configuration/profiles.md) - Execution policies
|
|
21
|
+
|
|
22
|
+
---
|
|
4
23
|
|
|
5
24
|
## Usage
|
|
6
25
|
|
|
@@ -241,6 +260,63 @@ Configure a different agent:
|
|
|
241
260
|
oasr config set agent copilot
|
|
242
261
|
```
|
|
243
262
|
|
|
263
|
+
## Execution Policy Profiles (v0.5.0+)
|
|
264
|
+
|
|
265
|
+
Policy profiles define security boundaries for `oasr exec`. They control what agents can do during skill execution.
|
|
266
|
+
|
|
267
|
+
### Default Profile
|
|
268
|
+
|
|
269
|
+
Set the default execution policy profile:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
oasr config set oasr.default_profile safe
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
This determines which profile is used unless overridden with `--profile`.
|
|
276
|
+
|
|
277
|
+
### Defining Custom Profiles
|
|
278
|
+
|
|
279
|
+
Add custom profiles to `~/.oasr/config.toml`:
|
|
280
|
+
|
|
281
|
+
```toml
|
|
282
|
+
[oasr]
|
|
283
|
+
default_profile = "safe"
|
|
284
|
+
|
|
285
|
+
# Conservative default
|
|
286
|
+
[profiles.safe]
|
|
287
|
+
fs_read_roots = ["./"]
|
|
288
|
+
fs_write_roots = ["./out", "./.oasr"]
|
|
289
|
+
deny_paths = ["~/.ssh", "~/.aws", "~/.gnupg", ".env"]
|
|
290
|
+
allowed_commands = ["rg", "fd", "jq", "cat"]
|
|
291
|
+
deny_shell = true
|
|
292
|
+
network = false
|
|
293
|
+
allow_env = false
|
|
294
|
+
|
|
295
|
+
# Development profile (more permissive)
|
|
296
|
+
[profiles.dev]
|
|
297
|
+
fs_read_roots = ["./", "~/projects"]
|
|
298
|
+
fs_write_roots = ["./", "~/projects/output"]
|
|
299
|
+
deny_paths = ["~/.ssh", "~/.aws"]
|
|
300
|
+
allowed_commands = ["bash", "curl", "git", "python"]
|
|
301
|
+
deny_shell = false
|
|
302
|
+
network = true
|
|
303
|
+
allow_env = true
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### Profile Settings Reference
|
|
307
|
+
|
|
308
|
+
| Setting | Type | Description |
|
|
309
|
+
|---------|------|-------------|
|
|
310
|
+
| `fs_read_roots` | list[string] | Allowed filesystem read locations |
|
|
311
|
+
| `fs_write_roots` | list[string] | Allowed filesystem write locations |
|
|
312
|
+
| `deny_paths` | list[string] | Explicitly denied paths |
|
|
313
|
+
| `allowed_commands` | list[string] | Permitted shell commands |
|
|
314
|
+
| `deny_shell` | bool | Deny all shell execution |
|
|
315
|
+
| `network` | bool | Allow network access |
|
|
316
|
+
| `allow_env` | bool | Allow environment variable access |
|
|
317
|
+
|
|
318
|
+
See [`oasr exec` documentation](EXEC.md#security-model) for detailed security model explanation.
|
|
319
|
+
|
|
244
320
|
## Advanced Usage
|
|
245
321
|
|
|
246
322
|
### Direct Config File Editing
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Execute skills as CLI tools from anywhere on your system. Run skills with agent-driven execution without needing to clone them first.
|
|
4
4
|
|
|
5
|
+
> **🔒 Security Note**: As of v0.5.0, `oasr exec` includes host-level execution policy enforcement to protect against prompt injection and unsafe agent behavior. See [Security Model](#security-model) below.
|
|
6
|
+
|
|
5
7
|
## Usage
|
|
6
8
|
|
|
7
9
|
```bash
|
|
@@ -13,6 +15,9 @@ oasr exec <skill-name> [options]
|
|
|
13
15
|
- `-p, --prompt TEXT` — Inline prompt/instructions for the agent
|
|
14
16
|
- `-i, --instructions FILE` — Read prompt from a file
|
|
15
17
|
- `-a, --agent AGENT` — Override the default agent (codex, copilot, claude, opencode)
|
|
18
|
+
- `--profile PROFILE` — Use a specific execution policy profile (default: from config)
|
|
19
|
+
- `-y, --yes` — Skip confirmation prompt for risky operations
|
|
20
|
+
- `--confirm` — Force confirmation even for safe operations
|
|
16
21
|
|
|
17
22
|
## Features
|
|
18
23
|
|
|
@@ -311,6 +316,173 @@ This allows skills to:
|
|
|
311
316
|
- Tracking skill versions
|
|
312
317
|
- Working offline
|
|
313
318
|
|
|
319
|
+
## Security Model
|
|
320
|
+
|
|
321
|
+
### Overview
|
|
322
|
+
|
|
323
|
+
OASR enforces **host-level execution policies** to reduce the impact of prompt injection and unsafe agent behavior. Policies define what agents can and cannot do, protecting sensitive files and preventing unauthorized actions.
|
|
324
|
+
|
|
325
|
+
**Key Principles:**
|
|
326
|
+
- OASR does not judge skills
|
|
327
|
+
- OASR enforces user-defined host policy (execution ceilings)
|
|
328
|
+
- Skills and agents cannot override policy
|
|
329
|
+
- Policies stored in `~/.oasr/config.toml`
|
|
330
|
+
- Conservative defaults (fail closed)
|
|
331
|
+
|
|
332
|
+
### Policy Profiles
|
|
333
|
+
|
|
334
|
+
Execution policies are organized into profiles. Each profile defines:
|
|
335
|
+
|
|
336
|
+
| Setting | Description | Safe Default |
|
|
337
|
+
|---------|-------------|--------------|
|
|
338
|
+
| `fs_read_roots` | Allowed read locations | `["./"]` |
|
|
339
|
+
| `fs_write_roots` | Allowed write locations | `["./out", "./.oasr"]` |
|
|
340
|
+
| `deny_paths` | Explicitly denied paths | `["~/.ssh", "~/.aws", "~/.gnupg", ".env"]` |
|
|
341
|
+
| `allowed_commands` | Permitted shell commands | `["rg", "fd", "jq", "cat"]` |
|
|
342
|
+
| `deny_shell` | Block shell execution | `true` |
|
|
343
|
+
| `network` | Allow network access | `false` |
|
|
344
|
+
| `allow_env` | Allow environment access | `false` |
|
|
345
|
+
|
|
346
|
+
### Risk Triggers
|
|
347
|
+
|
|
348
|
+
OASR requires explicit confirmation when:
|
|
349
|
+
|
|
350
|
+
1. **Input from stdin** (non-interactive/piped)
|
|
351
|
+
2. **Prompt from file** (`-i/--instructions`)
|
|
352
|
+
3. **Non-safe profile** in use
|
|
353
|
+
4. **Environment access** enabled
|
|
354
|
+
5. **Network access** enabled
|
|
355
|
+
6. **Shell execution** allowed
|
|
356
|
+
7. **Force confirmation** flag (`--confirm`)
|
|
357
|
+
|
|
358
|
+
### Confirmation Flow
|
|
359
|
+
|
|
360
|
+
When risk triggers are detected:
|
|
361
|
+
|
|
362
|
+
```
|
|
363
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
364
|
+
EXECUTION POLICY REVIEW
|
|
365
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
366
|
+
Skill: csv-analyzer
|
|
367
|
+
Agent: codex
|
|
368
|
+
Profile: safe
|
|
369
|
+
Network: denied
|
|
370
|
+
Environment: denied
|
|
371
|
+
Shell: denied
|
|
372
|
+
Allowed commands: rg, fd, jq, cat
|
|
373
|
+
Read roots: ./
|
|
374
|
+
Write roots: ./out, ./.oasr
|
|
375
|
+
Deny paths: ~/.ssh, ~/.aws, ~/.gnupg, ~/.config, .env
|
|
376
|
+
|
|
377
|
+
⚠ This execution requires confirmation due to:
|
|
378
|
+
- Input from stdin (non-interactive)
|
|
379
|
+
|
|
380
|
+
Proceed? [y/N]
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
**Default answer is No** (safe).
|
|
384
|
+
|
|
385
|
+
### Configuration
|
|
386
|
+
|
|
387
|
+
Define profiles in `~/.oasr/config.toml`:
|
|
388
|
+
|
|
389
|
+
```toml
|
|
390
|
+
[oasr]
|
|
391
|
+
default_profile = "safe"
|
|
392
|
+
|
|
393
|
+
[profiles.safe]
|
|
394
|
+
fs_read_roots = ["./"]
|
|
395
|
+
fs_write_roots = ["./out", "./.oasr"]
|
|
396
|
+
deny_paths = ["~/.ssh", "~/.aws", "~/.gnupg", "~/.config", ".env"]
|
|
397
|
+
allowed_commands = ["rg", "fd", "jq", "cat"]
|
|
398
|
+
deny_shell = true
|
|
399
|
+
network = false
|
|
400
|
+
allow_env = false
|
|
401
|
+
|
|
402
|
+
[profiles.dev]
|
|
403
|
+
# More permissive for development
|
|
404
|
+
network = true
|
|
405
|
+
allow_env = true
|
|
406
|
+
deny_shell = false
|
|
407
|
+
allowed_commands = ["bash", "curl", "git", "python", "node"]
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### Usage Examples
|
|
411
|
+
|
|
412
|
+
#### Safe Default (No Confirmation)
|
|
413
|
+
```bash
|
|
414
|
+
# Interactive prompt, safe profile
|
|
415
|
+
oasr exec csv-analyzer -p "Analyze data"
|
|
416
|
+
# No confirmation needed
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
#### Stdin Triggers Confirmation
|
|
420
|
+
```bash
|
|
421
|
+
# Non-interactive input
|
|
422
|
+
echo "data" | oasr exec csv-analyzer
|
|
423
|
+
# Requires confirmation (unless --yes)
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
#### Skip Confirmation
|
|
427
|
+
```bash
|
|
428
|
+
# Use --yes to bypass (use carefully!)
|
|
429
|
+
echo "data" | oasr exec csv-analyzer --yes
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
#### Use Different Profile
|
|
433
|
+
```bash
|
|
434
|
+
# Use 'dev' profile with more permissions
|
|
435
|
+
oasr exec api-tester -p "Run tests" --profile dev
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
#### Force Confirmation
|
|
439
|
+
```bash
|
|
440
|
+
# Force confirmation even if safe
|
|
441
|
+
oasr exec data-processor -p "Process" --confirm
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
### Best Practices
|
|
445
|
+
|
|
446
|
+
1. **Use safe defaults**: Start with the built-in safe profile
|
|
447
|
+
2. **Create custom profiles**: Define profiles for different trust levels
|
|
448
|
+
3. **Be explicit with --yes**: Only skip confirmation when you understand the risks
|
|
449
|
+
4. **Review policy before confirming**: Read the summary carefully
|
|
450
|
+
5. **Protect sensitive paths**: Always include `~/.ssh`, `~/.aws`, etc. in `deny_paths`
|
|
451
|
+
6. **Limit commands**: Only allow necessary commands in `allowed_commands`
|
|
452
|
+
7. **Use profiles per context**: Different profiles for dev/prod/testing
|
|
453
|
+
|
|
454
|
+
### What This Protects Against
|
|
455
|
+
|
|
456
|
+
✅ **Prompt injection attempts** that try to access sensitive files
|
|
457
|
+
✅ **Unsafe agent behavior** (network calls, shell execution)
|
|
458
|
+
✅ **Accidental exposure** of credentials or secrets
|
|
459
|
+
✅ **Unauthorized file access** outside allowed roots
|
|
460
|
+
✅ **Malicious skill instructions** that exceed policy
|
|
461
|
+
|
|
462
|
+
### What This Does NOT Do
|
|
463
|
+
|
|
464
|
+
❌ NLP-based prompt injection detection
|
|
465
|
+
❌ Prompt rewriting or sanitization
|
|
466
|
+
❌ Skill correctness validation
|
|
467
|
+
❌ Agent-specific permission models
|
|
468
|
+
❌ Plan-gated execution (staged for future)
|
|
469
|
+
|
|
470
|
+
### Limitations
|
|
471
|
+
|
|
472
|
+
- **Confirmation is on execution, not per-action**: Policy is checked before running, not during
|
|
473
|
+
- **Agent behavior is not monitored**: Once confirmed, agent runs with specified permissions
|
|
474
|
+
- **Trust required**: You must trust the agent CLI itself
|
|
475
|
+
- **File-level enforcement not yet implemented**: Path checks are advisory in v0.5.0
|
|
476
|
+
|
|
477
|
+
### Future Enhancements
|
|
478
|
+
|
|
479
|
+
Planned for future releases:
|
|
480
|
+
- Plan-gated execution (structured plan approval)
|
|
481
|
+
- Runtime file access enforcement
|
|
482
|
+
- Command allowlist enforcement via executor
|
|
483
|
+
- Network access controls
|
|
484
|
+
- Real-time policy violations monitoring
|
|
485
|
+
|
|
314
486
|
## Configuration
|
|
315
487
|
|
|
316
488
|
### Set Default Agent
|
|
@@ -105,6 +105,40 @@ Syncing remote skills...
|
|
|
105
105
|
Synced: 2 skills
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
+
### `oasr registry prune`
|
|
109
|
+
|
|
110
|
+
Clean up corrupted/missing skills and orphaned artifacts:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
oasr registry prune # Interactive cleanup
|
|
114
|
+
oasr registry prune -y # Skip confirmation
|
|
115
|
+
oasr registry prune --dry-run # Show what would be cleaned
|
|
116
|
+
oasr registry prune --json # JSON output
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
This command:
|
|
120
|
+
- Removes skills whose source files/URLs are no longer accessible
|
|
121
|
+
- Removes orphaned manifest files not in the registry
|
|
122
|
+
- Requires confirmation unless `-y` flag is used
|
|
123
|
+
|
|
124
|
+
**Example output:**
|
|
125
|
+
```bash
|
|
126
|
+
$ oasr registry prune
|
|
127
|
+
Checking 3 remote skill(s)...
|
|
128
|
+
↓ python-analyzer (checking GitHub...)
|
|
129
|
+
✓ python-analyzer (checked)
|
|
130
|
+
|
|
131
|
+
The following will be cleaned:
|
|
132
|
+
|
|
133
|
+
Skills with missing sources:
|
|
134
|
+
✗ old-skill (/path/to/missing)
|
|
135
|
+
|
|
136
|
+
Proceed with cleanup? [y/N] y
|
|
137
|
+
Removed skill: old-skill
|
|
138
|
+
|
|
139
|
+
Cleaned 1 skill(s), 0 manifest(s)
|
|
140
|
+
```
|
|
141
|
+
|
|
108
142
|
## Migration from v0.2.0
|
|
109
143
|
|
|
110
144
|
The v0.3.0 CLI taxonomy reorganizes commands under the `registry` subcommand:
|
|
@@ -117,3 +151,5 @@ The v0.3.0 CLI taxonomy reorganizes commands under the `registry` subcommand:
|
|
|
117
151
|
| `oasr status` | `oasr registry -v` |
|
|
118
152
|
| `oasr sync` (manifest validation) | `oasr registry` |
|
|
119
153
|
| `oasr sync --update` (remote sync) | `oasr registry sync` |
|
|
154
|
+
|
|
155
|
+
**v0.4.1 update:** `oasr clean` → `oasr registry prune`
|