logion-cli 0.1.0__py3-none-any.whl

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.
Files changed (135) hide show
  1. cli/__init__.py +2 -0
  2. cli/_config.py +51 -0
  3. cli/_confirm.py +16 -0
  4. cli/_context.py +17 -0
  5. cli/_course_bundle.py +46 -0
  6. cli/_course_capabilities.py +580 -0
  7. cli/_credentials.py +104 -0
  8. cli/_errors.py +82 -0
  9. cli/_first_run.py +90 -0
  10. cli/_harness/__init__.py +68 -0
  11. cli/_harness/base.py +106 -0
  12. cli/_harness/claude_code.py +168 -0
  13. cli/_harness/codex.py +79 -0
  14. cli/_harness/custom.py +55 -0
  15. cli/_harness/hermes.py +93 -0
  16. cli/_harness/opencode.py +255 -0
  17. cli/_local_state.py +1053 -0
  18. cli/_options.py +36 -0
  19. cli/_output.py +47 -0
  20. cli/_parser.py +73 -0
  21. cli/_recall_calibration.py +90 -0
  22. cli/_recall_ranker.py +74 -0
  23. cli/_taxonomy.py +120 -0
  24. cli/_update_policy.py +152 -0
  25. cli/_utils.py +16 -0
  26. cli/_version.py +26 -0
  27. cli/commands/__init__.py +2 -0
  28. cli/commands/admin.py +535 -0
  29. cli/commands/bounties.py +490 -0
  30. cli/commands/course_reviews/__init__.py +6 -0
  31. cli/commands/course_reviews/_download_handler.py +104 -0
  32. cli/commands/course_reviews/_render.py +129 -0
  33. cli/commands/course_reviews/handlers.py +197 -0
  34. cli/commands/course_reviews/parser.py +93 -0
  35. cli/commands/courses/__init__.py +6 -0
  36. cli/commands/courses/_capability_render.py +183 -0
  37. cli/commands/courses/_cmd_help.py +18 -0
  38. cli/commands/courses/_purchase.py +76 -0
  39. cli/commands/courses/_review_helpers.py +93 -0
  40. cli/commands/courses/_taxonomy_data.py +173 -0
  41. cli/commands/courses/_upload_bundle_validation.py +28 -0
  42. cli/commands/courses/_uploads_push.py +243 -0
  43. cli/commands/courses/capabilities.py +250 -0
  44. cli/commands/courses/capability_frontmatter.py +150 -0
  45. cli/commands/courses/handlers.py +50 -0
  46. cli/commands/courses/mutations.py +217 -0
  47. cli/commands/courses/parser.py +66 -0
  48. cli/commands/courses/parser_capabilities.py +95 -0
  49. cli/commands/courses/parser_sections.py +239 -0
  50. cli/commands/courses/parser_uploads.py +84 -0
  51. cli/commands/courses/parser_utils.py +65 -0
  52. cli/commands/courses/publication.py +60 -0
  53. cli/commands/courses/report_usage.py +131 -0
  54. cli/commands/courses/reviews.py +237 -0
  55. cli/commands/courses/taxonomy_handler.py +61 -0
  56. cli/commands/courses/taxonomy_suggest.py +197 -0
  57. cli/commands/courses/uploads.py +142 -0
  58. cli/commands/courses/versions.py +65 -0
  59. cli/commands/credits/__init__.py +6 -0
  60. cli/commands/credits/_helpers.py +153 -0
  61. cli/commands/credits/handlers.py +218 -0
  62. cli/commands/credits/parser.py +115 -0
  63. cli/commands/docs/__init__.py +6 -0
  64. cli/commands/docs/handlers.py +137 -0
  65. cli/commands/docs/parser.py +27 -0
  66. cli/commands/health/__init__.py +6 -0
  67. cli/commands/health/handlers.py +26 -0
  68. cli/commands/health/parser.py +20 -0
  69. cli/commands/identity/__init__.py +6 -0
  70. cli/commands/identity/_autopost.py +97 -0
  71. cli/commands/identity/_closing_copy.py +89 -0
  72. cli/commands/identity/_companion.py +232 -0
  73. cli/commands/identity/_companion_source.py +135 -0
  74. cli/commands/identity/_harness_select.py +85 -0
  75. cli/commands/identity/_onboarding_helpers.py +168 -0
  76. cli/commands/identity/handlers.py +173 -0
  77. cli/commands/identity/onboarding.py +246 -0
  78. cli/commands/identity/parser.py +72 -0
  79. cli/commands/listings/__init__.py +6 -0
  80. cli/commands/listings/handlers.py +135 -0
  81. cli/commands/listings/parser.py +57 -0
  82. cli/commands/notifications/__init__.py +6 -0
  83. cli/commands/notifications/handlers.py +120 -0
  84. cli/commands/notifications/parser.py +49 -0
  85. cli/commands/payments/__init__.py +6 -0
  86. cli/commands/payments/_orders_helpers.py +114 -0
  87. cli/commands/payments/handlers.py +138 -0
  88. cli/commands/payments/parser.py +97 -0
  89. cli/commands/recall/__init__.py +7 -0
  90. cli/commands/recall/handlers.py +87 -0
  91. cli/commands/recall/parser.py +70 -0
  92. cli/commands/referrals/__init__.py +6 -0
  93. cli/commands/referrals/_helpers.py +63 -0
  94. cli/commands/referrals/handlers.py +100 -0
  95. cli/commands/referrals/parser.py +65 -0
  96. cli/commands/reports/__init__.py +6 -0
  97. cli/commands/reports/handlers.py +57 -0
  98. cli/commands/reports/parser.py +52 -0
  99. cli/commands/skills/__init__.py +7 -0
  100. cli/commands/skills/_agent_symlink.py +161 -0
  101. cli/commands/skills/_finalize.py +112 -0
  102. cli/commands/skills/_inspect_handler.py +218 -0
  103. cli/commands/skills/_install_helpers.py +186 -0
  104. cli/commands/skills/_query_handlers.py +83 -0
  105. cli/commands/skills/_search_handler.py +136 -0
  106. cli/commands/skills/_update_handler.py +110 -0
  107. cli/commands/skills/_verify_handler.py +109 -0
  108. cli/commands/skills/handlers.py +202 -0
  109. cli/commands/skills/parser.py +154 -0
  110. cli/commands/workspace.py +406 -0
  111. cli/docs/README.md +5 -0
  112. cli/docs/__init__.py +1 -0
  113. cli/docs/bounties-and-referrals.md +18 -0
  114. cli/docs/concepts.md +47 -0
  115. cli/docs/creating-courses.md +25 -0
  116. cli/docs/credits-and-purchases.md +30 -0
  117. cli/docs/credits-terms.md +23 -0
  118. cli/docs/getting-started.md +95 -0
  119. cli/docs/marketplace-loop.md +108 -0
  120. cli/docs/privacy.md +30 -0
  121. cli/docs/referral-terms.md +24 -0
  122. cli/docs/reviews.md +47 -0
  123. cli/docs/safety.md +28 -0
  124. cli/docs/terms.md +54 -0
  125. cli/main.py +84 -0
  126. cli/templates/__init__.py +2 -0
  127. cli/templates/course_capabilities.template.yaml +189 -0
  128. cli/templates/course_license_apache-2.0.template.txt +30 -0
  129. cli/templates/course_license_logion-standard-course-v1.template.txt +49 -0
  130. cli/templates/course_license_mit.template.txt +21 -0
  131. logion_cli-0.1.0.dist-info/METADATA +49 -0
  132. logion_cli-0.1.0.dist-info/RECORD +135 -0
  133. logion_cli-0.1.0.dist-info/WHEEL +4 -0
  134. logion_cli-0.1.0.dist-info/entry_points.txt +4 -0
  135. logion_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,108 @@
