@event4u/agent-config 5.6.1 → 5.8.0
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.
- package/.agent-src/commands/agent-handoff.md +1 -1
- package/.agent-src/commands/agent-status.md +1 -1
- package/.agent-src/commands/agents/audit.md +1 -1
- package/.agent-src/commands/agents/init.md +1 -1
- package/.agent-src/commands/agents/user/accept.md +3 -3
- package/.agent-src/commands/agents/user/init.md +4 -4
- package/.agent-src/commands/agents/user/show.md +3 -3
- package/.agent-src/commands/agents/user/update.md +3 -3
- package/.agent-src/commands/agents/user.md +1 -1
- package/.agent-src/commands/agents.md +1 -1
- package/.agent-src/commands/analytics/prune.md +1 -1
- package/.agent-src/commands/analytics/show.md +1 -1
- package/.agent-src/commands/analytics.md +1 -1
- package/.agent-src/commands/bug-fix.md +1 -1
- package/.agent-src/commands/challenge-me.md +1 -1
- package/.agent-src/commands/chat-history/import.md +1 -1
- package/.agent-src/commands/chat-history/learn.md +1 -1
- package/.agent-src/commands/chat-history/show.md +1 -1
- package/.agent-src/commands/chat-history.md +1 -1
- package/.agent-src/commands/check-current-md.md +1 -1
- package/.agent-src/commands/condense.md +1 -1
- package/.agent-src/commands/context.md +1 -1
- package/.agent-src/commands/cost-report.md +13 -8
- package/.agent-src/commands/council.md +3 -3
- package/.agent-src/commands/create-pr/description-only.md +1 -1
- package/.agent-src/commands/create-pr.md +1 -1
- package/.agent-src/commands/e2e-heal.md +1 -1
- package/.agent-src/commands/e2e-plan.md +1 -1
- package/.agent-src/commands/feature.md +1 -1
- package/.agent-src/commands/fix/ci.md +1 -1
- package/.agent-src/commands/fix/portability.md +1 -1
- package/.agent-src/commands/fix/pr-bot-comments.md +1 -1
- package/.agent-src/commands/fix/pr-comments.md +1 -1
- package/.agent-src/commands/fix/pr-developer-comments.md +1 -1
- package/.agent-src/commands/fix/refs.md +1 -1
- package/.agent-src/commands/fix/seeder.md +1 -1
- package/.agent-src/commands/fix.md +1 -1
- package/.agent-src/commands/judge.md +1 -1
- package/.agent-src/commands/knowledge/cross-repo.md +1 -1
- package/.agent-src/commands/knowledge/forget.md +1 -1
- package/.agent-src/commands/knowledge/ingest.md +1 -1
- package/.agent-src/commands/knowledge/list.md +1 -1
- package/.agent-src/commands/knowledge.md +1 -1
- package/.agent-src/commands/memory/add.md +1 -1
- package/.agent-src/commands/memory/learn-low-impact.md +1 -1
- package/.agent-src/commands/memory/load.md +1 -1
- package/.agent-src/commands/memory/mine-session.md +1 -1
- package/.agent-src/commands/memory/promote.md +1 -1
- package/.agent-src/commands/memory/propose.md +1 -1
- package/.agent-src/commands/memory.md +1 -1
- package/.agent-src/commands/mode.md +1 -1
- package/.agent-src/commands/optimize/agents-dir.md +1 -1
- package/.agent-src/commands/optimize/augmentignore.md +1 -1
- package/.agent-src/commands/optimize/rtk.md +1 -1
- package/.agent-src/commands/optimize/skills.md +1 -1
- package/.agent-src/commands/optimize.md +1 -1
- package/.agent-src/commands/orchestrate.md +1 -1
- package/.agent-src/commands/override/create.md +1 -1
- package/.agent-src/commands/override/manage.md +1 -1
- package/.agent-src/commands/override.md +1 -1
- package/.agent-src/commands/package-reset.md +1 -1
- package/.agent-src/commands/prediction-pool.md +234 -0
- package/.agent-src/commands/profile/activate.md +81 -0
- package/.agent-src/commands/profile/deactivate.md +68 -0
- package/.agent-src/commands/profile/show.md +70 -0
- package/.agent-src/commands/profile.md +68 -0
- package/.agent-src/commands/project-health.md +1 -1
- package/.agent-src/commands/quality-fix.md +1 -1
- package/.agent-src/commands/roadmap/process-full.md +1 -1
- package/.agent-src/commands/roadmap/process-phase.md +1 -1
- package/.agent-src/commands/roadmap/process-step.md +1 -1
- package/.agent-src/commands/roadmap.md +1 -1
- package/.agent-src/commands/set-cost-profile.md +9 -9
- package/.agent-src/commands/skill/preview.md +3 -3
- package/.agent-src/commands/skill.md +1 -1
- package/.agent-src/commands/skills/discover.md +1 -1
- package/.agent-src/commands/skills.md +1 -1
- package/.agent-src/commands/sync-agent-settings.md +3 -3
- package/.agent-src/commands/sync-gitignore/fix.md +1 -1
- package/.agent-src/commands/sync-gitignore.md +1 -1
- package/.agent-src/commands/update-form-request-messages.md +1 -1
- package/.agent-src/presets/README.md +1 -1
- package/.agent-src/profiles/README.md +1 -1
- package/.agent-src/rules/non-destructive-by-default.md +2 -1
- package/.agent-src/skills/check-refs/SKILL.md +1 -1
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +1 -1
- package/.agent-src/skills/git-workflow/SKILL.md +1 -1
- package/.agent-src/skills/jira-integration/SKILL.md +1 -1
- package/.agent-src/skills/markitdown/SKILL.md +1 -1
- package/.agent-src/skills/prediction-pool-optimizer/SKILL.md +314 -0
- package/.agent-src/skills/prediction-pool-optimizer/evals/triggers.json +20 -0
- package/.agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +175 -0
- package/.agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +109 -0
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
- package/.agent-src/skills/script-writing/SKILL.md +1 -1
- package/.agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -1
- package/.agent-src/templates/agent-settings.md +7 -7
- package/.agent-src/templates/agents/agent-project-settings.example.yml +2 -2
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +54 -6
- package/.agent-src/templates/scripts/work_engine/hook_bootstrap.py +1 -1
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +9 -7
- package/.agent-src/templates/scripts/work_engine/hooks/settings.py +9 -10
- package/.agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +17 -4
- package/.claude-plugin/marketplace.json +370 -364
- package/CHANGELOG.md +108 -0
- package/README.md +2 -2
- package/config/agent-settings.template.yml +11 -2
- package/config/discovery/packs.yml +11 -0
- package/config/discovery/session-profiles.yml +37 -0
- package/config/discovery/workspaces.yml +1 -1
- package/config/profiles/balanced.ini +1 -1
- package/config/profiles/full.ini +1 -1
- package/config/profiles/minimal.ini +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +254 -100
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -3
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +41 -6
- package/dist/discovery/trust-report.md +3 -3
- package/dist/discovery/workspaces.json +19 -6
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/server/io/substituteTemplate.js +3 -3
- package/dist/server/io/substituteTemplate.js.map +1 -1
- package/dist/server/routes/settings.js +2 -2
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/schemas/settings.js +4 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/ui/assets/{index-DVsyUMZe.js → index-5lFqAKL0.js} +2 -2
- package/dist/ui/assets/index-5lFqAKL0.js.map +1 -0
- package/dist/ui/index.html +1 -1
- package/docs/architecture/current-onboard-baseline.md +3 -3
- package/docs/architecture.md +2 -2
- package/docs/catalog.md +11 -5
- package/docs/contracts/adr-level-6-productization.md +1 -1
- package/docs/contracts/command-clusters.md +2 -0
- package/docs/contracts/config-presets.md +2 -2
- package/docs/contracts/cost-profile-defaults.md +5 -5
- package/docs/contracts/discovery-manifest.schema.json +1 -1
- package/docs/contracts/explain-trace.schema.json +3 -3
- package/docs/contracts/memory-visibility-v1.md +15 -7
- package/docs/contracts/profile-system.md +2 -2
- package/docs/contracts/session-profile-overlay.md +120 -0
- package/docs/contracts/settings-api.md +3 -3
- package/docs/contracts/value-report-schema.md +14 -1
- package/docs/customization.md +47 -5
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +47 -11
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +16 -2
- package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +1 -1
- package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +106 -0
- package/docs/decisions/ADR-037-cost-profile-untangle.md +117 -0
- package/docs/decisions/ADR-038-canonical-settings-path.md +66 -0
- package/docs/decisions/ADR-039-claude-skills-untracked.md +139 -0
- package/docs/decisions/ADR-rule-kernel-and-router.md +1 -1
- package/docs/decisions/INDEX.md +4 -0
- package/docs/development.md +12 -0
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/layered-settings.md +10 -4
- package/docs/installation.md +3 -3
- package/docs/setup/mcp-client-config.md +1 -1
- package/docs/skills-catalog.md +5 -1
- package/docs/value.md +9 -7
- package/docs/wizard.md +1 -1
- package/llms.txt +4 -0
- package/package.json +1 -1
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_cli/cmd_doctor.py +3 -2
- package/scripts/_cli/cmd_explain.py +1 -1
- package/scripts/_cli/cmd_versions.py +2 -2
- package/scripts/_cli/explain_last/inputs.py +11 -8
- package/scripts/_cli/explain_last/sections/inputs.py +1 -1
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/_lib/agent_settings.py +54 -6
- package/scripts/_lib/agent_src.py +30 -0
- package/scripts/_lib/value_ladder.py +99 -2
- package/scripts/_lib/value_report.py +30 -16
- package/scripts/ai_council/modes.py +1 -1
- package/scripts/ai_council/session.py +5 -1
- package/scripts/audit_command_surface.py +7 -1
- package/scripts/audit_initial_context.py +26 -2
- package/scripts/check_gate_paths.py +117 -0
- package/scripts/check_references.py +51 -2
- package/scripts/check_skill_requires.py +143 -0
- package/scripts/check_test_coverage_diff.py +180 -0
- package/scripts/compile_router.py +5 -1
- package/scripts/condense.py +92 -4
- package/scripts/config/session_profiles.py +492 -0
- package/scripts/council_cli.py +5 -1
- package/scripts/first-run.sh +11 -11
- package/scripts/hook_manifest.yaml +15 -7
- package/scripts/hooks/dispatch_hook.py +8 -0
- package/scripts/install +14 -1
- package/scripts/install-hooks.sh +2 -1
- package/scripts/install.py +203 -433
- package/scripts/install_anthropic_key.sh +1 -1
- package/scripts/install_openai_key.sh +1 -1
- package/scripts/inventory_abstraction_budget.py +6 -1
- package/scripts/lint_agents_md.py +11 -4
- package/scripts/lint_discovery_vocabulary.py +5 -5
- package/scripts/lint_hook_concern_budget.py +5 -1
- package/scripts/lint_marketplace.py +18 -7
- package/scripts/lint_roadmap_ci_steps.py +5 -1
- package/scripts/lint_roadmap_complexity.py +5 -1
- package/scripts/lint_value_dashboard.py +1 -1
- package/scripts/mcp_server/prompts.py +5 -1
- package/scripts/prediction-pool/adapters/_schema.md +42 -0
- package/scripts/prediction-pool/adapters/kicktipp.yml +23 -0
- package/scripts/prediction-pool/poisson_sim.py +167 -0
- package/scripts/prediction-pool/pool_winsim.py +236 -0
- package/scripts/prediction-pool/score_ev.py +188 -0
- package/scripts/profile_staleness_hook.py +69 -0
- package/scripts/render_value_md.py +1 -0
- package/scripts/roadmap_progress_hook.py +56 -6
- package/scripts/schemas/agent-settings.schema.json +77 -0
- package/scripts/schemas/skill.schema.json +7 -0
- package/scripts/smoke_quickstart.py +7 -6
- package/scripts/sync_agent_settings.py +12 -5
- package/scripts/validate_agent_settings.py +124 -0
- package/scripts/validate_decision_engine.py +5 -1
- package/templates/minimal/.agent-settings.yml +1 -1
- package/dist/ui/assets/index-DVsyUMZe.js.map +0 -1
- package/scripts/measure_roadmap_trajectory.py +0 -112
- package/scripts/verify_roadmap_closure.py +0 -327
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: inherit
|
|
3
|
+
name: prediction-pool
|
|
4
|
+
tier: 2
|
|
5
|
+
description: "Fill a prediction pool (kicktipp, football/basketball WM): optimize expected points under the rules, enter tips via Playwright. Triggers 'Tippspiel', 'kicktipp', 'predict the pool'."
|
|
6
|
+
skills: [prediction-pool-optimizer]
|
|
7
|
+
suggestion:
|
|
8
|
+
eligible: true
|
|
9
|
+
trigger_description: "fill my Tippspiel, kicktipp tips, predict the pool, betting/prediction pool predictions, optimize my pool tips for an event"
|
|
10
|
+
trigger_context: "user wants tips for a prediction pool (kicktipp etc.) for an upcoming sports event and wants them computed and/or entered into the pool's web UI"
|
|
11
|
+
workspaces:
|
|
12
|
+
- small-business
|
|
13
|
+
packs:
|
|
14
|
+
- fun
|
|
15
|
+
lifecycle: experimental
|
|
16
|
+
trust:
|
|
17
|
+
level: experimental
|
|
18
|
+
install:
|
|
19
|
+
default: false
|
|
20
|
+
removable: true
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# /prediction-pool
|
|
24
|
+
|
|
25
|
+
`/prediction-pool [<event>] [--pool-url <url>] [--council off|event|match] [--submit] [--fresh|--continue]`
|
|
26
|
+
|
|
27
|
+
Fills out a **prediction pool** (kicktipp-style company pools: football
|
|
28
|
+
WM, basketball WM, …) by optimizing for the **maximum expected points
|
|
29
|
+
under the pool's actual scoring rules** — not for the most likely match
|
|
30
|
+
outcome. Researches market odds, computes expected-value tips, presents a
|
|
31
|
+
table for approval, then enters them into the pool's web UI via Playwright.
|
|
32
|
+
|
|
33
|
+
The cognition lives in the [`prediction-pool-optimizer`](../skills/prediction-pool-optimizer/SKILL.md)
|
|
34
|
+
skill (rules → market odds → expected value → participant field → tip).
|
|
35
|
+
This command is the orchestrator: event selection, the persisted analysis,
|
|
36
|
+
the optional AI-council pass, the Playwright entry, and the human gates.
|
|
37
|
+
|
|
38
|
+
**Hard gates (always):**
|
|
39
|
+
- **You log in.** The agent opens the page headful; it never reads,
|
|
40
|
+
stores, or types your credentials.
|
|
41
|
+
- **The agent never submits.** It fills the candidate tips and stops —
|
|
42
|
+
*you* submit, unless you passed `--submit` (or say so this turn).
|
|
43
|
+
- **Not betting or financial advice.** Decision support for a game; you
|
|
44
|
+
approve and submit.
|
|
45
|
+
|
|
46
|
+
**Block on ambiguity:** an unresolvable event, a missing pool URL with no
|
|
47
|
+
saved analysis, or contradictory flags (`--fresh` and `--continue`,
|
|
48
|
+
`--council` value not in `off|event|match`) halts with a precise message —
|
|
49
|
+
no silent best-guess.
|
|
50
|
+
|
|
51
|
+
## Inputs
|
|
52
|
+
|
|
53
|
+
| Input | Required | Meaning |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| `<event>` | no | The event to tip (e.g. "Football WM 2026"). Omitted → the command proposes 1–3 upcoming events + free input (Step 1). |
|
|
56
|
+
| `--pool-url <url>` | once per event | The pool's tip page. Saved into the per-event analysis; reused on later runs. |
|
|
57
|
+
| `--council off\|event\|match` | no | AI-council depth for the analysis. Default `off`; the command offers it at Step 4. `event` = one pass over the whole sheet; `match` = per-match (costlier). |
|
|
58
|
+
| `--submit` | no | Pre-authorize the agent to submit after entry. Default: never submit. |
|
|
59
|
+
| `--fresh` / `--continue` | no | Force a new analysis vs. build on the saved one (Step 2). Default: ask. |
|
|
60
|
+
|
|
61
|
+
## Steps
|
|
62
|
+
|
|
63
|
+
### 1. Resolve the event (block on ambiguity)
|
|
64
|
+
|
|
65
|
+
- `<event>` supplied → use it; derive a slug (`football-wm-2026`).
|
|
66
|
+
- **Omitted → propose, then stop and wait.** Name 1–3 *upcoming* events
|
|
67
|
+
(use the current date; research what is imminent) and offer free input:
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
> Which event should I generate tips for?
|
|
71
|
+
>
|
|
72
|
+
> 1. <imminent event A>
|
|
73
|
+
> 2. <imminent event B>
|
|
74
|
+
> 3. <imminent event C>
|
|
75
|
+
> 4. Something else — name it
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 2. Resolve the per-event analysis (state ground-truth)
|
|
79
|
+
|
|
80
|
+
Look for `agents/tmp/prediction-pool/<slug>.md`.
|
|
81
|
+
|
|
82
|
+
- **None →** start a new analysis (created at Step 9, never before).
|
|
83
|
+
- **Exists →** read it. Then:
|
|
84
|
+
- It was **edited externally** since the last run (mtime newer than the
|
|
85
|
+
last `## Run <ts>` header, or it no longer parses) → surface that and
|
|
86
|
+
ask **merge / overwrite / abort** — never silently overwrite manual edits.
|
|
87
|
+
- Otherwise ask **build on it** (`--continue`) or **start fresh**
|
|
88
|
+
(`--fresh`); the flags pre-answer this for non-interactive runs.
|
|
89
|
+
|
|
90
|
+
The analysis holds the pool URL, the parsed rules, the current tip state,
|
|
91
|
+
and standing notes — so re-tuning later is fast.
|
|
92
|
+
|
|
93
|
+
### 3. Read the pool rules FIRST
|
|
94
|
+
|
|
95
|
+
Resolve the pool URL (`--pool-url` → saved analysis → ask). Then run the
|
|
96
|
+
optimizer skill's **rules pass** against the pool's rule page: exact result
|
|
97
|
+
vs. goal-difference vs. tendency points, bonus questions, joker rules,
|
|
98
|
+
quote/rarity scoring, special rules, deadlines, strategy limits. **Enumerate
|
|
99
|
+
every open question as an explicit checklist** (scores AND every bonus /
|
|
100
|
+
award / special question) — that list is the run's contract; each entry must
|
|
101
|
+
reach an answer. **No tips before the rules are understood** — the whole
|
|
102
|
+
strategy depends on them.
|
|
103
|
+
|
|
104
|
+
### 4. Run the optimizer + offer the AI-council pass
|
|
105
|
+
|
|
106
|
+
Run [`prediction-pool-optimizer`](../skills/prediction-pool-optimizer/SKILL.md),
|
|
107
|
+
adapted to the event's sport (football / basketball / …): a **de-vigged
|
|
108
|
+
consensus across the 5–10 biggest publicly-viewable bookmakers**
|
|
109
|
+
(sharp-weighted, never one portal) as the primary signal → expected value
|
|
110
|
+
under the Step-3 rules → participant field → tip. **Answer every entry on the
|
|
111
|
+
Step-3 checklist** — scores AND every bonus / award / special question (top
|
|
112
|
+
scorer, "team of the top scorer", group winners, most cards …); none blank.
|
|
113
|
+
Tournament/outright/award probabilities come from real markets **or** the
|
|
114
|
+
skill's executed Poisson helper — **never** a hallucinated "I simulated
|
|
115
|
+
10,000 runs".
|
|
116
|
+
|
|
117
|
+
**Offer the AI-council pass (default off).** Unless `--council` is set,
|
|
118
|
+
ask once:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
> Run the AI council over the analysis for a sharper second opinion?
|
|
122
|
+
>
|
|
123
|
+
> 1. No — use my analysis as is
|
|
124
|
+
> 2. Yes, per event — one council pass over the whole tip sheet
|
|
125
|
+
> 3. Yes, per match — each match judged separately (more accurate, costlier)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
When on, run **graduated** to control cost: a cheap single-model pass
|
|
129
|
+
flags the riskiest matches first, then the full council reviews only the
|
|
130
|
+
flagged matches (`event`) or every match (`match`). Fold the council's
|
|
131
|
+
verdicts back into the table before Step 5. Council spend always asks
|
|
132
|
+
first per [`ai-council`](../../../core/.agent-src.uncondensed/skills/ai-council/SKILL.md).
|
|
133
|
+
|
|
134
|
+
### 5. Output the approval table — ask whether & where to enter
|
|
135
|
+
|
|
136
|
+
Present the tips exactly as they would be entered, then **wait**:
|
|
137
|
+
|
|
138
|
+
| Match | Tip | Prob / EV | Risk | 1-line reason | Books used |
|
|
139
|
+
|---|---|---|---|---|---|
|
|
140
|
+
|
|
141
|
+
Follow with group standings, the full bracket, **and a bonus/special-answer
|
|
142
|
+
table with one row per open question from the Step-3 checklist — every entry
|
|
143
|
+
answered, none blank**:
|
|
144
|
+
|
|
145
|
+
| Question | Answer | Prob / EV | Risk | 1-line reason | Source (market / model) |
|
|
146
|
+
|---|---|---|---|---|---|
|
|
147
|
+
|
|
148
|
+
Then ask **whether to enter** and **into which pool** (the saved URL, a
|
|
149
|
+
different one, or none). Do **not** write the analysis yet (Step 9) — tips
|
|
150
|
+
are not yet confirmed.
|
|
151
|
+
|
|
152
|
+
### 6. Enter via Playwright (you log in)
|
|
153
|
+
|
|
154
|
+
Open the pool page **headful**. **You log in yourself** — the agent waits
|
|
155
|
+
and never touches credentials. Resolve the platform adapter:
|
|
156
|
+
|
|
157
|
+
- **Known platform** (e.g. kicktipp) → load the declarative selector map
|
|
158
|
+
`scripts/prediction-pool/adapters/<platform>.yml` (field → CSS selector). The
|
|
159
|
+
generic, trusted driver fills the inputs from the map — the adapter is
|
|
160
|
+
**data, not code**.
|
|
161
|
+
- **Unknown platform → vision-assisted synthesis.** Screenshot the page,
|
|
162
|
+
identify the tip inputs, **highlight them** and ask you to confirm the
|
|
163
|
+
mapping, then fill from the confirmed ephemeral map. No code is run from
|
|
164
|
+
an untrusted source.
|
|
165
|
+
|
|
166
|
+
### 7. Stop before submit
|
|
167
|
+
|
|
168
|
+
Fill the candidate results and **stop**. *You* press submit. The agent
|
|
169
|
+
submits only if `--submit` was passed or you authorize it **this turn**
|
|
170
|
+
(mirrors [`non-destructive-by-default`](../../../core/.agent-src.uncondensed/rules/non-destructive-by-default.md)).
|
|
171
|
+
|
|
172
|
+
### 8. Offer a second pool
|
|
173
|
+
|
|
174
|
+
Ask whether to also enter the same (or re-optimized) tips on another
|
|
175
|
+
pool / site. If yes, loop Steps 3–7 for that pool.
|
|
176
|
+
|
|
177
|
+
### 9. Persist / extend the analysis (only now)
|
|
178
|
+
|
|
179
|
+
Append a run-stamped section to `agents/tmp/prediction-pool/<slug>.md`: pool
|
|
180
|
+
URL(s), parsed rules, the entered tips with state `entered, not submitted`
|
|
181
|
+
(or `submitted` if Step 7 submitted), council verdicts if any, and
|
|
182
|
+
standing notes. Append-only — earlier runs stay as history. This is the
|
|
183
|
+
base the next run reads (Step 2).
|
|
184
|
+
|
|
185
|
+
### 10. New-platform adapter — offer to contribute (gated)
|
|
186
|
+
|
|
187
|
+
If Step 6 synthesized a new selector map, offer to (a) save it locally and
|
|
188
|
+
(b) open a **PR** adding `scripts/prediction-pool/adapters/<platform>.yml` so
|
|
189
|
+
coverage grows for everyone. The PR carries **declarative selector data
|
|
190
|
+
only** — never executable code — and only on explicit permission (no
|
|
191
|
+
auto-commit, no auto-push).
|
|
192
|
+
|
|
193
|
+
### 11. Report
|
|
194
|
+
|
|
195
|
+
Print: event + slug, pool URL(s), rules summary, council depth used,
|
|
196
|
+
matches tipped, entry result (`entered, not submitted` | `submitted`),
|
|
197
|
+
adapter (`<platform>.yml` | `vision-synthesized` | `pr-offered`), analysis
|
|
198
|
+
file path. No commit. No push.
|
|
199
|
+
|
|
200
|
+
## Rules
|
|
201
|
+
|
|
202
|
+
- **You log in; the agent never handles credentials.** Headful only.
|
|
203
|
+
- **The agent never submits** unless `--submit` or this-turn authorization.
|
|
204
|
+
- **Rules first.** No tips before the pool's scoring is parsed.
|
|
205
|
+
- **Answer every open question.** Scores AND every bonus / award / special
|
|
206
|
+
question; a run that ships scorelines only and leaves bonus questions blank
|
|
207
|
+
is incomplete.
|
|
208
|
+
- **Consensus odds, not one portal.** Build the base from a de-vigged,
|
|
209
|
+
sharp-weighted consensus across the 5–10 biggest viewable books — never
|
|
210
|
+
mirror a single bookmaker.
|
|
211
|
+
- **No hallucinated simulation.** Outright odds or executed Poisson code —
|
|
212
|
+
never a claimed-but-unrun Monte-Carlo.
|
|
213
|
+
- **Analysis is written only after tips are confirmed** (Step 9), never
|
|
214
|
+
before — and never silently over an externally edited file.
|
|
215
|
+
- **Adapters are declarative data, not code.** Unknown platforms use the
|
|
216
|
+
ephemeral vision path; contributed adapters are selector maps via PR.
|
|
217
|
+
- **AI council is opt-in, default off**, and always asks before spending.
|
|
218
|
+
- **Not betting or financial advice.** A fun tool; you decide and submit.
|
|
219
|
+
- **No commit, no push, no PR** without explicit permission (the adapter
|
|
220
|
+
PR offer is gated).
|
|
221
|
+
- **Kill-switch.** Ships `lifecycle: experimental` · `install.default:
|
|
222
|
+
false`. Disable = remove the command + `prediction-pool-optimizer` skill, then
|
|
223
|
+
regenerate the projected tool trees.
|
|
224
|
+
|
|
225
|
+
## See also
|
|
226
|
+
|
|
227
|
+
- [`prediction-pool-optimizer`](../skills/prediction-pool-optimizer/SKILL.md) — the
|
|
228
|
+
rules → odds → EV → field → tip cognition.
|
|
229
|
+
- [`scripts/prediction-pool/adapters/_schema.md`](../../../scripts/prediction-pool/adapters/_schema.md) —
|
|
230
|
+
the declarative adapter data contract (for PR contributions).
|
|
231
|
+
- [`ai-council`](../../../core/.agent-src.uncondensed/skills/ai-council/SKILL.md) —
|
|
232
|
+
the optional second-opinion pass (Step 4).
|
|
233
|
+
- [`playwright-architect`](../../../core/.agent-src.uncondensed/skills/playwright-architect/SKILL.md) —
|
|
234
|
+
browser-automation patterns for the entry step.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: medium
|
|
3
|
+
name: profile:activate
|
|
4
|
+
tier: 2
|
|
5
|
+
cluster: profile
|
|
6
|
+
sub: activate
|
|
7
|
+
description: Activate a session profile — surface only the named profile/pack closure plus core artefacts, no persistence
|
|
8
|
+
suggestion:
|
|
9
|
+
eligible: true
|
|
10
|
+
trigger_description: "activate the laravel/po/finance profile for this session, switch my surface to X, only show me X commands"
|
|
11
|
+
trigger_context: "user wants the surfaced commands/skills narrowed to one audience for the current session"
|
|
12
|
+
workspaces:
|
|
13
|
+
- agent-config-maintainer
|
|
14
|
+
packs:
|
|
15
|
+
- meta
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# /profile activate
|
|
19
|
+
|
|
20
|
+
Activate one or more session profiles / packs. Writes the expanded
|
|
21
|
+
`runtime.active_packs` overlay and re-biases the surfaced set for the rest
|
|
22
|
+
of the session.
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
### 1. Resolve + write the overlay
|
|
27
|
+
|
|
28
|
+
Run the helper (it resolves aliases ↔ pack ids, fails fast on a
|
|
29
|
+
not-installed pack, expands the `requires_hint` closure, and writes the
|
|
30
|
+
overlay **atomically**):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python3 -m scripts.config.session_profiles activate <name…> --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- **Exit 0** → parse the JSON: `active_packs`, `closure_added`, `notes`.
|
|
37
|
+
- **Exit 2** (`error:` on stderr) → the token is unknown or the pack is
|
|
38
|
+
not installed. Surface the error verbatim and stop — do **not** write a
|
|
39
|
+
partial overlay. Suggest `/profile show` or naming an installed pack.
|
|
40
|
+
|
|
41
|
+
### 2. Confirm the switch
|
|
42
|
+
|
|
43
|
+
Announce, using the helper's output:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
> profile active: {active_packs}
|
|
47
|
+
> surfaced: {N} commands, {M} skills ({H} hidden behind inactive packs)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Get the counts from `python3 -m scripts.config.session_profiles show --json`.
|
|
51
|
+
|
|
52
|
+
### 3. Re-bias the surface for the rest of the session
|
|
53
|
+
|
|
54
|
+
From now until `/profile deactivate` (or a new session), when the user asks
|
|
55
|
+
"what can I do" / you list commands or skills, surface **only** the active
|
|
56
|
+
set. Compute it with:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
python3 -m scripts.config.session_profiles surface --json
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`shown` = surface these; `hidden` = do not list them proactively. Core /
|
|
63
|
+
unscoped artefacts are always in `shown`.
|
|
64
|
+
|
|
65
|
+
**Execution is NOT gated.** If the user invokes a command/skill that is in
|
|
66
|
+
`hidden`, run it anyway and prepend one line:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
> note: `{name}` is from an inactive pack ({packs}); `/profile activate {pack}` to surface it.
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Gotchas
|
|
73
|
+
|
|
74
|
+
- Never write to `.agent-settings.yml` — the overlay is local-only.
|
|
75
|
+
- Multiple names union: `/profile activate laravel po`.
|
|
76
|
+
- A corrupt overlay is ignored (fail-open) → re-run activate to repair it.
|
|
77
|
+
|
|
78
|
+
## See also
|
|
79
|
+
|
|
80
|
+
- [`/profile show`](show.md) · [`/profile deactivate`](deactivate.md)
|
|
81
|
+
- [`docs/contracts/session-profile-overlay.md`](../../../docs/contracts/session-profile-overlay.md)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: medium
|
|
3
|
+
name: profile:deactivate
|
|
4
|
+
tier: 2
|
|
5
|
+
cluster: profile
|
|
6
|
+
sub: deactivate
|
|
7
|
+
description: Deactivate the session profile — clear the overlay (or drop named packs) so the full surface returns
|
|
8
|
+
suggestion:
|
|
9
|
+
eligible: true
|
|
10
|
+
trigger_description: "deactivate the profile, clear my session profile, show everything again, reset the surface"
|
|
11
|
+
trigger_context: "user wants the full command/skill surface back after a profile was active"
|
|
12
|
+
workspaces:
|
|
13
|
+
- agent-config-maintainer
|
|
14
|
+
packs:
|
|
15
|
+
- meta
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# /profile deactivate
|
|
19
|
+
|
|
20
|
+
Clear the session-profile overlay (or remove only named packs). This is the
|
|
21
|
+
**explicit** deactivation trigger locked in Phase 0 (option a) — there is
|
|
22
|
+
no silent session reset.
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
### 1. Clear or narrow
|
|
27
|
+
|
|
28
|
+
- `/profile deactivate` (no args) → clear the whole overlay:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
python3 -m scripts.config.session_profiles deactivate --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- `/profile deactivate <name…>` → remove only the **named packs** from the
|
|
35
|
+
active set (never their closure), so a shared dependency survives:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
python3 -m scripts.config.session_profiles deactivate <name…> --json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Parse `active_packs` from the JSON.
|
|
42
|
+
|
|
43
|
+
### 2. Confirm
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
> profile cleared — full surface restored.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
or, when packs remain:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
> active now: {active_packs} — full surface for everything else.
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. Restore the full surface
|
|
56
|
+
|
|
57
|
+
Resume surfacing every command/skill from this point in the session.
|
|
58
|
+
|
|
59
|
+
## Gotchas
|
|
60
|
+
|
|
61
|
+
- Deactivation is idempotent — clearing an empty overlay is a no-op.
|
|
62
|
+
- Only named packs are removed: `/profile deactivate laravel` leaves `php`
|
|
63
|
+
and `engineering-base` active (they are their own entries in the overlay).
|
|
64
|
+
Removing a pack only ever widens the surface, never hides something.
|
|
65
|
+
|
|
66
|
+
## See also
|
|
67
|
+
|
|
68
|
+
- [`/profile activate`](activate.md) · [`/profile show`](show.md)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: medium
|
|
3
|
+
name: profile:show
|
|
4
|
+
tier: 2
|
|
5
|
+
cluster: profile
|
|
6
|
+
sub: show
|
|
7
|
+
description: Show the active session profile — active packs and surfaced/hidden command+skill counts (observability surface)
|
|
8
|
+
suggestion:
|
|
9
|
+
eligible: true
|
|
10
|
+
trigger_description: "show my active profile, which packs are active, what's surfaced this session, profile status"
|
|
11
|
+
trigger_context: "user wants to see the current session-profile state and what it hides"
|
|
12
|
+
workspaces:
|
|
13
|
+
- agent-config-maintainer
|
|
14
|
+
packs:
|
|
15
|
+
- meta
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# /profile show
|
|
19
|
+
|
|
20
|
+
Observability surface for the session-profile overlay — the diagnostic the
|
|
21
|
+
council required so a "wrong commands in /help" symptom is one command away
|
|
22
|
+
from its cause.
|
|
23
|
+
|
|
24
|
+
## Instructions
|
|
25
|
+
|
|
26
|
+
### 1. Read the state
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
python3 -m scripts.config.session_profiles show --json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Fields: `active_packs`, `commands_shown`, `skills_shown`, `hidden_total`.
|
|
33
|
+
|
|
34
|
+
### 2. Report
|
|
35
|
+
|
|
36
|
+
- **No overlay** (`active_packs` empty):
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
> no profile active — full surface (everything shown).
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- **Overlay active:**
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
> active packs: {active_packs}
|
|
46
|
+
> surfaced: {commands_shown} commands, {skills_shown} skills
|
|
47
|
+
> hidden behind inactive packs: {hidden_total}
|
|
48
|
+
> clear with /profile deactivate
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 3. (Optional) list the split
|
|
52
|
+
|
|
53
|
+
If the user asks *which* artefacts are hidden, run:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
python3 -m scripts.config.session_profiles surface --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
and list `hidden[]` (name + packs). Keep it scannable; group by pack if long.
|
|
60
|
+
|
|
61
|
+
## Gotchas
|
|
62
|
+
|
|
63
|
+
- `show` never writes — pure read, safe to run anytime.
|
|
64
|
+
- A corrupt overlay reads as empty (fail-open); if `show` reports "no
|
|
65
|
+
profile" right after an `activate`, the overlay file is malformed —
|
|
66
|
+
re-run `/profile activate`.
|
|
67
|
+
|
|
68
|
+
## See also
|
|
69
|
+
|
|
70
|
+
- [`/profile activate`](activate.md) · [`/profile deactivate`](deactivate.md)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
model_tier: medium
|
|
3
|
+
name: profile
|
|
4
|
+
tier: 2
|
|
5
|
+
description: Session-profile orchestrator — activate / deactivate / show the active packs for this session (recommendation-bias surface filter, no persistence)
|
|
6
|
+
cluster: profile
|
|
7
|
+
type: orchestrator
|
|
8
|
+
suggestion:
|
|
9
|
+
eligible: true
|
|
10
|
+
trigger_description: "activate a profile for this session, switch to the laravel/po/finance surface, show which packs are active, deactivate the profile"
|
|
11
|
+
trigger_context: "user wants to narrow the surfaced commands/skills to one audience for the current session without changing committed config"
|
|
12
|
+
workspaces:
|
|
13
|
+
- agent-config-maintainer
|
|
14
|
+
packs:
|
|
15
|
+
- meta
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# /profile
|
|
19
|
+
|
|
20
|
+
Top-level orchestrator for the `/profile` family. Activates a **session
|
|
21
|
+
profile** — an ephemeral `runtime.active_packs` overlay that biases which
|
|
22
|
+
commands/skills are *surfaced* this session, without persisting anything
|
|
23
|
+
to committed config.
|
|
24
|
+
|
|
25
|
+
The overlay is a runtime modulation of the existing `pack` axis, **not** a
|
|
26
|
+
fifth axis (ADR-010 addendum, 2026-06-02). It is written to
|
|
27
|
+
`.agent-settings.local.yml` (in `agents/settings/`, gitignored, deepest
|
|
28
|
+
layer), never the committed `.agent-settings.yml`.
|
|
29
|
+
|
|
30
|
+
## Sub-commands
|
|
31
|
+
|
|
32
|
+
| Sub-command | Routes to | Purpose |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `/profile activate <name…>` | `commands/profile/activate.md` | Surface only the named profile/pack closure + core artefacts |
|
|
35
|
+
| `/profile deactivate [name…]` | `commands/profile/deactivate.md` | Clear the overlay (or drop named packs) → full surface returns |
|
|
36
|
+
| `/profile show` | `commands/profile/show.md` | Active packs + surfaced/hidden counts (observability) |
|
|
37
|
+
|
|
38
|
+
`<name>` is a session-profile alias (`developer`, `po`, `finance`, `gtm`,
|
|
39
|
+
`content`) from `config/discovery/session-profiles.yml` **or** a raw pack
|
|
40
|
+
id from `config/discovery/packs.yml` (`laravel`, `php`, …). Multiple names
|
|
41
|
+
union their closures: `/profile activate laravel po`.
|
|
42
|
+
|
|
43
|
+
## Key facts (locked in Phase 0)
|
|
44
|
+
|
|
45
|
+
- **Recommendation-bias only.** Activation filters the *surfaced* set
|
|
46
|
+
(`/help` + `<available_skills>`); execution is **never gated** — an
|
|
47
|
+
inactive-pack command still runs, with a one-line notice.
|
|
48
|
+
- **Explicit deactivation.** The overlay survives an IDE restart; clear it
|
|
49
|
+
with `/profile deactivate`. A new session emits a staleness *notice*
|
|
50
|
+
(never a silent reset — the registry-refresh Catch-22, see
|
|
51
|
+
`agents/settings/contexts/session-host-capability-audit.md`).
|
|
52
|
+
- **Fail-open.** A corrupt overlay is ignored → the full surface returns.
|
|
53
|
+
- **Kill-switch.** Delete `runtime.active_packs` from the local file (or
|
|
54
|
+
the file itself) to reset.
|
|
55
|
+
|
|
56
|
+
## Dispatch
|
|
57
|
+
|
|
58
|
+
1. Parse `/profile <sub-command> [args]`.
|
|
59
|
+
2. Look up the sub-command above; load that file and follow its
|
|
60
|
+
`## Instructions` verbatim with the remaining args.
|
|
61
|
+
3. Bare `/profile` (no sub-command) → run `/profile show`.
|
|
62
|
+
4. Unknown sub-command → print the table and ask which the user meant.
|
|
63
|
+
|
|
64
|
+
## See also
|
|
65
|
+
|
|
66
|
+
- [`mode`](mode.md) — the persist-to-disk precedent this command deliberately avoids.
|
|
67
|
+
- [`docs/decisions/ADR-010-profile-pack-preset-boundary.md`](../../docs/decisions/ADR-010-profile-pack-preset-boundary.md) — axis boundary + overlay addendum.
|
|
68
|
+
- [`docs/contracts/session-profile-overlay.md`](../docs/contracts/session-profile-overlay.md) — overlay schema + surface-filter contract.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
model_tier:
|
|
2
|
+
model_tier: medium
|
|
3
3
|
name: set-cost-profile
|
|
4
4
|
tier: 1
|
|
5
|
-
description: Change the
|
|
5
|
+
description: Change the rule_loading_tier in .agent-settings.yml — shows each profile's meaning and applies the selection
|
|
6
6
|
skills: [file-editor]
|
|
7
7
|
suggestion:
|
|
8
8
|
eligible: false
|
|
@@ -17,7 +17,7 @@ packs:
|
|
|
17
17
|
|
|
18
18
|
# /set-cost-profile
|
|
19
19
|
|
|
20
|
-
Changes `
|
|
20
|
+
Changes `rule_loading_tier` in `.agent-settings.yml`. Four profiles are defined in
|
|
21
21
|
the [`agent-settings` template](../templates/agent-settings.md#cost-profiles):
|
|
22
22
|
|
|
23
23
|
- `minimal` · `balanced` · `full` · `custom`
|
|
@@ -32,7 +32,7 @@ the [`agent-settings` template](../templates/agent-settings.md#cost-profiles):
|
|
|
32
32
|
directly or ask the agent — the merge rules live in
|
|
33
33
|
[`layered-settings`](../docs/guidelines/agent-infra/layered-settings.md#section-aware-merge-rules).
|
|
34
34
|
- For role modes use [`/mode`](mode.md) — different concept (sets
|
|
35
|
-
`roles.active_role`, not `
|
|
35
|
+
`roles.active_role`, not `rule_loading_tier`).
|
|
36
36
|
|
|
37
37
|
## Steps
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ Profile names are case-insensitive on input; the file value stays lowercase.
|
|
|
49
49
|
Read `.agent-settings.yml`. If missing, tell the user to run
|
|
50
50
|
`scripts/install` first and stop — do not create the file here.
|
|
51
51
|
|
|
52
|
-
Extract the current `
|
|
52
|
+
Extract the current `rule_loading_tier` value.
|
|
53
53
|
|
|
54
54
|
### 3. Load profile descriptions
|
|
55
55
|
|
|
@@ -63,7 +63,7 @@ Render the current value and present numbered choices with the hint text
|
|
|
63
63
|
extracted in step 3:
|
|
64
64
|
|
|
65
65
|
```
|
|
66
|
-
> Current:
|
|
66
|
+
> Current: rule_loading_tier = {current}
|
|
67
67
|
>
|
|
68
68
|
> 1. minimal — {hint from template}
|
|
69
69
|
> 2. balanced — {hint from template}
|
|
@@ -77,7 +77,7 @@ value directly — still echo the old → new line in step 6.
|
|
|
77
77
|
|
|
78
78
|
### 5. Write the value
|
|
79
79
|
|
|
80
|
-
Update `
|
|
80
|
+
Update `rule_loading_tier` in `.agent-settings.yml` using the
|
|
81
81
|
[section-aware merge rules](../docs/guidelines/agent-infra/layered-settings.md#section-aware-merge-rules)
|
|
82
82
|
(preserve comments, preserve key order, touch only the changed field).
|
|
83
83
|
|
|
@@ -86,7 +86,7 @@ If the user picked "Keep current", do nothing and stop.
|
|
|
86
86
|
### 6. Confirm
|
|
87
87
|
|
|
88
88
|
```
|
|
89
|
-
>
|
|
89
|
+
> rule_loading_tier: {old} → {new}
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
If the new profile activates a surface the user hasn't used before
|
|
@@ -106,7 +106,7 @@ steps here, that's the docs' job.
|
|
|
106
106
|
## Cloud Behavior
|
|
107
107
|
|
|
108
108
|
On cloud surfaces (Claude.ai Web, Skills API) this command is **fully inert** —
|
|
109
|
-
there is no `.agent-settings.yml` to write and no `
|
|
109
|
+
there is no `.agent-settings.yml` to write and no `rule_loading_tier` toggle to
|
|
110
110
|
flip. Cost behaviour on those surfaces is governed by the platform itself.
|
|
111
111
|
|
|
112
112
|
## See also
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
model_tier:
|
|
2
|
+
model_tier: medium
|
|
3
3
|
name: skill:preview
|
|
4
4
|
tier: 2
|
|
5
5
|
cluster: skill
|
|
@@ -46,8 +46,8 @@ plain-language summary. `--format json` is machine-readable.
|
|
|
46
46
|
|
|
47
47
|
### 3. Present the summary
|
|
48
48
|
|
|
49
|
-
Show the plain-language preview: the skill's execution type (a manual
|
|
50
|
-
renders **"instructional only — no automatic execution"**; an assisted
|
|
49
|
+
Show the plain-language preview: the skill's execution type (a `manual` skill
|
|
50
|
+
renders **"instructional only — no automatic execution"**; an `assisted` skill
|
|
51
51
|
renders its proposed actions), declared steps, tools, and any file/command
|
|
52
52
|
targets. End on the contract reminder that preview shows *declared intent*, not
|
|
53
53
|
a guarantee of side-effect-freeness.
|