aai-coding

Pyskills for Answer.AI coding sessions: skill text and companion tooling for clikernel

View the Project on GitHub AnswerDotAI/aai-coding

aai-coding

aai-coding contains Answer.AI’s shared configuration, skills, and tools for Claude Code and Codex. It defines the team’s coding and writing guidance, tool permissions, and Python workflows. An LLM setting up the harness should read this README before following SETUP.md. The design decisions below also provide context for advising users of an existing setup.

Getting started

You do not need an Answer.AI account or our existing workspace. SETUP.md starts with a workspace in a directory you choose, managed by fastws. It then covers harness configuration.

The workspace holds separate Git checkouts sharing one uv environment. Its Python projects use editable installs. Changes in a checkout are available without reinstalling it.

Start with:

uvx --from 'fastws-cli>=0.0.14' ws-setup AnswerDotAI/aai-ws ~/aai-ws

Activate the new environment and follow SETUP.md. The public aai-ws baseline includes aai-coding, fastws, kernel startup and editing tools, and tools used by the Claude hooks. Other Python dependencies install as packages.

Answer.AI team members use AnswerDotAI/private-ws instead of AnswerDotAI/aai-ws in that command. Both workspace repos receive shared baseline updates through ws-sync. In either setup:

Reuse existing workspaces. Do not run ws-setup on them. See the team migration instructions.

Tool workflows

Claude Code uses a kernel-centric setup. Codex supports both kernel-centric and hybrid setups.

The kernel-centric setup denies native file tools. File reading, editing, searching, and Python execution use one persistent IPython kernel through clikernel. The persistent-python and pyskills host skills bootstrap this setup. pyskills provides discovery and documentation for the kernel’s tools.

The hybrid setup uses native apply_patch and Bash for files and shell work. It reserves a quiet clikernel for Python-specific work. Its clikernel-workflow host skill defines when to use the kernel. notebook-dialog-editing provides CLI access to the notebook tools documented in aidialog.dlgskill. This adapter overrides pyskill tool preferences for local files. Use native tools within allowed editing locations.

Task guidance lives in pyskills rather than host skills. A pyskill is a Python module docstring, listed by list_pyskills() and read with doc(). Pyskills are versioned, released, and installed with their Python packages.

What is in here

The repository contains:

Python modules

Prompts

prompts/core.md contains harness-neutral behavioural rules. Codex reads it through a ~/.codex/AGENTS.md symlink. Claude Code can append it to its system prompt.

prompts/sysp.md replaces Claude Code’s default system prompt. It aims to reduce the default prompt’s tendency to give consultant-style advice and act without sufficient justification. Install it as a ~/.claude/sysp symlink and launch with:

claude --system-prompt-file ~/.claude/sysp --append-system-prompt-file <this repo>/prompts/core.md

Replacement removes the default prompt’s prose. Tool schemas remain available. The default prompt’s dynamic environment block and scratchpad path are lost.

Design decisions, and why

Using and changing it

Activate the workspace’s .venv, then work in a project checkout. Use ws-status to inspect local changes, ws-sync to pull and install updates, and ws-add owner/repo to add a project. See the workspace workflow for details, including what syncing changes.

The harness needs no manual startup each day. Sessions use the skills described in Tool workflows. Both setups discover Python tools through the pyskills catalog and read their documentation with doc() or pyskills-doc.

To change a skill, edit its source in this checkout. Others receive the changes by pulling. Releases use the standard fastship command, ship-release. Bump the version in aai_coding/__init__.py after each release.

Tests cover substantive logic where hidden errors are realistic: event ordering, accumulated state, duplicate suppression, and PDF rendering. Do not add tests for prompt wording, straightforward dispatch, or trivial configuration branches. Run the retained tests with pytest.