intern-cli 0.4.0__tar.gz → 0.4.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.
Files changed (76) hide show
  1. {intern_cli-0.4.0 → intern_cli-0.4.1}/CHANGELOG.md +10 -0
  2. intern_cli-0.4.1/CLAUDE.md +218 -0
  3. {intern_cli-0.4.0 → intern_cli-0.4.1}/PKG-INFO +13 -8
  4. {intern_cli-0.4.0 → intern_cli-0.4.1}/README.md +12 -7
  5. {intern_cli-0.4.0 → intern_cli-0.4.1}/pyproject.toml +1 -1
  6. {intern_cli-0.4.0 → intern_cli-0.4.1}/uv.lock +1 -1
  7. intern_cli-0.4.0/CLAUDE.md +0 -28
  8. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/agent-config/SKILL.md +0 -0
  9. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  10. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/agent-config/scripts/show.sh +0 -0
  11. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/SKILL.md +0 -0
  12. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
  13. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/prompts/review.md +0 -0
  14. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/prompts/write.md +0 -0
  15. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
  16. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  17. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  18. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/SKILL.md +0 -0
  19. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  20. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  21. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  22. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  23. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  24. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/SKILL.md +0 -0
  25. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  26. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  27. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  28. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  29. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  30. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  31. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  32. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  33. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  34. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  35. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/recall/SKILL.md +0 -0
  36. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/recall/scripts/recall.sh +0 -0
  37. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/remember/SKILL.md +0 -0
  38. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/remember/scripts/remember.sh +0 -0
  39. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/run-tests/SKILL.md +0 -0
  40. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
  41. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/sonarclaude/SKILL.md +0 -0
  42. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  43. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  44. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  45. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/think/SKILL.md +0 -0
  46. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/think/scripts/think.sh +0 -0
  47. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/version-bump/SKILL.md +0 -0
  48. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/version-bump/scripts/bump.py +0 -0
  49. {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills.local.yaml.example +0 -0
  50. {intern_cli-0.4.0 → intern_cli-0.4.1}/.flake8 +0 -0
  51. {intern_cli-0.4.0 → intern_cli-0.4.1}/.github/workflows/publish.yml +0 -0
  52. {intern_cli-0.4.0 → intern_cli-0.4.1}/.github/workflows/tests.yml +0 -0
  53. {intern_cli-0.4.0 → intern_cli-0.4.1}/.gitignore +0 -0
  54. {intern_cli-0.4.0 → intern_cli-0.4.1}/.markdownlint-cli2.yaml +0 -0
  55. {intern_cli-0.4.0 → intern_cli-0.4.1}/AGENTS.colleague.md +0 -0
  56. {intern_cli-0.4.0 → intern_cli-0.4.1}/LICENSE +0 -0
  57. {intern_cli-0.4.0 → intern_cli-0.4.1}/culture.yaml +0 -0
  58. {intern_cli-0.4.0 → intern_cli-0.4.1}/docs/skill-sources.md +0 -0
  59. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/__init__.py +0 -0
  60. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/__main__.py +0 -0
  61. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/__init__.py +0 -0
  62. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/__init__.py +0 -0
  63. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/cli.py +0 -0
  64. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/doctor.py +0 -0
  65. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/explain.py +0 -0
  66. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/learn.py +0 -0
  67. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/overview.py +0 -0
  68. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/whoami.py +0 -0
  69. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_errors.py +0 -0
  70. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_output.py +0 -0
  71. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/explain/__init__.py +0 -0
  72. {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/explain/catalog.py +0 -0
  73. {intern_cli-0.4.0 → intern_cli-0.4.1}/sonar-project.properties +0 -0
  74. {intern_cli-0.4.0 → intern_cli-0.4.1}/tests/__init__.py +0 -0
  75. {intern_cli-0.4.0 → intern_cli-0.4.1}/tests/test_cli.py +0 -0
  76. {intern_cli-0.4.0 → intern_cli-0.4.1}/tests/test_cli_introspection.py +0 -0
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/). This project
6
6
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.4.1] - 2026-07-18
9
+
10
+ ### Changed
11
+
12
+ - Replaced the seed-placeholder `CLAUDE.md` with a full runtime guide (via `/init`): documents the three-form name split (dist `intern-cli` / package `intern` / console command `intern`), the CLI dispatch + `register()` pattern, the agent-first output contract, the `culture.yaml`/`doctor` identity model, and the version-bump/PR/skill-vendoring conventions.
13
+
14
+ ### Fixed
15
+
16
+ - README Quickstart invoked the CLI as `intern-cli whoami`/`intern-cli learn`, but the installed console command is `intern` (dist name `intern-cli` is the PyPI/distribution name only) — those examples failed. Corrected them and added a note clarifying the command vs. dist vs. import-package names; also fixed the rename step to reflect all three forms.
17
+
8
18
  ## [0.4.0] - 2026-06-23