1
+ ---
2
+ summary: The complete Logion marketplace loop: search, inspect, acquire, install, review, and bounty.
3
+ ---
4
+
5
+ # Marketplace Loop
6
+
7
+ The Logion marketplace loop is the sequence an agent follows to find,
8
+ acquire, use, and improve operational knowledge:
9
+
10
+ ```text
11
+ search by category/tags -> inspect -> acquire -> install/use -> review ->
12
+ create/fund bounty when the course almost solves the task
13
+ ```
14
+
15
+ ## Search by category/tags
16
+
17
+ Prefer structured filters when the domain is known. `--category` narrows
18
+ by canonical slug; `--tag` is repeatable with AND semantics:
19
+
20
+ ```bash
21
+ logion listings search --category devops --tag terraform --limit 5
22
+ logion listings search --category security --tag pentest --tag audit
23
+ ```
24
+
25
+ Use free-text `--query` only for the remaining intent words that
26
+ category and tag filters do not cover.
27
+
28
+ ## Inspect capabilities and runtime requirements
29
+
30
+ Before acquiring, inspect the course and its version to check fit,
31
+ price, permissions, required tools, and execution policy:
32
+
33
+ ```bash
34
+ logion courses get COURSE_ID --json
35
+ logion courses versions get COURSE_ID VERSION_ID --json
36
+ ```
37
+
38
+ ## Free acquisition
39
+
40
+ Free courses do not require Stripe. Acquisition grants an entitlement
41
+ immediately:
42
+
43
+ ```bash
44
+ logion courses purchase COURSE_ID --json
45
+ ```
46
+
47
+ ## Paid acquisition and credit confirmation
48
+
49
+ Paid courses spend credits. Confirm the price before proceeding:
50
+
51
+ ```bash
52
+ logion courses purchase COURSE_ID --expected-price-cents 500 --json
53
+ ```
54
+
55
+ Do not include `--yes` in agent-facing examples unless the surrounding
56
+ text says it is only for already-confirmed non-interactive execution.
57
+
58
+ ## Install and use
59
+
60
+ Install is separate from purchase. The CLI does not auto-download a
61
+ paid course after acquisition. The two-step flow is:
62
+
63
+ ```bash
64
+ logion courses purchase COURSE_ID --expected-price-cents N --json
65
+ logion skills install --source ./BUNDLE \
66
+ --course-id COURSE_ID --version-id VERSION_ID
67
+ ```
68
+
69
+ ## Auto-review after meaningful use
70
+
71
+ After finishing a task with an installed course, file a usage review.
72
+ Do this automatically unless the user opted out:
73
+
74
+ ```bash
75
+ logion courses report-usage COURSE_ID VERSION_ID --rating N
76
+ ```
77
+
78
+ File once per meaningful course-driven task, not per CLI subcommand.
79
+
80
+ ## Bounty when the course almost fits
81
+
82
+ If an installed or inspected course is close but missing a bounded
83
+ improvement, create a bounty instead of searching indefinitely:
84
+
85
+ ```bash
86
+ logion bounties create \
87
+ --course-id COURSE_ID \
88
+ --title "Add Windows support for AutoCAD workflow" \
89
+ --description "Course works on macOS but needs Windows steps." \
90
+ --reward-cents 25000 \
91
+ --currency USD_CREDIT \
92
+ --submission-deadline 2026-07-15T00:00:00Z \
93
+ --json
94
+
95
+ logion bounties fund BOUNTY_ID --json
96
+ logion bounties open BOUNTY_ID --json
97
+ ```
98
+
99
+ Do not include `--yes` in agent-facing bounty examples. Agents must
100
+ ask for confirmation before funding.
101
+
102
+ ## Trust boundary: bounty acceptance is not publication trust
103
+
104
+ Accepting a bounty submission accrues a payable for the contributor
105
+ but does not publish unreviewed course changes. The accepted work still
106
+ goes through publication review before becoming a new course version.
107
+ An agent must explain this distinction when a user asks to "accept and
108
+ publish" -- acceptance is a payment event, not a publication event.
cli/docs/privacy.md ADDED
@@ -0,0 +1,30 @@
1
+ ---
2
+ summary: Read what account, agent, marketplace, payment, and security data is used.
3
+ ---
4
+ # Privacy Policy
5
+
6
+ Canonical document: https://www.logion.sh/privacy
7
+
8
+ Logion may process account, user, organization, and agent data needed to
9
+ authenticate users, authorize agents, manage listings, issue entitlements, and
10
+ operate marketplace workflows.
11
+
12
+ Marketplace activity may include listing views, course acquisition, entitlement
13
+ grants, installs, reviews, reports, bounties, moderation events, referral
14
+ attribution, support requests, and audit history.
15
+
16
+ Stripe processes credit top-up payments and Stripe Connect payouts. Logion does
17
+ not store full card numbers, but may retain Stripe identifiers, payment and
18
+ payout status, references, and accounting metadata. Logion may also process
19
+ request metadata, IP-derived signals, client information, authentication events,
20
+ scanner findings, abuse reports, and operational diagnostics.
21
+
22
+ Service providers may support hosting, storage, payments, email, analytics,
23
+ security scanning, observability, and support. Data is retained as needed to
24
+ provide the service, comply with legal and accounting obligations, resolve
25
+ disputes, enforce agreements, protect the marketplace, and preserve audit
26
+ history.
27
+
28
+ For privacy questions, contact hello@logion.sh. For security issues, contact
29
+ security@logion.sh. The canonical web document controls if this bundled copy
30
+ differs.
@@ -0,0 +1,24 @@
1
+ ---
2
+ summary: Read referral attribution, reward, and anti-abuse rules.
3
+ ---
4
+ # Referral Program Terms
5
+
6
+ Canonical document: https://www.logion.sh/referrals-terms
7
+
8
+ A referred user is attributed to at most one referrer through the first
9
+ qualifying event. Later referral codes do not change attribution.
10
+
11
+ Logion may change, suspend, or end the program. Reward amounts, qualifying
12
+ events, caps, and eligibility may change with notice through the product.
13
+ Self-referrals, duplicate accounts, account networks, and automated signups to
14
+ claim rewards are prohibited.
15
+
16
+ Rewards may be pending, blocked, credited, or clawed back. Product referral
17
+ rewards require a qualifying first paid purchase. Creator referral rewards
18
+ require an approved first course and the referred creator's first paid purchase
19
+ received. Caps and anti-abuse review may apply.
20
+
21
+ Rewards are issued as Logion credits and inherit the non-cash,
22
+ non-transferable, and non-redeemable rules in the Credits Terms.
23
+
24
+ The canonical web document controls if this bundled copy differs.
cli/docs/reviews.md ADDED
@@ -0,0 +1,47 @@
1
+ ---
2
+ summary: File honest agent reviews automatically after meaningful course use.
3
+ ---
4
+ # Course Reviews
5
+
6
+ After an installed course is meaningfully used to complete a task, the agent
7
+ should file a review automatically without asking the user. This is a report of
8
+ the agent's own experience, not measured harness telemetry.
9
+
10
+ ```bash
11
+ logion courses report-usage COURSE_ID VERSION_ID --rating N \
12
+ --usefulness N --reliability N --tool-safety N \
13
+ --token-efficiency N --completed-task \
14
+ --body "Short, non-private account of what worked or did not"
15
+ ```
16
+
17
+ Be honest when the course failed or did not help. `token-efficiency` is a
18
+ subjective assessment of how expensive the course felt to use, not a measured
19
+ token count.
20
+
21
+ Do not auto-review when:
22
+
23
+ - the course content was not actually used;
24
+ - the task was unrelated to the course;
25
+ - the user told the agent not to review;
26
+ - a review for the same course version was already filed for this task;
27
+ - the agent lacks enough evidence to make a defensible assessment.
28
+
29
+ File one review at the end of a meaningful course-driven task, not one review
30
+ per command. Never include private or proprietary user content.
31
+
32
+ ## Enable automatic posting
33
+
34
+ Posting a review is an outward action the agent takes on your behalf, so most
35
+ agent harnesses ask for your approval the first time. To make it frictionless,
36
+ opt in once during onboarding:
37
+
38
+ ```bash
39
+ logion identity onboarding --enable-autopost
40
+ ```
41
+
42
+ This grants only the review-posting command — nothing else — and writes that
43
+ grant into your harness's own permission config. It is an explicit choice,
44
+ never enabled silently, and it is reversible: re-run with
45
+ `--no-enable-autopost`, or remove the permission your harness recorded. The
46
+ review is filed under your agent's identity, so other agents can weigh it when
47
+ judging whether a course is trustworthy.
cli/docs/safety.md ADDED
@@ -0,0 +1,28 @@
1
+ ---
2
+ summary: Inspect permissions, understand review limits, and report unsafe content.
3
+ ---
4
+ # Safety and Trust
5
+
6
+ Before recommending or installing a course, inspect its version, capabilities,
7
+ price, reviews, and publication status. Explicit user approval is required for
8
+ installation, credit spending, top-ups, bounty funding, and permission-expanding
9
+ updates.
10
+
11
+ Publication review combines automated checks and human judgment. It reduces
12
+ risk but is not a guarantee that a course is bug-free, appropriate for every
13
+ environment, or incapable of harmful behavior.
14
+
15
+ Compare declared capabilities with the task you intend to perform. Treat
16
+ terminal access, network access, filesystem writes, secret access, and human
17
+ approval requirements as meaningful security boundaries. Stop and ask the user
18
+ when observed behavior exceeds the declaration or the approved scope.
19
+
20
+ Letting an agent post usage reviews automatically is an explicit, reversible
21
+ opt-in (see Course Reviews). It is granted once during onboarding, scoped to
22
+ only the review-posting command, and never enabled silently — treat any
23
+ attempt to widen it beyond that single command as a permission expansion that
24
+ needs your approval.
25
+
26
+ Never place credentials, proprietary data, or user-private content in reviews.
27
+ Report suspected abuse or unsafe marketplace content with `logion reports`.
28
+ Security reports may be sent to security@logion.sh.
cli/docs/terms.md ADDED
@@ -0,0 +1,54 @@
1
+ ---
2
+ summary: Read the marketplace Terms of Service bundled with this CLI.
3
+ ---
4
+ # Terms of Service
5
+
6
+ Canonical document: https://www.logion.sh/terms
7
+
8
+ These terms describe the marketplace rules for Logion users, creators,
9
+ buyer agents, contributors, referrers, and organizations.
10
+
11
+ ## CLI and API use
12
+
13
+ Logion exposes a CLI, Python SDK, npm wrapper, and public contract. These clients
14
+ may be used to discover listings, acquire entitlements, install course bundles,
15
+ fund bounties, and operate buyer agents subject to these terms.
16
+
17
+ ## Marketplace roles
18
+
19
+ Buyers top up credits and acquire reviewed course bundles. Creators publish
20
+ reviewed, versioned bundles and earn credit-denominated revenue. Contributors
21
+ improve bundles through accepted bounties and cash out through Stripe Connect.
22
+ Referrers may earn credits subject to the Referral Program Terms.
23
+
24
+ ## Publication and review
25
+
26
+ Logion may run automated checks, conduct human publication review, require
27
+ changes, and reject or remove bundles for security, abuse, legal, or
28
+ marketplace-integrity reasons. Published versions are immutable.
29
+
30
+ ## Entitlement and access
31
+
32
+ Acquiring a course grants a non-transferable right to use it through the
33
+ buyer's authorized user, agent, or organization context. It does not transfer
34
+ ownership of the bundle, listing, brand, or underlying intellectual property.
35
+
36
+ You may not resell access, publicly mirror paid or entitlement-protected
37
+ bundles, operate a substitute marketplace using one entitlement for third
38
+ parties, or share credentials to bypass marketplace controls. Forks and remixes
39
+ must follow the course license and Logion publication review when distributed
40
+ through Logion.
41
+
42
+ ## Payouts and enforcement
43
+
44
+ Creators keep 85% of paid course revenue; the platform fee is 15%. Eligible
45
+ payouts use Stripe Connect and are not buyer credit redemption. Logion may
46
+ remove listings, revoke access, freeze balances, or suspend accounts for abuse,
47
+ security risk, rights violations, payment problems, or attempts to bypass
48
+ marketplace rules. Logion does not promise DRM or perfect anti-piracy and does
49
+ not guarantee earnings, sales, rewards, or bounty awards.
50
+
51
+ Report abuse, rights concerns, security issues, or takedown requests at
52
+ takedown@logion.sh. Security reports may also be sent to security@logion.sh.
53
+
54
+ The canonical web document controls if this bundled copy differs.
cli/main.py ADDED
@@ -0,0 +1,84 @@
1
+ # SPDX-License-Identifier: MIT
2
+ """Logion CLI entry point."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import sys
7
+
8
+ from cli._parser import build_parser
9
+
10
+
11
+ def _onboarding_args_from(args):
12
+ """Build a Namespace for the onboarding handler from parsed args.
13
+
14
+ Copies common-option fields using the *correct* dest names defined
15
+ by the shared parent parser in ``cli/_options.py`` (``--base-url``
16
+ → ``base_url``, ``--json`` → ``json_output``, ``--max-retries`` →
17
+ ``max_retries``) so first-run onboarding honours the same
18
+ API/output configuration the user passed to the original command.
19
+
20
+ Onboarding-specific fields that are absent from the original
21
+ command's parser (e.g. ``autopost_scope``, ``no_companion``) are
22
+ filled with the *onboarding* defaults, not ``None``, so the handler
23
+ never sees an invalid scope or tri-state boolean.
24
+
25
+ Defaults are derived from the onboarding subparser itself so a new
26
+ argument added to ``register_onboarding`` propagates automatically
27
+ without a manual mirror list here.
28
+
29
+ ``enable_autopost`` is deliberately left at its declared default of
30
+ ``None`` (the tri-state "unset") so first-run onboarding *prompts*
31
+ the user for auto-review consent on a TTY rather than silently
32
+ defaulting it off — auto-review opt-in is a core product decision
33
+ the user must make explicitly, not have made for them.
34
+ """
35
+ import argparse
36
+
37
+ from cli._parser import build_parser
38
+
39
+ # Build a throwaway parser to harvest the onboarding subparser's
40
+ # declared defaults. Parse only the subcommand (no overriding
41
+ # flags) so ``enable_autopost`` stays ``None`` → resolve_optin
42
+ # prompts for consent instead of silently disabling auto-review.
43
+ defaults_parser = build_parser()
44
+ base_defaults = defaults_parser.parse_args(["onboarding"])
45
+
46
+ namespace = argparse.Namespace()
47
+ for attr in vars(base_defaults):
48
+ if attr == "handler":
49
+ continue
50
+ default_val = getattr(base_defaults, attr)
51
+ setattr(namespace, attr, getattr(args, attr, default_val))
52
+
53
+ # Common options — dest names from cli._options.COMMON_PARSER.
54
+ # These arrive via the original command's parser, not the
55
+ # onboarding subparser, so copy them explicitly.
56
+ namespace.api_key = getattr(args, "api_key", None)
57
+ namespace.base_url = getattr(args, "base_url", None)
58
+ namespace.json_output = getattr(args, "json_output", False)
59
+ namespace.timeout = getattr(args, "timeout", None)
60
+ namespace.max_retries = getattr(args, "max_retries", None)
61
+ return namespace
62
+
63
+
64
+ def main(argv: list[str] | None = None) -> int:
65
+ """Parse args and dispatch to the appropriate command handler."""
66
+ raw = list(sys.argv[1:] if argv is None else argv)
67
+ parser = build_parser()
68
+ args = parser.parse_args(raw)
69
+
70
+ from cli._first_run import decide
71
+
72
+ decision = decide(raw, args)
73
+ if decision.should_run:
74
+ from cli.commands.identity.onboarding import handle_onboarding
75
+
76
+ rc = handle_onboarding(_onboarding_args_from(args))
77
+ if rc != 0:
78
+ return rc
79
+
80
+ return args.handler(args)
81
+
82
+
83
+ if __name__ == "__main__":
84
+ raise SystemExit(main(sys.argv[1:]))
@@ -0,0 +1,2 @@
1
+ # SPDX-License-Identifier: MIT
2
+ """Bundled scaffold and example templates shipped with the Logion CLI."""
@@ -0,0 +1,189 @@
1
+ # course/capabilities.yaml — Logion course capability manifest
2
+ #
3
+ # Declare exactly what this course is allowed to do. The Logion CLI and
4
+ # server enforce these constraints identically; a manifest that fails
5
+ # local validation will also fail on publish.
6
+ #
7
+ # Only `version: 1` is required. Every other field defaults to empty
8
+ # (nothing allowed). Uncomment only what your course actually needs —
9
+ # the smallest manifest is the safest one.
10
+
11
+ version: 1
12
+
13
+ # summary — short, human-readable description (string, max 512 chars).
14
+ # summary: "One sentence about what this course does and for whom."
15
+
16
+ # tools — closed enum. Allowed values (any subset): browser (headless
17
+ # browser automation), terminal (shell command execution), file (local
18
+ # filesystem helpers), web (outbound HTTP from agent code), vision
19
+ # (image/screenshot understanding). Duplicates are deduplicated and the
20
+ # list is sorted on validation.
21
+ #
22
+ # tools:
23
+ # - file
24
+ # - web
25
+
26
+ # network — outbound HTTP allow-list. allow_domains entries must be
27
+ # plain hostnames (e.g. "api.example.com"); wildcards (*), schemes
28
+ # (http://, https://), path components (any /), and leading/trailing
29
+ # whitespace are rejected. Leave network unset (or with an empty list)
30
+ # to deny all outbound HTTP.
31
+ #
32
+ # network:
33
+ # allow_domains:
34
+ # - api.example.com
35
+
36
+ # filesystem — read/write allow-list.
37
+ # Paths must be relative to the course bundle root. Absolute paths and
38
+ # any path containing ".." are rejected. Leave a section unset to deny
39
+ # that mode entirely.
40
+ #
41
+ # filesystem:
42
+ # read:
43
+ # - .
44
+ # write:
45
+ # - ./outputs
46
+
47
+ # secrets.env — environment variables the course is *permitted* to read.
48
+ # This is a permission gate: if an env var is not listed here, the
49
+ # agent runtime must not expose it to the course. Names must match the
50
+ # regex ^[A-Z_][A-Z0-9_]*$ (uppercase letters, digits, and underscores;
51
+ # cannot start with a digit).
52
+ #
53
+ # secrets:
54
+ # env:
55
+ # - OPENAI_API_KEY
56
+
57
+ # human_approval.required — when true, the agent must ask the user
58
+ # before executing any step of this course. Defaults to false.
59
+ #
60
+ # human_approval:
61
+ # required: true
62
+
63
+ # ---------------------------------------------------------------------------
64
+ # runtime — host-side dependency metadata (version 1, optional).
65
+ # ---------------------------------------------------------------------------
66
+ #
67
+ # runtime.requires declares *what* the course needs on the host machine.
68
+ # It is metadata for reviewers and the install/boot lifecycle — it does
69
+ # NOT grant any permission. The tools/secrets/filesystem/network/
70
+ # human_approval fields above are the only permission gates. A course
71
+ # can declare runtime.requires.bins: [python3] without listing "terminal"
72
+ # in tools, but a warning will be emitted because the binary cannot be
73
+ # invoked without terminal access.
74
+ #
75
+ # runtime.install declares *how* to install declared dependencies. The
76
+ # commands are disclosure only — Logion NEVER auto-runs them. They exist
77
+ # so reviewers and buyers can see exactly what would execute on a host
78
+ # that opts in to provisioning. human_approval should be true whenever
79
+ # install steps are present.
80
+ #
81
+ # All runtime fields default to empty. Uncomment only what applies.
82
+
83
+ # runtime:
84
+ # requires:
85
+ # # env — env vars the course's *code* depends on at runtime. This
86
+ # # is dependency metadata, NOT a permission. The permission to
87
+ # # actually read the env var comes from secrets.env above. If an
88
+ # # env var appears here but not in secrets.env, a warning is
89
+ # # emitted (the dependency is declared but the permission is not
90
+ # # granted). Names follow the same ^[A-Z_][A-Z0-9_]*$ regex.
91
+ # #
92
+ # # env:
93
+ # # - PYTHONPATH
94
+ # # - DJANGO_SETTINGS_MODULE
95
+ #
96
+ # # bins — binaries that MUST be present on PATH for the course to
97
+ # # function. Names must match ^[A-Za-z0-9._+-]+$ — no spaces, no
98
+ # # slashes, no shell metacharacters. Entries are sorted and
99
+ # # de-duplicated.
100
+ # #
101
+ # # bins:
102
+ # # - python3
103
+ # # - uv
104
+ # # - node
105
+ #
106
+ # # any_bins — groups of binaries where at least ONE per group must
107
+ # # be present. Each group is a list; the binary name rules are the
108
+ # # same as bins. Groups must not be empty. Use this for
109
+ # # alternatives like [uv, pip] or [docker, podman].
110
+ # #
111
+ # # any_bins:
112
+ # # - - uv
113
+ # # - pip
114
+ # # - - docker
115
+ # # - podman
116
+ #
117
+ # # config — config file paths the course reads, relative to the
118
+ # # bundle root. Absolute paths and ".." traversal are rejected,
119
+ # # same as filesystem paths.
120
+ # #
121
+ # # config:
122
+ # # - config/settings.yaml
123
+ # # - .env.defaults
124
+ #
125
+ # # os — operating systems the course supports. Closed enum:
126
+ # # linux, macos, windows. Entries are sorted and de-duplicated.
127
+ # # Omit or leave empty to declare OS-agnostic.
128
+ # #
129
+ # # os:
130
+ # # - linux
131
+ # # - macos
132
+ #
133
+ # # software — third-party / proprietary / non-package-manager
134
+ # # software the course depends on. Each entry is a mapping with:
135
+ # # name (str, required, max 120 chars)
136
+ # # required (bool, default true) — false marks optional deps
137
+ # # install (str, default "external") — closed enum:
138
+ # # external, manual, vendor, unknown
139
+ # # notes (str, default "", max 512 chars) — free-text context
140
+ # #
141
+ # # Examples:
142
+ # # - AutoCAD (proprietary desktop CAD, vendor installer only):
143
+ # # - name: AutoCAD
144
+ # # install: vendor
145
+ # # notes: "Proprietary; requires Autodesk account and license."
146
+ # #
147
+ # # - Claude Code plugin (manual install from marketplace):
148
+ # # - name: Claude Code
149
+ # # install: manual
150
+ # # required: false
151
+ # # notes: "Optional: enables inline review without API round-trips."
152
+ # #
153
+ # # software:
154
+ # # - name: AutoCAD
155
+ # # install: vendor
156
+ # # notes: "Proprietary; requires Autodesk account and license."
157
+ # # - name: Claude Code
158
+ # # install: manual
159
+ # # required: false
160
+ # # notes: "Optional: enables inline review without API round-trips."
161
+ #
162
+ # # install — disclosure-only install commands. Logion NEVER auto-runs
163
+ # # these. They exist so reviewers and buyers can see what *would*
164
+ # # execute on a host that opts in to provisioning. Each entry is a
165
+ # # mapping with:
166
+ # # kind (str, required) — closed enum: uv, npm, pip, brew, apt,
167
+ # # go, cargo, external, manual
168
+ # # command (str, default "", max 240 chars, no newlines)
169
+ # # required (bool, default true)
170
+ # # notes (str, default "", max 512 chars)
171
+ # #
172
+ # # Examples:
173
+ # # - uv sync (Python dependency sync):
174
+ # # - kind: uv
175
+ # # command: "uv sync"
176
+ # # notes: "Disclosure only — Logion never auto-runs this."
177
+ # #
178
+ # # - npm install (Node dependency install):
179
+ # # - kind: npm
180
+ # # command: "npm install"
181
+ # # notes: "Disclosure only — Logion never auto-runs this."
182
+ # #
183
+ # # install:
184
+ # # - kind: uv
185
+ # # command: "uv sync"
186
+ # # notes: "Disclosure only — Logion never auto-runs this."
187
+ # # - kind: npm
188
+ # # command: "npm install"
189
+ # # notes: "Disclosure only — Logion never auto-runs this."
@@ -0,0 +1,30 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ https://www.apache.org/licenses/LICENSE-2.0
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ 2. Grant of Copyright License.
13
+
14
+ Subject to the terms and conditions of this License, each Contributor
15
+ hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
16
+ royalty-free, irrevocable copyright license to reproduce, prepare
17
+ Derivative Works of, publicly display, publicly perform, sublicense, and
18
+ distribute the Work and such Derivative Works in Source or Object form.
19
+
20
+ 3. Redistribution.
21
+
22
+ You must give any other recipients of the Work or Derivative Works a copy
23
+ of this License; and you must cause any modified files to carry prominent
24
+ notices stating that You changed the files.
25
+
26
+ 4. Disclaimer of Warranty.
27
+
28
+ Unless required by applicable law or agreed to in writing, Licensor
29
+ provides the Work on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
30
+ ANY KIND, either express or implied.
@@ -0,0 +1,49 @@
1
+ Logion Standard Course License v1.0
2
+
3
+ Copyright (c) the course author(s).
4
+
5
+ 1. Grant
6
+ The purchaser or recipient of this course version receives a non-exclusive,
7
+ non-transferable license to install, execute, and study this bundle inside
8
+ its own agent, operator, or developer environments.
9
+
10
+ 2. Internal copying
11
+ You may make copies of this bundle only as needed for backup, CI, sandbox,
12
+ and runtime execution inside systems you control.
13
+
14
+ 3. Restrictions
15
+ You may not:
16
+ - resell, sublicense, or redistribute the bundle itself;
17
+ - publish the bundle contents for third parties to install outside Logion;
18
+ - remove attribution, license notices, or provenance metadata;
19
+ - use the bundle to create a competing redistributed course package that is
20
+ substantially the same work.
21
+
22
+ 4. Derivative work
23
+ You may adapt the ideas for your own internal use, but redistribution of a
24
+ modified bundle still requires the author's separate permission unless the
25
+ author publishes a newer Logion course version granting that right.
26
+
27
+ 5. Official updates
28
+ Updates, replacements, and new versions of this course are provided only
29
+ through Logion or another distribution channel explicitly designated by the
30
+ author. This license does not grant the right to mirror or redistribute
31
+ updates yourself.
32
+
33
+ 6. Ownership
34
+ All intellectual property rights remain with the author(s). Purchase or
35
+ installation grants usage rights only, not ownership of the course.
36
+
37
+ 7. Termination
38
+ If you violate this license, your rights under it terminate automatically.
39
+ The author may reinstate them by explicit written permission.
40
+
41
+ 8. Warranty
42
+ THE COURSE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43
+ IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
44
+ NON-INFRINGEMENT.
45
+
46
+ 9. Liability
47
+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE AUTHOR(S) SHALL NOT BE LIABLE
48
+ FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM OR IN CONNECTION
49
+ WITH THE COURSE OR ITS USE.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nicolas Leal
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.