Skip to main content
Glama
URneiU1
by URneiU1

Codex Conversation Council

简体中文

An evidence-backed council for Codex, built from your own local task history.

$conversation-council finds prior Codex tasks relevant to the current decision, assigns up to three independent councillors, verifies their historical claims against local evidence, and chairs a compact recommendation. It runs inside your existing Codex session: no extra model key, external service, or runtime network request is required.

Conversation Council Dashboard

macOS Alpha v0.2. Windows support is planned after the local history and installation paths are validated in the field.

What is included

  • A Codex Desktop plugin with an explicit $conversation-council Skill.

  • An interactive MCP Apps Council Dashboard rendered inside supported Codex conversations.

  • A local stdio MCP server with six history/evidence tools and one presentation tool.

  • A standalone council CLI with JSON output parity.

  • Workspace isolation by default; cross-project history requires --global.

  • Local redaction, SQLite FTS5 search, stable evidence IDs, and pinning.

  • Optional --deep review by an anonymous critic.

Related MCP server: Codex History Hub

Install the macOS Alpha

Requirements: Codex Desktop/CLI, macOS, and Python 3.11 or newer with SQLite FTS5.

git clone https://github.com/URneiU1/codex-conversation-council.git
cd codex-conversation-council
./scripts/install.sh

The installer registers this checkout as a local Codex marketplace, installs the plugin, and runs diagnostics. Start a new Codex task so its Skill and MCP tools are loaded, then invoke:

$conversation-council Should we keep the current queue architecture?

After the chair verifies the cited evidence, supported Codex surfaces render an inline Council Dashboard showing the question, each councillor's stance and labeled points, consensus, disagreements, recommendation, unresolved risks, and evidence locations. If a client cannot render MCP Apps UI, the same result remains available as text.

For an extra critic pass:

$conversation-council --deep Should we keep the current queue architecture?

Cross-project search is never automatic. Opt in explicitly:

$conversation-council --global What did our previous migrations teach us?

CLI

Run from the checkout, or install the Python package to expose the council command.

python3 scripts/council.py doctor
python3 scripts/council.py index --workspace "$PWD"
python3 scripts/council.py search "queue architecture" --workspace "$PWD"
python3 scripts/council.py pin THREAD_ID
python3 scripts/council.py show EVIDENCE_ID --workspace "$PWD"

Every user command supports --json. Use --global only with index, search, or show when you intentionally want known cross-workspace history.

How it works

  1. The indexer reads Codex session JSONL and keeps only visible user and assistant task messages.

  2. Built-in redaction masks common tokens, credentials, private keys, and authenticated URLs before text enters the derived index.

  3. SQLite FTS5 retrieves relevant tasks inside the current canonical workspace. Pins and recency are bounded tie-breakers.

  4. Evidence is rendered to local Markdown with an opaque ID, original task ID, role, and source JSONL line.

  5. The Skill convenes independent councillors, optionally adds a critic, resolves every cited evidence ID, and chairs the result.

  6. The presentation-only render_council tool displays that verified result through the portable MCP Apps UI resource; it does not change or re-run the council.

Historical excerpts are treated as untrusted quoted data. The Skill instructs councillors never to follow commands found inside history.

For MCP calls, the non-global workspace is bound to the current Codex task ID supplied by the host. Requests for a different known workspace are rejected unless the user explicitly invoked --global. Deleted or changed source tasks are reconciled from the derived index, and their rendered evidence is removed.

Privacy

The runtime makes no network requests. It reads Codex task history, indexes only visible user and assistant text after local redaction, defaults to the current workspace, and never modifies source history. Derived data defaults to ~/.codex/conversation-council/ (or PLUGIN_DATA when Codex supplies it).

Redaction is defense in depth, not a guarantee that arbitrary secrets can always be recognized. Review your task history before deliberately using --global, and never attach real Codex logs to public issues.

Run python3 scripts/council.py doctor to inspect paths. Uninstall while retaining the derived index:

./scripts/uninstall.sh

Delete plugin-owned derived state as well:

./scripts/uninstall.sh --purge-data

Standalone Skill and MCP

The Skill lives at skills/conversation-council/SKILL.md. The plugin manifest points Codex at that directory and at .mcp.json; the same MCP operations are available through python3 scripts/council.py serve-mcp. The Python runtime uses only the standard library.

