Skip to content

[AAASM-4513] ✨ (docs): Per-framework tabs in quick-start - #242

Merged
Chisanan232 merged 22 commits into
masterfrom
v0.0.1/AAASM-4513/quickstart_framework_tabs
Jul 13, 2026
Merged

[AAASM-4513] ✨ (docs): Per-framework tabs in quick-start#242
Chisanan232 merged 22 commits into
masterfrom
v0.0.1/AAASM-4513/quickstart_framework_tabs

Conversation

@Chisanan232

@Chisanan232 Chisanan232 commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Description

Convert the Python SDK quick-start §3 "Govern your first agent" from a single hard-coded LangChain snippet into a pymdownx.tabbed block with one tab per supported Python framework (16 tabs), so a developer on any framework can copy a working governed-agent example immediately.

  • Data-driven tabs, generated not hand-maintained. scripts/generate_quickstart_tabs.py writes the tab block into a bounded <!-- BEGIN/END GENERATED: quickstart-framework-tabs --> region of docs/quick-start.md from quickstart_snippets/manifest.json + the per-framework .py slices. Tab list = the manifest's frameworks array in listed order; both LangChain variants are labelled distinctly ("LangChain" / "LangChain (Research Agent)").
  • Snippets vendored, drift-gated. quickstart_snippets/ is a committed copy of the 16 Python "govern" slices produced by the examples repo's scripts/extract_snippets.py (AAASM-4512). We vendor rather than fetch because examples is a separate repo and the MkDocs build must stay hermetic. A new CI workflow (quickstart-tabs-check.yml) re-runs the generator and fails on any diff, mirroring the examples repo's example-metadata-check gate.
  • Surrounding prose generalised from LangChain-specific wording to framework-agnostic guidance, pointing at the runnable examples for the full scripts.

Type of Change

  • 📚 Documentation update
  • 🔧 Tooling / CI (generator + drift check)

Breaking Changes

  • No

Related Issues

  • Related JIRA ticket: AAASM-4513 (parent Epic AAASM-4511)
  • Depends on the examples snippet tooling in AAASM-4512 / ai-agent-assembly/examples#267 (source of the vendored snippets + manifest).

Testing

  • Manual testing performed
  • No unit tests required (docs + generator; behaviour covered by the drift-check CI + local MkDocs build)

Validated locally:

  • mkdocs build --strict exits 0; the built site/quick-start/index.html contains the 16-tab set (data-tabs="2:16") with all 16 framework labels.
  • Generator is idempotent (second run is a no-op); --check and the CI-style regenerate + git diff both catch a deliberately desynced snippet and pass again after restore.

Checklist

  • Code follows project style guidelines
  • Self-review completed
  • Comments added for complex logic
  • Documentation updated if needed
  • All tests passing (local MkDocs build + drift check)

Comment thread quickstart_snippets/google-adk.py Dismissed
Comment thread quickstart_snippets/microsoft-agent-framework-tool-policy.py Dismissed
Comment thread quickstart_snippets/pydantic-ai.py Dismissed
Comment thread quickstart_snippets/autogen-tool-policy.py Dismissed
Comment thread quickstart_snippets/crewai-research-crew.py Dismissed
Comment thread quickstart_snippets/custom-tool-policy.py Dismissed
Comment thread quickstart_snippets/haystack-tool-policy.py Dismissed
Comment thread quickstart_snippets/langchain-research-agent.py Dismissed
Comment thread quickstart_snippets/langchain-basic-agent.py Dismissed
Comment thread quickstart_snippets/openai-agents-sdk.py Dismissed
Chisanan232 and others added 22 commits July 13, 2026 09:28
The vendored quick-start snippets are verbatim, partial governance slices;
some end on a bodyless `try:`/`with … as ctx:` that is a valid doc excerpt
but not a standalone module. Formatting or parsing them would rewrite the
vendored copy and break the drift check, so exclude the dir from all hooks.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
The python slice of the manifest produced by the examples repo's
scripts/extract_snippets.py (AAASM-4512, PR examples#267) plus a README
documenting the vendoring contract. The manifest's `frameworks` array (listed
order) is the single source of truth for which tabs the generator emits; the
per-framework .py slices land in the following commits.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/agno-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/autogen-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/crewai-research-crew entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/custom-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/google-adk entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/haystack-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/langchain-basic-agent entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/langchain-research-agent entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/langgraph entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/llamaindex-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/microsoft-agent-framework-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/openai-agents-sdk entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/pydantic-ai entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/semantic-kernel-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/smolagents-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Vendored verbatim `quickstart` region slice from the examples repo's
python/strands-agents-tool-policy entrypoint (AAASM-4512) — init_assembly() plus that framework's
governance wiring. Partial by design (cut at the region boundary), which is
why the dir is hook-excluded and drift-gated rather than linted.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Turns the vendored quickstart_snippets/ (manifest + per-framework .py slices)
into the pymdownx.tabbed block inside a bounded BEGIN/END GENERATED region of
docs/quick-start.md. Data-driven from manifest.json's frameworks array in
listed order, stdlib-only, and idempotent so a CI drift check can re-run it and
diff. A `--check` mode fails without writing when the doc is stale.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Replace the hard-coded LangChain snippet in "Govern your first agent" with a
pymdownx.tabbed block — one tab per supported Python framework (16 tabs, both
LangChain variants labelled distinctly), each showing that framework's real
governance-wiring slice. The tab block is generated by
scripts/generate_quickstart_tabs.py; the surrounding prose is generalised from
LangChain-specific wording to framework-agnostic guidance and points at the
runnable examples for the full scripts.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
Re-runs scripts/generate_quickstart_tabs.py on PRs touching the snippets,
generator, or quick-start.md and fails on any diff, so the generated tab block
can never drift from the vendored snippets + manifest. Mirrors the examples
repo's example-metadata-check gate.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
FE-rendered verification for AAASM-4513: built the MkDocs site locally
(mkdocs build --strict) and drove the rendered §3 tab set with headless
chromium (Playwright). Captures the 16-tab strip plus the active panels for
LangChain, Pydantic AI, CrewAI, and Custom, each showing that framework's
governance snippet.

