Skip to main content

Render local Codex and OpenCode repo config from .ai-codex.json

Project description

augint-opencodex

augint-opencodex is a Python tool that renders local Codex and OpenCode project configuration from a single tracked manifest, .ai-codex.json.

The first working slice is implemented here. It ships a real ai-codex CLI with:

  • ai-codex sync to read .ai-codex.json and render .ai-opencodex.md, .codex/config.toml, opencode.json, and shared skills
  • ai-codex doctor to inspect manifest resolution, generated files, local ignore setup, and staged generated artifacts
  • a first-pass profile model with augint and gov
  • local-only ignore handling through .git/info/exclude

Installation

For local dev:

uv sync --group dev

Once the package is published, the intended install flows are:

uvx --from augint-opencodex ai-codex sync
uv tool install augint-opencodex
ai-codex sync

Manifest

This tool expects a tracked .ai-codex.json file in the target repository. If it is missing when you run ai-codex sync, the command will prompt for a profile and create a minimal manifest before rendering. Pass --profile augint or --profile gov to skip the prompt (useful for scripts). --check still fails when the manifest is missing so CI does not silently initialize repos.

{
  "version": 1,
  "profile": "augint",
  "references": ["./ai-lls-lib"],
  "blocked_paths": [
    "**/secrets/**",
    "**/*.pem",
    "**/terraform.tfstate*"
  ],
  "content_policy": {
    "no_emojis": true,
    "no_ai_mentions": true
  },
  "shell_guardrails": {
    "ask": ["aws *", "terraform *", "kubectl *", "git push *"],
    "deny": ["aws iam create*", "aws iam put*"]
  },
  "patterns": {
    "org_python_library": true
  },
  "opencode": {
    "enabled": true,
    "default_model": "qwen3-coder",
    "local_provider": {
      "kind": "openai-compatible",
      "name": "ollama",
      "base_url": "http://host.docker.internal:11434/v1"
    },
    "models": [
      { "id": "qwen3-coder", "name": "Qwen3 Coder (local)" }
    ],
    "bedrock": {
      "enabled": false,
      "models": []
    }
  },
  "codex": {
    "provider": "openai",
    "model": null,
    "approval_policy": null,
    "sandbox_mode": null,
    "web_search": null
  }
}

The current schema lives in schemas/ai-codex.schema.json.

OpenCode and Codex manifest fields

The opencode and codex sections let the manifest fully express non-secret tool configuration instead of deferring those details to a separate launcher:

  • opencode.local_provider — OpenAI-compatible local endpoint (e.g. Ollama) rendered as provider.<name>.options.baseURL in opencode.json.
  • opencode.default_model — top-level model in opencode.json.
  • opencode.models — curated catalog attached to the local provider.
  • opencode.bedrock.enabled / opencode.bedrock.models — toggles the amazon-bedrock provider entry with the listed model IDs.
  • codex.provideropenai or aws. Emitted as a comment in .codex/config.toml so the runtime launcher knows which auth path to select. Raw secrets are never written to generated files.
  • codex.model, codex.approval_policy, codex.sandbox_mode, codex.web_search — override the defaults carried by the active profile.

Commands

Render files into the current repository:

uv run ai-codex sync

Preview pending changes without writing:

uv run ai-codex sync --dry-run

Fail if the repo is out of sync:

uv run ai-codex sync --check

Inspect the current repo state:

uv run ai-codex doctor

Generated Files

The first slice writes:

  • .ai-opencodex.md
  • .codex/config.toml
  • opencode.json
  • .agents/skills/README.md
  • .agents/skills/org-python-tooling/SKILL.md when patterns.org_python_library is enabled

Generated outputs are added to .git/info/exclude by default so target repositories do not need to commit them.

Canonical Ownership

There is one source of truth for each generated file, and one tool responsible for each runtime concern. This split keeps .ai-shell.yaml from drifting out of sync with generated config.

File ownership