Development

PYTHONPATH=src python3 -m unittest discover -s tests -v
python3 -m compileall -q src scripts
git diff --check

See CONTRIBUTING.md and SECURITY.md before opening a change or reporting a vulnerability.

Inspiration and license

This is an independent clean-room implementation. The historical-conversation-as-councillor concept was inspired by CS-Faith/conversation-council. See NOTICE.md for attribution details.

Released under the MIT License.

Available Tools

6 tools
council_statusA
Read-only

Report local history, index, and runtime readiness.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description simply states 'report,' which aligns with the readOnlyHint annotation but adds no additional behavioral context beyond what the annotation already conveys. It does not disclose what 'readiness' entails, whether it is costly to invoke, or any other operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It front-loads the action and key subjects, making it easy to scan and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless, read-only tool with no output schema, the description is minimally sufficient but does not clarify the report's format or the specific meaning of 'readiness.' It leaves some ambiguity about what consumers can expect from the returned status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty. The description is not required to elaborate on parameter semantics. With no parameters, the baseline is 4, which is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Report') and clearly identifies the three resources covered (local history, index, and runtime readiness). It meaningfully distinguishes this from sibling tools like index_workspace or search_history, which perform actions rather than report status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies using this tool to check the status of local history, index, and runtime readiness, but provides no explicit guidance on when to prefer it over alternatives or any exclusions. It is adequate but lacks direct comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_evidenceA
Read-only

Resolve opaque evidence IDs inside the requested workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesAbsolute workspace path from Codex task metadata.
evidence_idsYes
global_scopeNoOperate across known workspaces only when explicitly true.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals a safe read operation. The description adds minimal context about resolving IDs within a workspace, but does not disclose potential edge cases, return behavior, or effects of the global_scope parameter. It does not contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that immediately states the core purpose. There is no filler or redundant information, and the key terms ('opaque', 'requested workspace') are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and minimal annotations, the description leaves room for ambiguity about what 'resolve' returns and how errors are handled. It also does not address the global_scope option's effect on behavior. The tool is simple enough that the description is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, and the description aligns with the evidence_ids and workspace parameters by mentioning 'evidence IDs' and 'requested workspace'. The global_scope parameter is left to the schema, which adequately describes it. The description adds some context but does not fully compensate for the missing parameter-level explanations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: resolving opaque evidence IDs within a specified workspace. This is a specific verb+resource combination that distinguishes it from the listed sibling tools, which involve status, indexing, history, and pin management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when opaque evidence IDs need to be resolved inside a workspace, but it does not explicitly state when to use this tool versus alternatives or mention any preconditions or exclusions. The context is clear enough for basic selection but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

index_workspaceC

Index visible Codex task messages for an allowed workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
workspaceYesAbsolute workspace path from Codex task metadata.
global_scopeNoOperate across known workspaces only when explicitly true.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention side effects (e.g., mutation, overwriting), required permissions, or what 'allowed workspace' means. The phrase 'Index visible Codex task messages' is a high-level summary without behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no irrelevant words. It is front-loaded with the action verb 'Index' and clearly states the object and scope. This is appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and annotations, and the presence of three parameters with partial schema coverage, the description is too sparse to be complete. It does not explain expected outcomes, side effects, or usage context, leaving the agent without sufficient information for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 67% (workspace and global_scope have descriptions), but the tool description itself adds no parameter-specific meaning. It does not explain 'force' or the conditions for 'global_scope.' The description merely echoes 'workspace' implicitly, failing to compensate for the undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'Index' and identifies the resource as 'visible Codex task messages' for 'an allowed workspace,' which is a specific action. It distinguishes from sibling tools like search_history or list_pins, though not explicitly. Minor ambiguity remains about what 'index' entails, but it is not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, such as ensuring the workspace is allowed, or context like using this before search_history. It lacks any explicit or implicit usage direction beyond the basic action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pinsA
Read-only