9
19
 
10
20
  ### Added
@@ -0,0 +1,218 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## What this repo actually is (read first)
6
+
7
+ `intern-cli` brands itself (in `pyproject.toml`, `README.md`, the package
8
+ description) as *"a small, embeddable agent that wraps the Bonsai 1-bit /
9
+ ternary small language model."* **That is the intended domain, not the current
10
+ code.** There is no inference, model-loading, or Bonsai code in the tree today.
11
+
12
+ What actually ships is a **clonable agent-first CLI template for an AgentCulture
13
+ mesh agent**: an introspection CLI (`whoami`, `learn`, `explain`, `overview`,
14
+ `doctor`), a mesh identity (`culture.yaml` + a resident prompt file), the
15
+ vendored guildmaster skill kit under `.claude/skills/`, and a build/deploy
16
+ baseline. The `learn`/`explain`/`overview` text describe it literally as
17
+ "a clonable template for AgentCulture mesh agents." When you work here, treat it
18
+ as *that scaffold* — the SLM-wrapping is aspirational until someone builds it.
19
+
20
+ ## The name has three different forms — don't confuse them
21
+
22
+ | Form | Value | Where it lives |
23
+ |------|-------|----------------|
24
+ | Distribution / PyPI name | `intern-cli` | `pyproject.toml` `name`, wheel, SonarCloud key `agentculture_intern-cli` |
25
+ | Import package | `intern` | the `intern/` directory, `import intern` |
26
+ | **Console command** | **`intern`** | `[project.scripts]` → `intern = "intern.cli:main"` |
27
+ | argparse `prog` (help/usage text) | `intern-cli` | `_build_parser()`, all docstrings, `learn`/`explain` bodies |
28
+
29
+ **The runnable command is `intern`, NOT `intern-cli`.** The README's
30
+ `uv run intern-cli whoami` examples are aspirational and will fail today —
31
+ the real invocation is `uv run intern whoami`. Every command's *help text*
32
+ still prints `intern-cli` because argparse's `prog` is set to `intern-cli`;
33
+ that mismatch is intentional-looking but is a live gotcha. Verify with
34
+ `uv run intern --version`.
35
+
36
+ ## Common commands
37
+
38
+ ```bash
39
+ uv sync # install deps (creates .venv)
40
+
41
+ # Run the CLI (command is `intern`, or `python -m intern`)
42
+ uv run intern whoami # identity from culture.yaml
43
+ uv run intern learn --json # self-teaching prompt
44
+ uv run intern doctor # agent-identity invariants
45
+
46
+ # Tests
47
+ uv run pytest -n auto # full suite, parallel (pytest-xdist)
48
+ uv run pytest tests/test_cli.py # one file
49
+ uv run pytest tests/test_cli.py::test_whoami_json # one test
50
+ uv run pytest -n auto --cov=intern --cov-report=term # with coverage (CI gate: fail_under=60)
51
+
52
+ # Lint (all four run in CI; run before opening a PR)
53
+ uv run black --check intern tests # formatter (line-length 100)
54
+ uv run isort --check-only intern tests # import order (black profile)
55
+ uv run flake8 intern tests
56
+ uv run bandit -c pyproject.toml -r intern
57
+ markdownlint-cli2 "**/*.md" "#.claude/skills" # markdown (skips vendored skills)
58
+
59
+ # The agent-first rubric gate — CI's hard gate, 26 checks across 7 bundles
60
+ uv run teken cli doctor . --strict
61
+ ```
62
+
63
+ `black .` / `isort .` (no `--check`) auto-fix. For markdown, use the `lint-fix`
64
+ agent or `markdownlint-cli2 --fix`.
65
+
66
+ ## Architecture
67
+
68
+ ### Dispatch flow
69
+
70
+ `intern/cli/__init__.py:main(argv)` is the single entry point (returns an
71
+ `int` exit code; the `[project.scripts]` shim and `python -m intern` both call
72
+ it). Flow:
73
+
74
+ 1. `main()` peeks raw argv for `--json` and stashes it on
75
+ `_CliArgumentParser._json_hint` **before** parsing — so even argparse-level
76
+ errors (unknown verb, bad flag) honour `--json`.
77
+ 2. `_build_parser()` builds the top parser, then calls each command module's
78
+ `register(sub)` to attach its subparser. Subparsers are built with
79
+ `parser_class=_CliArgumentParser` so their `.error()` routes through the
80
+ structured error contract too (not argparse's default stderr + exit 2).
81
+ 3. `_dispatch()` calls `args.func(args)`. A handler returns `None`/`int` on
82
+ success or raises `CliError`. Any *other* exception is caught and wrapped
83
+ into a `CliError` so **no Python traceback ever leaks to stderr**.
84
+
85
+ ### Adding a command or noun group
86
+
87
+ Every command module in `intern/cli/_commands/` exposes one function:
88
+
89
+ ```python
90
+ def register(sub: argparse._SubParsersAction) -> None:
91
+ p = sub.add_parser("myverb", help="...")
92
+ p.add_argument("--json", action="store_true", help="Emit structured JSON.")
93
+ p.set_defaults(func=cmd_myverb) # cmd_myverb(args) -> int | None
94
+ ```
95
+
96
+ Then add one line in `_build_parser()` (there's a commented example). Handlers
97
+ must import `emit_result`/`emit_error` from `intern.cli._output` and raise
98
+ `CliError` (from `intern.cli._errors`) on failure — never `print()`, never
99
+ `sys.exit()`, never raise a bare exception for an expected error. A **noun
100
+ group** (a subparser with its own sub-verbs, like `cli`) must expose an
101
+ `overview` verb — the rubric's `overview_cli_noun_exists` check requires it, and
102
+ a bare `intern <noun>` should print that overview. See
103
+ `intern/cli/_commands/cli.py` as the template.
104
+
105
+ If you add a verb/noun, also add a matching entry to `ENTRIES` in
106
+ `intern/explain/catalog.py` — `test_every_catalog_path_resolves` walks every
107
+ catalog key through `explain` and the rubric checks `explain` coverage.
108
+
109
+ ### The agent-first output contract (stable — don't break)
110
+
111
+ These invariants are enforced by both the pytest suite and `teken cli doctor
112
+ --strict`. Breaking one is a regression even if nothing else fails:
113
+
114
+ - **stdout = results, stderr = diagnostics/errors — never mixed.**
115
+ `emit_result` → stdout; `emit_error`/`emit_diagnostic` → stderr.
116
+ - **`--json` on every command.** JSON payloads go to the same split streams.
117
+ In JSON mode, errors emit `{"code","message","remediation"}` to stderr.
118
+ - **Text errors are two lines:** `error: <message>` then `hint: <remediation>`.
119
+ The `hint:` prefix is load-bearing (agents grep for it; the rubric checks it).
120
+ - **Exit codes:** `0` success, `1` user-input error, `2` environment/setup
121
+ error, `3+` reserved. Centralised in `intern/cli/_errors.py`.
122
+ - **Descriptive verbs never hard-fail on a bad target.** `overview <bogus>`
123
+ exits 0 (it describes *this* agent, ignoring the positional).
124
+
125
+ ### Identity & `doctor`
126
+
127
+ `culture.yaml` declares the mesh identity — `suffix` (the nick), `backend`, and
128
+ `model`. `whoami.py` parses it **without a YAML dependency** (the runtime has
129
+ zero third-party deps — see `pyproject.toml` `dependencies = []`), reading
130
+ simple `key: value` lines from the first agent block and falling back to
131
+ literals if the shape is unexpected. `find_culture_yaml()` walks up from
132
+ `__file__` (not the CWD) so identity is always the agent's own; a wheel install
133
+ with no `culture.yaml` alongside the package falls back to defaults.
134
+
135
+ `doctor` mirrors the `steward doctor` invariants: **backend-consistency**
136
+ (the `backend` in `culture.yaml` maps to a required prompt file) plus a
137
+ **skills-present** check. The mapping lives in `doctor.py:_PROMPT_FILE`:
138
+
139
+ | backend | required prompt file |
140
+ |---------|----------------------|
141
+ | `claude` | `CLAUDE.md` |
142
+ | `colleague` | `AGENTS.colleague.md` |
143
+ | `acp` | `AGENTS.md` |
144
+ | `gemini` | `GEMINI.md` |
145
+
146
+ **This repo runs `backend: colleague`**, so the invariant-checked resident
147
+ prompt is `AGENTS.colleague.md`. This `CLAUDE.md` is for Claude Code's benefit
148
+ and is *not* what `doctor` validates. If you change `culture.yaml`'s `backend`,
149
+ you must also create the matching prompt file (and teach `doctor` any new
150
+ backend), or `doctor` — and CI — goes red.
151
+
152
+ ## Conventions & workflow
153
+
154
+ ### Version-bump on every PR (CI-enforced)
155
+
156
+ The `version-check` job in `.github/workflows/tests.yml` fails the PR if
157
+ `pyproject.toml`'s `version` equals `main`'s — **every** PR bumps it, even
158
+ docs/config/CI-only changes. Use the `version-bump` skill (`/version-bump
159
+ patch|minor|major`), which updates `pyproject.toml` and prepends a Keep-a-
160
+ Changelog entry to `CHANGELOG.md`. The runtime `__version__`
161
+ (`intern/__init__.py`) reads from installed package metadata, so it tracks
162
+ `pyproject.toml` automatically — don't hand-edit it.
163
+
164
+ ### PR / CI lane
165
+
166
+ Use the `cicd` skill for the PR lifecycle (it layers on `devex pr`, adds
167
+ SonarCloud gate + unresolved-thread status via `status`/`await`). Two GitHub
168
+ Actions workflows:
169
+
170
+ - **`tests.yml`** — `test` (pytest + coverage → SonarCloud when `SONAR_TOKEN`
171
+ is set), `lint` (black/isort/flake8/bandit/markdownlint + the `teken` rubric
172
+ gate), and `version-check` (PR-only).
173
+ - **`publish.yml`** — PyPI Trusted Publishing (OIDC, no tokens). PRs that touch
174
+ `pyproject.toml` or `intern/**` publish a `.devN` build to **TestPyPI**;
175
+ pushes to `main` publish to **PyPI**. Fork PRs skip publish (no OIDC context).
176
+
177
+ Follow the standard flow: branch, implement, bump version, open PR via `cicd`,
178
+ address review threads, merge. Sign online posts per the global instructions
179
+ (inside AgentCulture repos the `cicd`/`communicate` scripts sign as
180
+ `- intern-cli (Claude)` automatically — don't hand-sign the body).
181
+
182
+ ### Vendored skills — cite-don't-import
183
+
184
+ `.claude/skills/` holds ~13 skills vendored verbatim from **guildmaster** (the
185
+ AgentCulture skills supplier); a few originate in `devague`/`colleague` and are
186
+ tracked as divergences. `docs/skill-sources.md` is the authoritative provenance
187
+ ledger and re-sync procedure — **read it before touching any skill.** Rules:
188
+ don't reformat vendored skill bodies (markdownlint and Sonar both exclude
189
+ `.claude/skills/**`); every `SKILL.md` needs `type: command` in its frontmatter
190
+ (load-bearing — `core.skill_loader` silently skips files without it); to update
191
+ a skill, re-vendor from upstream and re-apply only the documented
192
+ identifier-only adaptations rather than editing in place.
193
+
194
+ Some skills need external CLIs on PATH: `devex` (>=0.21) for `cicd`, `agtag`
195
+ (>=0.1) for `communicate`, `eidetic` for `remember`/`recall`, `colleague`
196
+ (optional) for `ask-colleague`. `.claude/skills.local.yaml.example` documents
197
+ per-machine config (sibling project paths, culture server manifest).
198
+
199
+ ### Renaming this template to mint a new agent
200
+
201
+ The name is hard-coded in ~100 places across three forms (see the table above).
202
+ Discover every occurrence first, then change deliberately:
203
+
204
+ ```bash
205
+ # Every literal occurrence of the dist name and package name:
206
+ git grep -n -e 'intern-cli' -e '\bintern\b' -- ':!uv.lock'
207
+ git mv intern <newpkg> # rename the package dir
208
+ ```
209
+
210
+ Touch at least: `pyproject.toml` (`name`, `[project.scripts]`,
211
+ `known_first_party`, `packages`, coverage `source`), `culture.yaml`
212
+ (`suffix`/`backend`/`model`), the package dir + all imports, `tests/`,
213
+ `sonar-project.properties` (`projectKey`), `README.md`, the resident prompt
214
+ file, and — because they're baked into user-facing strings — the `prog=` in
215
+ `_build_parser()`, every docstring, the `learn`/`explain`/`overview` bodies, and
216
+ `whoami._FALLBACK_NICK`. Run `uv run pytest -n auto` and `uv run teken cli
217
+ doctor . --strict` after; the tests assert on the literal strings and will catch
218
+ a missed spot. Then rewrite this `CLAUDE.md` and re-run `/init`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intern-cli
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: A small, embeddable agent that wraps the Bonsai 1-bit / ternary small language model — a lightweight 'intern' you drop into any project as a Small-mode harness component for cheap local inference.
5
5
  Project-URL: Homepage, https://github.com/agentculture/intern-cli
6
6
  Project-URL: Issues, https://github.com/agentculture/intern-cli/issues
@@ -36,13 +36,17 @@ A small, embeddable agent that wraps the Bonsai 1-bit / ternary small language m
36
36
  ```bash
37
37
  uv sync
38
38
  uv run pytest -n auto # run the test suite
39
- uv run intern-cli whoami # identity from culture.yaml
40
- uv run intern-cli learn # self-teaching prompt (add --json)
39
+ uv run intern whoami # identity from culture.yaml
40
+ uv run intern learn # self-teaching prompt (add --json)
41
41
  uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
42
42
  ```
43
43
 
44
44
  ## CLI
45
45
 
46
+ The installed console command is **`intern`** (the `intern-cli` name is the
47
+ distribution/PyPI name; the import package is `intern`). Invoke verbs as
48
+ `intern <verb>` — e.g. `uv run intern whoami`.
49
+
46
50
  | Verb | What it does |
47
51
  |------|--------------|
48
52
  | `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
@@ -58,11 +62,12 @@ error, `3+` reserved.
58
62
 
59
63
  ## Make it your own
60
64
 
61
- 1. Rename the package `intern/` and the `intern-cli`
62
- CLI/dist name throughout `pyproject.toml`, the package, `tests/`,
63
- `sonar-project.properties`, and this `README.md`. The name is hard-coded in
64
- ~100 places, so list every occurrence first see the `git grep` discovery
65
- command in [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
65
+ 1. Rename the import package `intern/`, the `intern` console command
66
+ (`[project.scripts]`), and the `intern-cli` dist name throughout
67
+ `pyproject.toml`, the package, `tests/`, `sonar-project.properties`, and this
68
+ `README.md`. The names are hard-coded in ~100 places across three forms, so
69
+ list every occurrence first — see the `git grep` discovery command in
70
+ [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
66
71
  2. Edit `culture.yaml` with your `suffix` and `backend`.
67
72
  3. Rewrite `CLAUDE.md` for your agent and run `/init`.
68
73
  4. Re-vendor only the skills you need from guildmaster (see
@@ -19,13 +19,17 @@ A small, embeddable agent that wraps the Bonsai 1-bit / ternary small language m
19
19
  ```bash
20
20
  uv sync
21
21
  uv run pytest -n auto # run the test suite
22
- uv run intern-cli whoami # identity from culture.yaml
23
- uv run intern-cli learn # self-teaching prompt (add --json)
22
+ uv run intern whoami # identity from culture.yaml
23
+ uv run intern learn # self-teaching prompt (add --json)
24
24
  uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
25
25
  ```
26
26
 
27
27
  ## CLI
28
28
 
29
+ The installed console command is **`intern`** (the `intern-cli` name is the
30
+ distribution/PyPI name; the import package is `intern`). Invoke verbs as
31
+ `intern <verb>` — e.g. `uv run intern whoami`.
32
+
29
33
  | Verb | What it does |
30
34
  |------|--------------|
31
35
  | `whoami` | Report this agent's nick, version, backend, and model from `culture.yaml`. |
@@ -41,11 +45,12 @@ error, `3+` reserved.
41
45
 
42
46
  ## Make it your own
43
47
 
44
- 1. Rename the package `intern/` and the `intern-cli`
45
- CLI/dist name throughout `pyproject.toml`, the package, `tests/`,
46
- `sonar-project.properties`, and this `README.md`. The name is hard-coded in
47
- ~100 places, so list every occurrence first see the `git grep` discovery
48
- command in [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
48
+ 1. Rename the import package `intern/`, the `intern` console command
49
+ (`[project.scripts]`), and the `intern-cli` dist name throughout
50
+ `pyproject.toml`, the package, `tests/`, `sonar-project.properties`, and this
51
+ `README.md`. The names are hard-coded in ~100 places across three forms, so
52
+ list every occurrence first — see the `git grep` discovery command in
53
+ [`CLAUDE.md`](CLAUDE.md), the authoritative rename procedure.
49
54
  2. Edit `culture.yaml` with your `suffix` and `backend`.
50
55
  3. Rewrite `CLAUDE.md` for your agent and run `/init`.
51
56
  4. Re-vendor only the skills you need from guildmaster (see
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "intern-cli"
3
- version = "0.4.0"
3
+ version = "0.4.1"
4
4
  description = "A small, embeddable agent that wraps the Bonsai 1-bit / ternary small language model — a lightweight 'intern' you drop into any project as a Small-mode harness component for cheap local inference."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -188,7 +188,7 @@ wheels = [
188
188
 
189
189
  [[package]]
190
190
  name = "intern-cli"
191
- version = "0.4.0"
191
+ version = "0.4.1"
192
192
  source = { editable = "." }
193
193
 
194
194
  [package.dev-dependencies]
@@ -1,28 +0,0 @@
1
- # CLAUDE.md — seed / bootstrap placeholder
2
-
3
- > **This is a self-initializing seed, not a finished runtime prompt.**
4
- > Run `/init` (or describe the agent's domain to your AI assistant) to
5
- > re-initialize this file into a full runtime prompt, using the description
6
- > below and the scaffolded repo as context.
7
-
8
- ## Agent
9
-
10
- This repository hosts the **intern-cli** agent.
11
-
12
- ## Description
13
-
14
- A small, embeddable agent that wraps the Bonsai 1-bit / ternary small language model — a lightweight 'intern' you drop into any project as a Small-mode harness component for cheap local inference.
15
-
16
- ## Re-init instruction
17
-
18
- This file is a seed. To expand it into your full runtime prompt:
19
-
20
- 1. Open this repo in Claude Code (or your preferred AI assistant).
21
- 2. Run `/init` — the assistant will read the repo, incorporate the description
22
- above, and replace this seed with a complete `CLAUDE.md`.
23
- 3. Commit the result.
24
-
25
- Until you run `/init`, `intern-cli` satisfies the `steward doctor`
26
- `prompt-file-present` and `backend-consistency` invariants (a `CLAUDE.md`
27
- exists and `culture.yaml` declares `backend: claude`) but the prompt is not
28
- yet tailored to this agent's domain.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes