- Added "Proof of Concept" section showcasing Orchestrated Discussions
as a real-world example of the composable system (21 tools, 0 deps)
- Added "Before vs After" code comparison showing traditional Python
approach vs CmdForge pipes/composition
- Visual flow diagram showing how tools chain together in practice
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed hero from "Build Custom AI Commands in YAML" to
"Ask for Capabilities. Compose Solutions."
- Added semantic search demo in hero showing registry describe
- Renamed three pillars to: Ask for Capabilities, Compose Solutions,
Share & Discover
- Added "See It In Action" section with side-by-side demos of
semantic search and tool composition
- Added provider-agnostic callout highlighting multi-AI support
- Updated meta description to reflect vision
- Swapped secondary CTA from Tutorials to Philosophy page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Mermaid.js support to base template
- Add "The System" diagram showing AI assistant flow
- Add "Composable By Design" diagram showing tool composition
- Add "Future Vision" section with networked nodes diagram
- Diagrams from ChatGPT conversation about project vision
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add 'cmdforge providers for-tools <tool>...' to list providers used by tools
- Add --warm flag to pre-load local models (Ollama) for faster first inference
- Warm larger models first to claim contiguous GPU memory
- Skip cloud providers (claude, opencode, gemini) during warm-up
- Add max_tokens field to PromptStep for controlling output length
- Pass max_tokens to call_provider with provider-specific flags
- Add comprehensive tests for provider functionality
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add /philosophy page explaining the paradigm shift from libraries to capabilities
- Visual diagrams comparing traditional vs CmdForge approach (bin of circuits vs organized workshop)
- Composition flow diagram showing tools chaining together
- Link from About page and homepage
- Update CLAUDE.md with accurate field names (output_schema not structured_output)
- Add Provider Install dialog to GUI dialogs list
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Provider fallback system:
- Add optional fallback field to Provider dataclass
- Automatically try fallback provider when primary fails (timeout, error, offline)
- Prevent infinite loops with circular fallback detection
- Add fallback column and dropdown in providers UI
Visual schema builder for prompt steps:
- Add SchemaBuilderDialog with table-based field editor
- Support field name, type, description, and required flag
- Live JSON schema preview
- Integrate into PromptStepDialog with Edit Schema button
- Fix output_schema being lost when editing prompt steps
Other improvements:
- Add search box to tools page
- Improve schema example generation for structured output
- Update CLAUDE.md documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add schema validation and retry logic for AI responses:
- Add output_schema, max_retries, plain_text fields to PromptStep
- Add DEFAULT_OUTPUT_SCHEMA with output/reasoning fields
- Implement append_schema_instructions() for prompt augmentation
- Implement validate_schema() using jsonschema library
- Add retry logic with error feedback on validation failure
- Enhance substitute_variables() for nested field access ({var.field})
- Add jsonschema to dependencies
- Update GUI dialog with plain_text checkbox and max_retries spinner
- Add comprehensive tests for structured output and nested access
Tools using plain_text=True bypass validation (current behavior).
Tools without plain_text get structured JSON output with schema enforcement.
Migration Phase 1 complete. Next: Apply plain_text=True to all 72 tools.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add strip_fences field to PromptStep for removing markdown code fences
- Fix exec() to use same dict for globals and locals, allowing nested
functions to access module-level imports
- Add GUI checkbox for strip_fences option
- Update CLAUDE.md with improved documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
0.5s × 136 tools = 68s of sleep alone, which combined with network
time exceeded gunicorn's 120s worker timeout.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Make tool argument optional when --all is used, add validation for
single-tool mode without tool name, and allow admin role to update
READMEs for tools owned by any publisher (e.g. official namespace).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- PATCH /api/v1/tools/<owner>/<name>/readme updates README without
affecting config hash or requiring version bump
- Add RegistryClient.update_readme() method
- Add `cmdforge registry update-readme` CLI command with --all flag
for batch updating all published tools
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add collapsible README section to tools page detail panel with lazy loading
- README loads from disk only when user clicks the toggle bar
- Section collapses to a single header bar, expands to show content
- Add --owner flag to registry publish command for admin use
- Simplify dependency gathering in publish to use unified code path
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Client: add submit_issue() method for POST /tools/{owner}/{name}/issues
- New IssueDialog with type (bug/compatibility/security), severity, title,
and description fields with character count and validation
- Report Issue button in rating bar beside Rate Tool, visible for registry
tools only. Submits via background SubmitIssueWorker thread.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Increased button size from 36x36 to 40x40 and added padding: 0px so the
star glyphs render fully instead of being cut off on the sides.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
_fetch_my_slug() was making a synchronous HTTP request on the main thread
during tool selection, which froze the UI if the server was slow or
unreachable. Moved the /me call into StatusSyncWorker which already runs
in a background thread on page load. The slug is delivered via a
slug_fetched signal and the rate button re-evaluates when it arrives.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- save_tool() now preserves registry_hash, registry_status, registry_owner,
and registry_feedback from existing config when writing Tool.to_dict(),
preventing edits from erasing registry metadata.
- CLI publish (registry_commands.py) and collection publish
(collections_commands.py) now save registry_owner from the publish
response, matching the GUI publish dialog behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tools in flat directories (no owner subdir) had no way to resolve the
registry owner for rating API calls. This affected both own-published
tools and admin-published official tools.
- Publish dialog: save registry_owner from the publish response
- Status sync worker: backfill registry_owner from hash-based lookup
- get_tool_registry_info: check registry_owner before fallback_owner
Existing tools get backfilled on next background sync.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tools published by the user and stored at ~/.cmdforge/<name>/ (no owner
subdir) had no way to resolve the registry owner, so get_tool_registry_info
returned None and the rating bar was hidden. Added fallback_owner parameter
that uses the current user's slug when no owner can be determined from the
path or config.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Own tools now display the rating bar (average, count) so authors can
see how their tool is rated. The Rate button is hidden entirely for
own tools rather than shown disabled, since the server enforces the
self-review restriction anyway.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>