File Owner Notes
.ai-codex.json user (tracked) Source of truth for all generated files
opencode.json augint-opencodex Repo root; generated
.codex/config.toml augint-opencodex Repo root; generated
.ai-opencodex.md augint-opencodex Repo root; generated
.agents/skills/** augint-opencodex Generated

Generated files MUST NOT be hand-edited. Re-run ai-codex sync after manifest changes.

Runtime ownership (augint-shell)

augint-shell is responsible only for runtime and container behavior:

  • bind-mounting .codex/ and opencode.json into the container
  • injecting secrets (OPENAI_API_KEY, AWS credentials) at launch time
  • selecting Bedrock vs OpenAI auth paths based on the manifest's codex.provider / opencode.bedrock.enabled signals
  • CLI launch flags (ai-shell opencode, ai-shell codex)

augint-shell should not ship template copies of opencode.json or .codex/config.toml, and .ai-shell.yaml should stop documenting [opencode] / [codex] config shape that duplicates .ai-codex.json.

Consumption inside ai-shell containers

The generated files live at repo root in the host working directory. Inside an ai-shell container, they are consumed as follows:

  • opencode.json — the ai-shell opencode command launches OpenCode with the repo's working directory as CWD, so OpenCode discovers opencode.json directly. ai-shell opencode --provider local|aws selects which provider block from the generated opencode.json is active at launch and injects the matching credentials or endpoint env vars. It does not rewrite the file.
  • .codex/config.tomlai-shell bind-mounts the host .codex/ directory into the container. Codex is launched with CODEX_HOME=$(pwd)/.codex so the generated file serves as the Codex home config. ai-shell codex --provider openai|aws mirrors codex.provider from the manifest and sets the corresponding auth env vars (OPENAI_API_KEY, AWS credential chain). Secrets are never written into .codex/config.toml or opencode.json.
  • .ai-opencodex.md — Codex discovers it through the project_doc_fallback_filenames entry in the generated .codex/config.toml; OpenCode reads it through the instructions block in opencode.json.

If a repo uses augint-opencodex but is launched outside ai-shell, the same files are still consumed by running codex / opencode directly from the repo root with CODEX_HOME=$(pwd)/.codex.

augint-shell migration

Once a repo adopts augint-opencodex, the following can be removed from augint-shell:

  • src/ai_shell/templates/opencode/opencode.json
  • src/ai_shell/templates/codex/config.toml
  • [opencode] and [codex] config blocks in the scaffolded .ai-shell.yaml template (beyond runtime toggles like provider)
  • codex_openai_api_key handling in config.py moves to pure runtime env injection

Runtime-only fields that remain in .ai-shell.yaml:

  • opencode.provider (local|aws) — chooses which provider block from opencode.json the launcher should activate
  • Secret material passed via environment variables

Dogfooding This Repo

This repository is set up to dogfood the generated instructions flow without a root AGENTS.md.

  1. Keep .ai-codex.json tracked in the repo root.
  2. Run uv run ai-codex sync to generate .ai-opencodex.md, .codex/config.toml, and the other local-only artifacts.
  3. Start Codex with CODEX_HOME=$(pwd)/.codex codex so Codex uses the generated .codex/config.toml as its home config and discovers .ai-opencodex.md via project_doc_fallback_filenames.

Avoid creating a root AGENTS.md here. Codex checks AGENTS.md before fallback filenames in the same directory, so a root AGENTS.md would shadow .ai-opencodex.md and split Codex from the generated OpenCode instructions.

Organizational Python Standard

This project uses ai-lls-lib/ in the planning repo as the concrete reference for the organization-wide Python package and tooling standard:

  • uv-first packaging and development workflow
  • src/ layout and console scripts from [project.scripts]
  • ruff, mypy, pytest, and pre-commit
  • security and compliance checks in CI
  • Conventional Commit and semantic-release-compatible versioning
  • a stable Makefile task surface

Development

make install
make test
make format
make typecheck
make build

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

augint_opencodex-0.7.1.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

augint_opencodex-0.7.1-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file augint_opencodex-0.7.1.tar.gz.

File metadata

  • Download URL: augint_opencodex-0.7.1.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for augint_opencodex-0.7.1.tar.gz
Algorithm Hash digest
SHA256 d6f4e0e441173957f2a8815ec388f47c26fd5fd6ad189f8336844686f81568f8
MD5 0008d76844fe76c2a6a16670f447674d
BLAKE2b-256 8195a3ec8bd6db1b164b86c11d4d58cb4d24f90a9f309f9910f5b540e5210336

See more details on using hashes here.

Provenance

The following attestation bundles were made for augint_opencodex-0.7.1.tar.gz:

Publisher: pipeline.yaml on svange/augint-opencodex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file augint_opencodex-0.7.1-py3-none-any.whl.

File metadata

File hashes

Hashes for augint_opencodex-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7fc54e0ebf6a56cf7199f6b81c8d4238c9d86477193684aa6a2c63f15ff997d5
MD5 9f60545281b40179f65035b71f7dc4fa
BLAKE2b-256 7b9c3de83d90d38fb72e68da83dc624731907b9a34c360dc1dff3d778ff5dbfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for augint_opencodex-0.7.1-py3-none-any.whl:

Publisher: pipeline.yaml on svange/augint-opencodex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page