skills/chatarch-post-init-dev/SKILL.md
Continue development after `chatpypi` or `chattool pypi init -t chatarch` creates a project, keeping chatenv schemas, chatstyle interactive CLI behavior, docs, tests, and changelog aligned.
npx skillsauth add cubenlp/chattool chatarch-post-init-devInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill after a ChatArch / chatxxx project has already been generated with chatpypi <name> -t chatarch or chattool pypi init <name> -t chatarch.
Goal: turn the scaffold into a maintainable ChatArch package without drifting from the shared chatstyle and chatenv conventions.
From the generated project root:
python -m pytest -q
python -m mkdocs build --strict
<cli-name> --help
Confirm these files exist before expanding the package:
AGENTS.md: agent rules for the new repository.DEVELOP.md: local development workflow.CHANGELOG.md: date-based change log.src/<module>/cli.py: CLI entrypoint.tests/: generated smoke tests and future behavior tests.docs/ and mkdocs.yml: documentation surface when mkdocs is enabled.Use chatstyle directly in standalone ChatArch packages. Do not import chattool.interaction from these projects.
Development rules:
CommandSchema and CommandField.@add_interactive_option to commands that support -i/-I.resolve_command_inputs().required=True for values that can be asked interactively.chatstyle, not inside the business package.Minimal pattern:
from chatstyle import CommandField, CommandSchema, add_interactive_option, resolve_command_inputs
RUN_SCHEMA = CommandSchema(
name="run",
fields=(CommandField("target", prompt="target", required=True),),
)
@cli.command()
@click.argument("target", required=False)
@add_interactive_option
def run(target: str | None, interactive: bool | None) -> None:
inputs = resolve_command_inputs(
schema=RUN_SCHEMA,
provided={"target": target},
interactive=interactive,
usage="Usage: chatfoo run [TARGET] [-i|-I]",
)
...
Keep config schemas in the business package and let chatenv discover them through entry points.
Development rules:
src/<module>/config.py or a small config package.BaseEnvConfig and EnvField from chatenv._aliases for user-facing -t selectors._storage_dir for the directory under $CHATARCH_HOME/envs/.is_sensitive=True.[project.entry-points."chatenv.configs"].Minimal schema:
from chatenv import BaseEnvConfig, EnvField
class FooConfig(BaseEnvConfig):
_title = "Foo Configuration"
_aliases = ["foo", "chatfoo"]
_storage_dir = "Foo"
FOO_API_BASE = EnvField("FOO_API_BASE", desc="Foo API base URL")
FOO_API_KEY = EnvField("FOO_API_KEY", desc="Foo API key", is_sensitive=True)
Entry point:
[project.entry-points."chatenv.configs"]
chatfoo = "chatfoo.config"
Validate after installing the package in the active environment:
chatenv list
chatenv init -t foo
chatenv cat -t foo
chatenv paste --stdin --profile work
For each new behavior:
src/<module>/.tests/.docs/ for user-facing behavior.README.md if the quickstart changes.CHANGELOG.md.Recommended validation:
python -m pytest -q
python -m mkdocs build --strict
<cli-name> --help
<cli-name> <command> --help
<cli-name> <command> -I
chatenv list
Use -I checks to ensure non-interactive failure paths do not hang.
Before opening or updating a PR, confirm:
-i/-I where interactive recovery is supported.-I.chattool.interaction.chatenv.configs.CHANGELOG.md reflect the change.python -m pytest -q and python -m mkdocs build --strict pass.tools
Create or maintain ChatArch/chatxxx Python CLI packages with `chattool pypi init -t chatarch`, integrating external `chatstyle` and `chatenv` correctly.
tools
Create staged previews of Zulip topics using read-only CLI queries, including full-thread originals, a small zh-en translation slice, and a Chinese overview in an external work directory such as ~/tmp/chattool-zulip/<channel>/<topic>. Use when asked to preview, summarize, or translate Zulip thread content.
tools
Aggregate and summarize Zulip community updates via ChatTool CLI. Use for latest Zulip news, stream/topic listing, and periodic summaries from configured streams/topics.
tools
Use `chattool pypi init` or `chatpypi` to scaffold Python packages, including ChatArch templates, then validate with pytest/build/check/probe.