objects.search
Case-insensitive substring search over identities, titles, descriptions and content.
Case-insensitive substring search over identities, titles, descriptions and content.
- query
- behaviorally_verified
- module objects
- #objects
Exposure
Where this one definition is reachable. Absence is explicit: a surface not listed does not carry it.
| surface | as |
|---|---|
| MCP | tool majordomus_search |
| HTTP | GET /api/v1/search operationId objects.search |
| command line | — |
Schemas
The canonical input and output, from the Rust types; the MCP tool schema and the OpenAPI parameters and responses are derived from these.
input · SearchInput
The input of `objects.search`: what to look for, where, how much.
| property | type | required | description |
|---|---|---|---|
| kind | string | null | no | Only objects of this kind; a kind the repository does not have is an invalid input. default null |
| limit | integer | null | no | At most this many hits (default 20, at most 200). default null |
| query | string | yes | Case-insensitive substring, matched against identity, title, description and content. |
JSON Schema
{
"additionalProperties": false,
"description": "The input of `objects.search`: what to look for, where, how much.",
"properties": {
"kind": {
"default": null,
"description": "Only objects of this kind; a kind the repository does not have is an invalid input.",
"type": [
"string",
"null"
]
},
"limit": {
"default": null,
"description": "At most this many hits (default 20, at most 200).",
"format": "uint64",
"maximum": 200,
"minimum": 1,
"type": [
"integer",
"null"
]
},
"query": {
"description": "Case-insensitive substring, matched against identity, title, description and content.",
"type": "string"
}
},
"required": [
"query"
],
"title": "SearchInput",
"type": "object"
}output · SearchResult
The answer of `objects.search`.
| property | type | required | description |
|---|---|---|---|
| count | integer | yes | How many hits were returned. |
| hits | array | yes | The hits, in URI order, at most `limit` of them. |
| limit | integer | yes | The limit that applied. |
| query | string | yes | The query as given. |
JSON Schema
{
"$defs": {
"SearchHit": {
"description": "One search hit: the object, summarised, and the first matching line of its content.",
"properties": {
"description": {
"description": "The one-line description, when the kind holds one.",
"type": [
"string",
"null"
]
},
"id": {
"description": "The capability id, `<kind>.<identity>`.",
"type": "string"
},
"identity": {
"description": "The identity within the kind.",
"type": "string"
},
"kind": {
"description": "The kind the object was read as.",
"type": "string"
},
"path": {
"description": "Repository-relative source path.",
"type": "string"
},
"snippet": {
"description": "The first line of content that matched, when one did.",
"type": [
"string",
"null"
]
},
"title": {
"description": "The title, when the kind's title rule found one.",
"type": [
"string",
"null"
]
},
"uri": {
"description": "`majordomus://<kind>/<identity>`.",
"type": "string"
}
},
"required": [
"uri",
"id",
"kind",
"identity",
"path"
],
"type": "object"
}
},
"description": "The answer of `objects.search`.",
"properties": {
"count": {
"description": "How many hits were returned.",
"format": "uint",
"minimum": 0,
"type": "integer"
},
"hits": {
"description": "The hits, in URI order, at most `limit` of them.",
"items": {
"$ref": "#/$defs/SearchHit"
},
"type": "array"
},
"limit": {
"description": "The limit that applied.",
"format": "uint64",
"minimum": 0,
"type": "integer"
},
"query": {
"description": "The query as given.",
"type": "string"
}
},
"required": [
"query",
"count",
"limit",
"hits"
],
"title": "SearchResult",
"type": "object"
}Policies
- benchmark
- required — a target on every transport the exposure declares; the cases are the input type's
- cache
- process — up to 64 entries in the process, scoped by the registry fingerprint
Benchmark targets
Derived from the registry for this repository: one requirement per transport, and the cases the input type provides. The whole matrix is on the benchmarks page.
| transport | state | cases | targets |
|---|---|---|---|
| direct | covered | 2 | common-word cold+warm no-hit cold+warm |
| mcp | covered | 2 | common-word cold+warm no-hit cold+warm |
| http | covered | 2 | common-word cold+warm no-hit cold+warm |
Claims implemented beside it
Attached by the file that implements each claim; every one links to its page with the implementation and the test that proves it.
The moments this answers
- re-explained the same context to a brand-new session Repository knowledge that only ever existed in a conversation has to be re-transmitted by hand to every worker that follows.
- watched a session undo last week's decision, for the reason it was made A decision whose reason lived in a conversation cannot be reviewed, only re-argued — by a worker with less information than the first one had.
- asked what the workers did last night and had only transcripts to grep A conversation log records what was said, not what happened, so the operational question has to be answered by a person reading prose.
- spent an hour discovering something the repository already knew, twice A worker learns something expensive about the codebase, uses it once, and it dies with the session because nothing turned it into a durable record.
- went looking for why we chose this and found a chat log A decision that was reached in a session is stored where only that session can read it, so it is neither reviewable nor discoverable.
- lost a failure a worker had already reproduced, because the session ended A failure observed inside a session is described in that session and nowhere else, so the next one starts from the report rather than the evidence.
- found the same thing explained three times, slightly differently Every hand-maintained copy of a fact drifts on its own schedule, and a reader cannot tell which copy is the current one.
- watched a worker spend a day on an approach that had already been ruled out Negative results are the majority of experimental output and the part nobody records, so the search space is re-explored.
- was asked who made a change and under what policy, and had only a commit Attribution stops at the commit, so what authorised a change, what verified it and what governed it are unrecoverable.