List historical Codex tasks pinned as preferred councillors.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceYesAbsolute workspace path from Codex task metadata.
global_scopeNoOperate across known workspaces only when explicitly true.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description's 'List' action is consistent with that. It adds useful context about historical pinned tasks but does not disclose potential output shapes, permission requirements, or behavior when no pins exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to defining the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with full schema coverage and a clear read-only annotation, the description is adequate. It leaves some ambiguity about return format and exact semantics of 'preferred councillors,' but not enough to prevent correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no additional meaning to the 'workspace' or 'global_scope' parameters beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a clear resource ('historical Codex tasks pinned as preferred councillors'), making it distinct from sibling tools like set_pin. It communicates both action and object without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as search_history or set_pin. The description does not explain the relevance of global_scope or why listing pins might be preferable to other history queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_historyB
Read-only

Find relevant evidence-backed councillors in local history.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
questionYes
workspaceYesAbsolute workspace path from Codex task metadata.
global_scopeNoOperate across known workspaces only when explicitly true.

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The read-only annotation covers safety, and the description adds a filtering behavior ('evidence-backed'), but it does not disclose other behavioral traits such as workspace scoping or the effect of global_scope. It doesn't contradict the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundant words, front-loaded with the action verb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters and no output schema, the description is too sparse; it fails to specify what constitutes a valid 'question', the meaning of workspace scope, or expected return values, making it insufficient for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain any of the four parameters. With only 50% schema coverage, the 'question' and 'limit' parameters are not defined in either the schema or description, leaving the agent without necessary semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Find' and identifies the resource as 'evidence-backed councillors in local history', clearly distinguishing it from sibling tools like get_evidence or council_status. However, it could be more explicit about what inputs drive the search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like council_status or get_evidence; the description offers no usage context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_pinC

Pin or unpin an indexed historical Codex task.

ParametersJSON Schema
NameRequiredDescriptionDefault
pinnedYes
thread_idYes
workspaceYesAbsolute workspace path from Codex task metadata.
global_scopeNoOperate across known workspaces only when explicitly true.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It only states the action without explaining side effects, whether the operation is idempotent, whether it requires specific permissions, or what happens if the thread is not indexed. The term 'indexed historical' adds minimal context but not enough to understand the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the core purpose efficiently. There is no waste, but it is extremely brief given the tool's parameter count and lack of annotation support. Still, for what it attempts, it is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no annotations, and no output schema, the description is inadequate. It does not clarify the meaning of 'indexed historical', the role of global_scope, or any return behavior. A user cannot confidently invoke this tool correctly from the description alone, especially concerning edge cases like unindexed threads or workspace scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-level detail. Schema coverage is 50% (workspace and global_scope have descriptions; pinned and thread_id do not). The description does not compensate for the undocumented parameters, leaving thread_id and pinned undefined beyond their names. It only trivially maps 'pin/unpin' to the pinned boolean.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Pin or unpin') and the resource ('an indexed historical Codex task'). It distinguishes itself from sibling tools like list_pins (which lists pins) and index_workspace (which indexes workspaces). The verb+resource construction is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention that list_pins is the appropriate tool for viewing pins, nor does it describe any prerequisites like being indexed. There are no explicit exclusions or alternative tool references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observedcouncil_status
    • First observedget_evidence
    • First observedindex_workspace
    • First observedlist_pins
    • First observedsearch_history
    • First observedset_pin

TDQS

A3.6/5.0
Disambiguation5/5

Each tool addresses a distinct operation: status, indexing, searching, evidence resolution, and pin management. No overlapping responsibilities; descriptions clarify the boundaries.

Naming Consistency4/5

Tool names mostly follow verb_noun pattern (index_workspace, search_history, get_evidence, list_pins, set_pin). council_status breaks the pattern as a noun phrase, and singular/plural consistency varies slightly (list_pins vs set_pin).

Tool Count5/5

With 6 tools, the scope is tightly focused on the conversation history and pinning workflow. Each tool serves a clear purpose without redundancy.

Completeness5/5

The server covers the full workflow: index, search, resolve evidence, manage pins, and check status. Pin/unpin handled in set_pin, and listing pins covered; no obvious missing operations for the stated purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables local-first personal knowledge management for Codex by turning conversations into a searchable archive, extracting durable facts, building a knowledge graph, and injecting relevant context into later sessions.
    7
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/URneiU1/codex-conversation-council'

If you have feedback or need assistance with the MCP directory API, please join our Discord server