|
9 | 9 | - PHPStan Level 7 clean across the configured analysis set as of 2026-07-02, including the asset loading helper path |
10 | 10 | - MCP v1 refactoring complete: per-tool REST dispatch, RestBackedToolInterface, ToolContributor, @phpstan-type AbilityDefinition |
11 | 11 | - MCP namespace/category/prefix now filterable via MCPConfig utility class (saltus/framework/mcp/namespace, saltus/framework/mcp/ability_category, saltus/framework/mcp/ability_prefix) |
12 | | -- MCP/REST capability gating refactored: McpPolicy class with mcp_tools/show_in_mcp gating; ModelRestPolicy switched from saltus_rest array to per-feature config-section model (config.meta.show_in_rest) |
| 12 | +- MCP/REST capability gating refactored: McpPolicy class with mcp_tools/show_in_mcp gating; ModelRestPolicy switched from saltus_rest array to per-feature config-section model (using show_in_rest and show_in_mcp gates) |
13 | 13 | - Legacy refactoring: inline REST controller logic extracted into shared service classes (SaltusSingleExport, MetaFieldProvider, ReorderPostsService, SettingsManager) wired into both REST controllers and MCP tools — resolved 2026-07-03 |
14 | 14 | - Conditional registration fix: `is_needed()` gate bypass for RestRouteProvider/ToolContributor registries via two-pass approach in `Core`, ensuring REST routes always appear in WP-REST index even before `REST_REQUEST` is defined — resolved 2026-07-06 |
15 | 15 | - 250 PHPUnit tests passing (669 assertions), PHPStan Level 7 clean across the configured analysis set |
@@ -397,3 +397,128 @@ frontend: |
397 | 397 | ## Tracking |
398 | 398 | - Check GitHub Issues for active sprint items. |
399 | 399 | - Active development on `feature/mcp-v1` branch. |
| 400 | +
|
| 401 | +
|
| 402 | +
|
| 403 | +//// new |
| 404 | +• Current state: Saltus already has the “external agent connects to WordPress |
| 405 | + and modifies content through governed abilities” piece partly implemented. |
| 406 | + What it does not appear to have yet is a first-class “context control center” |
| 407 | + model or a mandatory editorial approval queue for agent writes. |
| 408 | +
|
| 409 | +──────────────────────────────────────────────────────────────────────────────── |
| 410 | +
|
| 411 | +• For Saltus, that translates less like “Drupal AI” and more like a WordPress- |
| 412 | + native AI governance layer for CPT-driven plugins. |
| 413 | +
|
| 414 | + Saltus already has the foundation: model-defined CPTs, REST routes, MCP/ |
| 415 | + Abilities tools, capability checks, audit logging, rate limits, health checks, |
| 416 | + and per-model mcp_tools / show_in_mcp gates. The missing higher-level product |
| 417 | + layer would be this: |
| 418 | +
|
| 419 | + Context Control Center |
| 420 | +
|
| 421 | + A Saltus model/config area where a plugin defines: |
| 422 | +
|
| 423 | + - brand voice |
| 424 | + - field-level writing rules |
| 425 | + - audience profiles |
| 426 | + - taxonomy/content standards |
| 427 | + - allowed statuses |
| 428 | + - forbidden actions |
| 429 | + - required review rules |
| 430 | + - per-CPT AI instructions |
| 431 | +
|
| 432 | + In Saltus terms, this could live as model config, for example: |
| 433 | +
|
| 434 | + 'options' => [ |
| 435 | + 'show_in_rest' => true, |
| 436 | + 'mcp_tools' => true, |
| 437 | + ], |
| 438 | + 'config' => [ |
| 439 | + 'ai_context' => [ |
| 440 | + 'brand_voice' => 'Clear, practical, expert, no hype.', |
| 441 | + 'audiences' => ['developers', 'site editors'], |
| 442 | + 'rules' => [ |
| 443 | + 'never_publish_directly' => true, |
| 444 | + 'require_human_review' => true, |
| 445 | + 'preserve_technical_accuracy' => true, |
| 446 | + ], |
| 447 | + ], |
| 448 | + ] |
| 449 | +
|
| 450 | + Then MCP tools like create_post, update_post, update_settings, and |
| 451 | + update_meta_fields would receive this context before executing or expose it |
| 452 | + through a new tool like saltus/get-context. |
| 453 | +
|
| 454 | + Inside AI |
| 455 | +
|
| 456 | + This would mean AI operating from inside WordPress admin. |
| 457 | +
|
| 458 | + Examples: |
| 459 | +
|
| 460 | + - AI buttons beside metabox fields |
| 461 | + - “Improve title” |
| 462 | + - “Summarize this CPT entry” |
| 463 | + - “Generate excerpt from meta” |
| 464 | + - “Validate against brand rules” |
| 465 | + - “Suggest taxonomy terms” |
| 466 | + - “Prepare draft update” |
| 467 | +
|
| 468 | + The key point: inside AI would still use Saltus models and WordPress |
| 469 | + permissions. It should not bypass CPT config, field schemas, validation, or |
| 470 | + post status rules. |
| 471 | +
|
| 472 | + Outside AI |
| 473 | +
|
| 474 | + This maps directly to Saltus MCP/Abilities. |
| 475 | +
|
| 476 | + External agents such as Codex, Claude Desktop, Cursor, or custom automation |
| 477 | + clients connect to WordPress and call: |
| 478 | +
|
| 479 | + - saltus/list-models |
| 480 | + - saltus/get-model |
| 481 | + - saltus/list-posts |
| 482 | + - saltus/get-post |
| 483 | + - saltus/create-post |
| 484 | + - saltus/update-post |
| 485 | + - saltus/update-settings |
| 486 | + - saltus/get-meta-fields |
| 487 | +
|
| 488 | + Saltus already has this architectural direction. The next step would be adding |
| 489 | + stronger editorial governance around mutating tools. |
| 490 | +
|
| 491 | + Editorial Review |
| 492 | +
|
| 493 | + Right now, agent writes can be permission-gated and audited. To match the idea |
| 494 | + you quoted, Saltus would need an approval layer: |
| 495 | +
|
| 496 | + - agent proposes a change |
| 497 | + - Saltus stores it as a draft, revision, or pending change record |
| 498 | + - human editor reviews diff |
| 499 | + - editor approves, rejects, or edits |
| 500 | + - only approved changes are published |
| 501 | + - audit log records the full chain |
| 502 | +
|
| 503 | + Practically, mutating MCP tools should default to: |
| 504 | +
|
| 505 | + AI write -> draft/pending/revision -> human approval -> publish |
| 506 | +
|
| 507 | + Not: |
| 508 | +
|
| 509 | + AI write -> publish |
| 510 | +
|
| 511 | + Best Saltus framing |
| 512 | +
|
| 513 | + I’d describe it as: |
| 514 | +
|
| 515 | + > Saltus can become the governance layer for AI-operated WordPress content |
| 516 | + > models: models define the content structure, context rules define how AI |
| 517 | + > should behave, MCP/Abilities expose controlled operations to external |
| 518 | + > agents, and WordPress revisions, statuses, capabilities, and audit logs keep |
| 519 | + > every change reviewable. |
| 520 | +
|
| 521 | + The big opportunity is that Saltus already owns the model definition. That |
| 522 | + means it can give AI agents structured knowledge of each CPT, its fields, |
| 523 | + allowed operations, and editorial policy without every plugin author |
| 524 | + rebuilding that machinery. |
0 commit comments