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.
- {intern_cli-0.4.0 → intern_cli-0.4.1}/CHANGELOG.md +10 -0
- intern_cli-0.4.1/CLAUDE.md +218 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/PKG-INFO +13 -8
- {intern_cli-0.4.0 → intern_cli-0.4.1}/README.md +12 -7
- {intern_cli-0.4.0 → intern_cli-0.4.1}/pyproject.toml +1 -1
- {intern_cli-0.4.0 → intern_cli-0.4.1}/uv.lock +1 -1
- intern_cli-0.4.0/CLAUDE.md +0 -28
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/agent-config/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/recall/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/recall/scripts/recall.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/remember/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/remember/scripts/remember.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/run-tests/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/think/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/think/scripts/think.sh +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/version-bump/SKILL.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills.local.yaml.example +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.flake8 +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.github/workflows/publish.yml +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.github/workflows/tests.yml +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.gitignore +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/.markdownlint-cli2.yaml +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/AGENTS.colleague.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/LICENSE +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/culture.yaml +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/docs/skill-sources.md +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/__init__.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/__main__.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/__init__.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/__init__.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/cli.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/doctor.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/explain.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/learn.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/overview.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_commands/whoami.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_errors.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/cli/_output.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/explain/__init__.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/intern/explain/catalog.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/sonar-project.properties +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/tests/__init__.py +0 -0
- {intern_cli-0.4.0 → intern_cli-0.4.1}/tests/test_cli.py +0 -0
- {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.
|
|
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
|
|
40
|
-
uv run intern
|
|
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
|
|
62
|
-
|
|
63
|
-
`sonar-project.properties`, and this
|
|
64
|
-
|
|
65
|
-
|
|
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
|
|
23
|
-
uv run intern
|
|
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
|
|
45
|
-
|
|
46
|
-
`sonar-project.properties`, and this
|
|
47
|
-
|
|
48
|
-
|
|
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.
|
|
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"
|
intern_cli-0.4.0/CLAUDE.md
DELETED
|
@@ -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
|
{intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{intern_cli-0.4.0 → intern_cli-0.4.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|