Refs AAASM-4513

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rk7iwwAuGv6HbwK8hY8Fbr
@Chisanan232
Chisanan232 force-pushed the v0.0.1/AAASM-4513/quickstart_framework_tabs branch from f328e3c to 097185b Compare July 13, 2026 01:30
@Chisanan232

Copy link
Copy Markdown
Contributor Author

Review + restructure — Claude Code

Reviewed, restructured into fine-grained commits, FE-validated, and force-pushed (f328e3c…097185b). Working tree is byte-identical to the pre-resplit HEAD (verified git diff empty) plus the newly-added validation screenshots.

4-point verdict

Axis Verdict
CI ✅ All green — Analyze (python), Build documentation (PR, no deploy), CodeQL, analyze, quick-start tabs drift all pass; deploy jobs skip as expected. No real failures.
Scope vs ticket (AAASM-4513) ✅ Meets DoD — §3 renders 16 per-framework tabs via pymdownx.tabbed, generated from quickstart_snippets/manifest.json (data-driven, listed order), examples-derived (vendored from AAASM-4512), drift-gated. Both LangChain variants labelled distinctly.
Side effects ✅ None — mkdocs build --strict exits 0; quickstart_snippets/ sits outside docs_dir (not published); the pre-commit exclude is scoped to that one dir; the CI workflow is path-filtered; no runtime code touched (docs/tooling only, so the SDK CI matrix is untriggered by design).
Front-End (Playwright) ✅ Done — see below.

Front-End validation (Playwright, headless chromium)

Built the site locally and drove the rendered site/quick-start/index.html. Confirmed the 16-tab strip (data-tabs="2:16", all 16 labels) and clicked through 4 tabs — each panel shows that framework's real governance snippet. Screenshots committed to design/validation/AAASM-4513/:

  • 00-tab-strip.png — the 16-tab strip
  • 01-langchain-panel.png · 02-pydantic-ai-panel.png · 03-crewai-panel.png · 04-custom-panel.png

Commit re-split (one commit per framework)

Re-split the original 5 commits into 22 atomic, bisectable, gitmoji commits:

  • 1 × pre-commit hook-exclude config
  • 1 × vendored manifest + README (kept whole to preserve exact bytes)
  • 16 × one per framework📝 (quickstart): Add <Framework> govern snippet (Agno, AutoGen, CrewAI, Custom, Google ADK, Haystack, LangChain, LangChain (Research Agent), LangGraph, LlamaIndex, Microsoft Agent Framework, OpenAI Agents SDK, Pydantic AI, Semantic Kernel, smolagents, Strands Agents)
  • 1 × generator script
  • 1 × generated docs/quick-start.md
  • 1 × drift-check workflow
  • 1 × validation screenshots

Bot-comment disposition (github-code-quality)

All 10 inline findings target vendored, verbatim quickstart_snippets/*.py region-slices. All declined (each replied inline) — editing them would desync the vendored copy from its upstream source of truth (ai-agent-assembly/examples, AAASM-4512) and trip the drift gate; the dir is intentionally hook-excluded for exactly this reason.

# File Finding Disposition
3 google-adk, microsoft-agent-framework, pydantic-ai bodyless try/with (syntax) Declined — slice cut at region boundary; full example continues upstream
7 autogen, crewai, custom, haystack, langchain-basic, langchain-research, openai-agents "unused" var (policy/handler/tools/installed) Declined — variable consumed just below the region boundary in the runnable example

The correct place for any real cleanup is the upstream extractor (examples/scripts/extract_snippets.py), not this vendored copy.

Overall: ✅ APPROVE

Docs-only + tooling, drift-gated, FE-verified, CI green. Ready to merge (≥1 Pioneer approval still required per repo policy).

— Claude Code

@Chisanan232
Chisanan232 merged commit b912b4e into master Jul 13, 2026
8 checks passed
@Chisanan232
Chisanan232 deleted the v0.0.1/AAASM-4513/quickstart_framework_tabs branch July 13, 2026 01:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant