waaseyaa / bimaaji
Bimaaji — application graph introspection and agent-safe mutation for Waaseyaa
Requires
- php: >=8.5
- nikic/php-parser: ^5.0
- symfony/routing: ^7.0
- waaseyaa/entity: ^0.1.0-alpha.300
- waaseyaa/foundation: ^0.1.0-alpha.300
- waaseyaa/routing: ^0.1.0-alpha.300
Requires (Dev)
- phpunit/phpunit: ^13.0
- waaseyaa/api: ^0.1.0-alpha.300
- waaseyaa/cli: ^0.1.0-alpha.300
- waaseyaa/node: ^0.1.0-alpha.300
- waaseyaa/user: ^0.1.0-alpha.300
Suggests
- waaseyaa/cli: Enables the graph:dump and bimaaji:install command integrations.
Provides
None
Conflicts
None
Replaces
None
- dev-main / 0.1.x-dev
- v0.1.0-alpha.300
- v0.1.0-alpha.299
- v0.1.0-alpha.298
- v0.1.0-alpha.297
- v0.1.0-alpha.296
- v0.1.0-alpha.295
- v0.1.0-alpha.294
- v0.1.0-alpha.293
- v0.1.0-alpha.292
- v0.1.0-alpha.291
- v0.1.0-alpha.290
- v0.1.0-alpha.289
- v0.1.0-alpha.288
- v0.1.0-alpha.287
- v0.1.0-alpha.286
- v0.1.0-alpha.285
- v0.1.0-alpha.284
- v0.1.0-alpha.283
- v0.1.0-alpha.282
- v0.1.0-alpha.281
- v0.1.0-alpha.280
- v0.1.0-alpha.279
- v0.1.0-alpha.278
- v0.1.0-alpha.277
- v0.1.0-alpha.276
- v0.1.0-alpha.275
- v0.1.0-alpha.274
- v0.1.0-alpha.273
- v0.1.0-alpha.272
- v0.1.0-alpha.271
- v0.1.0-alpha.270
- v0.1.0-alpha.269
- v0.1.0-alpha.268
- v0.1.0-alpha.267
- v0.1.0-alpha.266
- v0.1.0-alpha.265
- v0.1.0-alpha.264
- v0.1.0-alpha.263
- v0.1.0-alpha.262
- v0.1.0-alpha.261
- v0.1.0-alpha.260
- v0.1.0-alpha.259
- v0.1.0-alpha.258
- v0.1.0-alpha.257
- v0.1.0-alpha.256
- v0.1.0-alpha.255
- v0.1.0-alpha.254
- v0.1.0-alpha.253
- v0.1.0-alpha.252
- v0.1.0-alpha.251
- v0.1.0-alpha.250
- v0.1.0-alpha.249
- v0.1.0-alpha.248
- v0.1.0-alpha.247
- v0.1.0-alpha.246
- v0.1.0-alpha.245
- v0.1.0-alpha.244
- v0.1.0-alpha.243
- v0.1.0-alpha.242
- v0.1.0-alpha.241
- v0.1.0-alpha.240
- v0.1.0-alpha.239
- v0.1.0-alpha.238
- v0.1.0-alpha.237
- v0.1.0-alpha.236
- v0.1.0-alpha.235
- v0.1.0-alpha.234
- v0.1.0-alpha.233
- v0.1.0-alpha.232
- v0.1.0-alpha.231
- v0.1.0-alpha.230
- v0.1.0-alpha.229
- v0.1.0-alpha.228
- v0.1.0-alpha.227
- v0.1.0-alpha.226
- v0.1.0-alpha.225
- v0.1.0-alpha.224
- v0.1.0-alpha.223
- v0.1.0-alpha.222
- v0.1.0-alpha.221
- v0.1.0-alpha.220
- v0.1.0-alpha.219
- v0.1.0-alpha.218
- v0.1.0-alpha.217
- v0.1.0-alpha.216
- v0.1.0-alpha.215
- v0.1.0-alpha.214
- v0.1.0-alpha.213
- v0.1.0-alpha.212
- v0.1.0-alpha.211
- v0.1.0-alpha.210
- v0.1.0-alpha.209
- v0.1.0-alpha.208
- v0.1.0-alpha.207
- v0.1.0-alpha.206
- v0.1.0-alpha.205
- v0.1.0-alpha.204
- v0.1.0-alpha.203
- v0.1.0-alpha.202
- v0.1.0-alpha.201
- v0.1.0-alpha.200
- v0.1.0-alpha.199
- v0.1.0-alpha.198
- v0.1.0-alpha.197
- v0.1.0-alpha.196
- v0.1.0-alpha.195
- v0.1.0-alpha.194
- v0.1.0-alpha.193
- v0.1.0-alpha.192
- v0.1.0-alpha.191
- v0.1.0-alpha.190
- v0.1.0-alpha.189
- v0.1.0-alpha.188
- v0.1.0-alpha.187
- v0.1.0-alpha.186
- v0.1.0-alpha.185
- v0.1.0-alpha.184
- v0.1.0-alpha.183
- v0.1.0-alpha.182
- v0.1.0-alpha.181
- v0.1.0-alpha.180
- v0.1.0-alpha.179
- v0.1.0-alpha.178
- v0.1.0-alpha.177
- v0.1.0-alpha.176
- v0.1.0-alpha.175
- v0.1.0-alpha.174
- v0.1.0-alpha.173
- v0.1.0-alpha.172
- v0.1.0-alpha.171
- v0.1.0-alpha.170
- v0.1.0-alpha.169
- v0.1.0-alpha.168
- v0.1.0-alpha.167
- v0.1.0-alpha.166
- v0.1.0-alpha.165
- v0.1.0-alpha.164
- v0.1.0-alpha.163
- v0.1.0-alpha.162
- v0.1.0-alpha.161
- v0.1.0-alpha.160
- v0.1.0-alpha.159
- v0.1.0-alpha.158
- v0.1.0-alpha.157
- v0.1.0-alpha.156
- v0.1.0-alpha.155
- v0.1.0-alpha.154
- v0.1.0-alpha.153
- v0.1.0-alpha.152
- v0.1.0-alpha.151
- v0.1.0-alpha.150
- v0.1.0-alpha.149
- v0.1.0-alpha.148
- v0.1.0-alpha.147
- v0.1.0-alpha.146
- v0.1.0-alpha.145
- v0.1.0-alpha.144
- v0.1.0-alpha.142
- v0.1.0-alpha.140
- v0.1.0-alpha.139
- v0.1.0-alpha.138
- v0.1.0-alpha.137
- v0.1.0-alpha.136
- v0.1.0-alpha.135
- v0.1.0-alpha.134
- v0.1.0-alpha.133
- v0.1.0-alpha.132
- v0.1.0-alpha.131
- v0.1.0-alpha.130
- v0.1.0-alpha.129
- v0.1.0-alpha.128
- v0.1.0-alpha.127
- v0.1.0-alpha.126
- v0.1.0-alpha.125
- v0.1.0-alpha.124
- v0.1.0-alpha.123
- v0.1.0-alpha.122
- v0.1.0-alpha.121
- v0.1.0-alpha.120
- v0.1.0-alpha.119
- v0.1.0-alpha.118
- v0.1.0-alpha.117
This package is auto-updated.
Last update: 2026-09-02 16:13:59 UTC
README
Bimaaji is a Waaseyaa package providing application graph introspection and an agent-safe mutation protocol. The name (Anishinaabemowin: "to give life to") reflects its role: making a booted Waaseyaa application's structure visible and actionable to AI agents.
What it does
Bimaaji exposes two surfaces:
- Read-only introspection. Six
GraphSectionProviderimplementations (admin, entities, jsonapi, public_surface, routing, sovereignty) emit versionedGraphSectionpayloads that, taken together, describe what an application contains: registered entity types and their fields, every registered route plus access classification, the JSON:API surface, admin entity groupings, the current sovereignty profile, and the public-surface map. - Validated mutation. A
MutationRequest→MutationValidator→PatchSetpipeline lets an agent propose changes (e.g., "add field X to entity Y"). The validator gates every request throughSovereigntyGuardrails; the patch generator emits content-hashed, reviewable file patches. Bimaaji itself never writes to disk — patches are returned for human (or upstream agent) review.
Quick start
After installing waaseyaa/framework (which depends on this package), the framework's PackageManifestCompiler auto-discovers BimaajiServiceProvider. The application graph generator is then reachable from the container:
use Waaseyaa\Bimaaji\Graph\ApplicationGraphGenerator; $graph = $container->get(ApplicationGraphGenerator::class)->generate(); foreach ($graph->sections as $key => $section) { echo "{$key}: " . count($section->data) . " entries\n"; }
The six default section providers are pre-wired:
| Provider | Section key | Constructor deps |
|---|---|---|
AdminIntrospectionProvider |
admin |
EntityTypeManagerInterface |
EntityIntrospectionProvider |
entities |
EntityTypeManagerInterface |
JsonApiIntrospectionProvider |
jsonapi |
RouteCollection |
PublicSurfaceProvider |
public_surface |
RouteCollection |
RoutingIntrospectionProvider |
routing |
RouteCollection |
SovereigntyIntrospectionProvider |
sovereignty |
SovereigntyProfile |
Filesystem-backed spec indexing is disabled by default. Applications that
intentionally expose spec search to an authenticated bimaaji.read principal
must configure a non-empty bimaaji.specs_directory; Bimaaji never guesses a
project-root docs/specs path for a remotely callable tool.
SovereigntyProfile is derived from SovereigntyConfigInterface::getProfile() and falls back to SovereigntyProfile::Local when no config is bound. RouteCollection is looked up directly and falls back to WaaseyaaRouter::getRouteCollection().
Extending: third-party graph sections
A consuming package can contribute its own section by implementing GraphSectionProviderInterface and binding it in its own ServiceProvider::register(). The canonical tag is BimaajiServiceProvider::SECTION_PROVIDER_TAG (bimaaji.section_provider); tag your binding under it for forward-compatibility with future tagged-collection container support.
final class FooSectionProvider implements GraphSectionProviderInterface { public function getKey(): string { return 'foo'; } public function provide(): GraphSection { /* ... */ } }
Installing guidelines / skills (bin/waaseyaa bimaaji:install)
Ship the framework-canonical agent skill pack to a consumer project in
per-client formats. Lifted in spirit from Laravel Boost's
php artisan boost:install; framework-native, no Node runtime.
The skills are resources of this package — resources/skills/<id>/SKILL.md
— so the command reads the same directory whether it runs from the framework
monorepo or from a consumer's vendor/waaseyaa/bimaaji. Nothing is read from
the consuming project. An application with its own skill set points
bimaaji.skills_directory at it.
# Install for one client bin/waaseyaa bimaaji:install --client=claude # Install for several (comma-separated or repeated) bin/waaseyaa bimaaji:install --client=claude,cursor --force # Preview without writing bin/waaseyaa bimaaji:install --client=cursor --dry-run # Interactive client selection when omitted on a TTY bin/waaseyaa bimaaji:install
Every generated file frames its payload in
<!-- waaseyaa:bimaaji:install BEGIN --> / END markers. A re-run replaces
only the text between them, so notes you write above or below the block
survive upgrades. A target file that carries no markers is treated as wholly
hand-authored and still needs --force (or an interactive confirmation)
before it is replaced.
The command records what it generated in .waaseyaa/bimaaji-install.json
(commit it) and prunes targets a later skill set no longer produces. Ownership
is recorded, never inferred from a filename: a path the manifest does not
claim is never touched, a retired target you have since edited is neutralised
rather than deleted, and supporting files you add inside a generated skill
directory survive.
For Claude Code the output is .claude/skills/waaseyaa-<id>/SKILL.md — one
directory per skill, which is the only layout Claude Code discovers.
Seven launch clients: claude, cursor, codex, copilot, gemini,
windsurf, junie. See
docs/specs/bimaaji-install.md
for the per-client target paths, flag semantics, interactive UX, exit
codes, sandbox guarantees, and the five-step extension guide for
adding new clients.
Status
Bimaaji is now exposed over MCP via packages/mcp/'s
per-request bridge architecture as of 2026-05-23 (M3
bimaaji-mcp-bridge-01KS5VS8). Five #[AsAgentTool] adapters live
in packages/ai-agent/src/Tool/Bimaaji/ and surface automatically
through the AgentToolRegistryBridge with no per-tool MCP code. See
docs/specs/mcp-endpoint.md §
"Bimaaji MCP bridge" for the transport contract and packages/mcp/README.md
for the operator-facing summary.
The 2026-05-20 "PHP-only" deferral that closed #1463 was formally superseded by M3; the issue stays closed with a supersession comment linking to the M3 PR set.
Legacy MCP-server cleanup (pre-M3 consumers)
Projects (e.g., Minoo) that previously wired the deleted Node-based
bimaaji MCP server (vendor/waaseyaa/bimaaji/mcp/server.js, removed
in #1387/#1464) should:
- Remove any
mcpServers.bimaajientry pointing at the deletedserver.jsfrom.claude/settings.json. The replacement is the framework-native/mcpHTTP endpoint shipped bywaaseyaa/mcp. - Drop
composer bimaaji-mcp-installfrom post-install hooks or contributor docs — the script body was Minoo-local and has no upstream entry point. - Wire the new HTTP
/mcpendpoint instead. Seepackages/mcp/README.mdfor theclaude_desktop_config.jsonexample fragment.
Where to read more
- Doctrine spec: docs/specs/bimaaji.md — design rationale, FRs/NFRs, invariants, file map.
- Design history: docs/history/plans/2026-05-21-ai-ecosystem-beta-tightening.md — the 5-mission cluster that promoted bimaaji from "scaffolding" to "shipped."
- Roadmap context: GitHub Milestone #67 (Track 2: Bimaaji & agentic).