Skip to content

Long objectives get lost: 4000-char hard limit + model summarizes instead of passing verbatim #37

Description

@ErcinDedeoglu

Problem 1: Hardcoded 4000-character limit

The plugin hardcodes a 4000-character limit on goal objectives, evidence, and blockers. There is no plugin option to change it.

  • validateObjective throws goal objective must be at most 4000 characters
  • validateEvidence enforces the same limit
  • The create_goal / set_goal / update_goal_objective tool schemas use maxLength: 4000, which also causes model clients to silently truncate long objectives before the tool is even called

Proposed solution

Add a plugin option, e.g. max_objective_chars (default 4000 for backward compatibility), that controls:

  1. validateObjective / validateEvidence limits
  2. The zod max() and JSON schema maxLength values exposed in the tool schemas, so clients do not truncate prematurely

Alternatively, raising the hardcoded default (e.g. to 20k+) would already help.

Problem 2: Long objectives are either over-summarized or over-pasted

The current template line is weak:

Otherwise, create a new goal with create_goal. Use the full arguments as the objective.

Observed failure modes with long /goal input:

  1. Over-summarization: the model calls create_goal with a condensed paraphrase/pointer instead of the actual content (multi-paragraph objective collapsed into a one-line summary referencing an external file).
  2. Verbatim over-correction: if the template is strengthened to demand character-for-character verbatim passing, models paste entire raw documents (e.g. a whole markdown spec) into the objective without shaping it into a usable goal statement.

Proposed solution

Wording that lands between the two failure modes — complete but well-formed:

Build the objective as a complete, faithful representation of the arguments: keep every requirement, constraint, scope boundary, and success criterion with no omissions or loss of meaning. You may restructure and rephrase for clarity and coherence, but do NOT compress, truncate, or drop any content, and do NOT substitute the content with references or pointers to external files.

Long-term, consider making this mechanically enforced rather than prompt-based — e.g. the /goal command handler creating the goal itself from the raw arguments via the SDK, so objective fidelity does not depend on model compliance at all.

Current workaround

Patching the cached dist/server.js:

  • s/4000/100000/g for the limits
  • rewriting the goalCommandTemplate line with the balanced wording above

Both patches are lost on every plugin update.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions