Smos Logo Smos

A comprehensive self-management system

Work report

Documentation about the smos-query work command, for the contextual work report

The work report is the most important report that you will use. This report shows you your agenda for the day, and the next actions that you can perform in your current context, as well as any warnings that you need to see about the state of your workflow.

Contexts

For context-based work reports, you will first need contexts. For example, you can use these in your config file:

work:
  contexts:
    home: 'ancestor:tag:home'
    office: 'ancestor:tag:office'
    airplane: 'tag:offline'

These specify that, when you're at home, you can only do the tasks that are tagged 'home' or whose parents are tagged as 'home'.

Advanced work reports

You can also configure checks, collumns and a sorter for this report as follows:

work:
  checks:
    - 'property:timewindow'
  columns:
    - 'file'
    - 'state'
    - 'header'
    - 'property:timewindow'
  sorter: 'reverse:property-as-time:timewindow'

Here we configure smos-query to warn us if any of the entries that should be reported is missing a timewindow property. We also specify that the collumns in the report should be the file, the todo state, the header and the timewindow property for each entry. The last line configures smos-query to sort these entries by their timewindow property value. Filters, columns and sorters are all documented on their own pages.

Reference

Options

smos-query work [CONTEXT] [TIME_FILTER] [--time-filter PROPERTY_NAME] [[--base-filter FILTER]] [-f|--filter FILTER [-f|--filter FILTER]] [--columns COLUMNS] [--sort SORTER [--sort SORTER]] [--hide-archive | --show-archive|-a] [--waiting-threshold TIME] [--stuck-threshold TIME]

  CONTEXT             The context that you are in                                                                                                                                                                                                                           
  TIME_FILTER         A filter to filter by time                                                                                                                                                                                                                            
  --time-filter       The property to use to filter by time                                                                                                                                                                                                                 
  --base-filter       The base work filter                                default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  -f|--filter         A filter to filter entries by                                                                                                                                                                                                                         
  -f|--filter         A filter to filter entries by                                                                                                                                                                                                                         
  --columns           The columns in the report                           default: OntoFile :| [OntoState,OntoHeader]                                                                                                                                                       
  --sort              A sorter to sort entries by                                                                                                                                                                                                                           
  --sort              A sorter to sort entries by                                                                                                                                                                                                                           
  --hide-archive      Hide archived files                                                                                                                                                                                                                                   
  --show-archive|-a   Do not hide archived files                                                                                                                                                                                                                            
  --waiting-threshold The threshold at which to color waiting entries red default: Days 7                                                                                                                                                                                   
  --stuck-threshold   The threshold at which to color stuck projects red  default: Weeks 3                                                                                                                                                                                  

Environment variables

  SMOS_WORK_CONTEXT CONTEXT             The context that you are in                                                                                                                                                                                                                             
  SMOS_WORK_TIME TIME_FILTER            A filter to filter by time                                                                                                                                                                                                                              
  SMOS_WORK_TIME_FILTER PROPERTY_NAME   The property to use to filter by time                                                                                                                                                                                                                   
  SMOS_WORK_BASE_FILTER FILTER          The base work filter                                  default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  SMOS_WORK_FILTER FILTER               A filter to filter entries by                                                                                                                                                                                                                           
  SMOS_WORK_COLUMNS COLUMNS             The columns in the report                             default: OntoFile :| [OntoState,OntoHeader]                                                                                                                                                       
  SMOS_WORK_SORTER SORTER               A sorter to sort entries by                                                                                                                                                                                                                             
  SMOS_WORK_IGNORE_ARCHIVE BOOL         Whether to consider archived entries                  default: HideArchive                                                                                                                                                                              
  SMOS_WAITING_THRESHOLD TIME           The threshold at which to color waiting entries red   default: Days 7                                                                                                                                                                                   
  SMOS_STUCK_THRESHOLD TIME             The threshold at which to color stuck projects red    default: Weeks 3                                                                                                                                                                                  

Configuration values

  The context that you are in
  work.context:
    # or null
    <string>
  Contexts for the work report
  default: fromList []
  work.contexts:
    # or null
    <key>: 
      def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  Checks for the work report
  default: fromList []
  work.checks:
    # or null
    - def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  A filter to filter by time
  work.time:
    # or null
    def: Time
    # any of
    [ # Time string, for example:
      #  2s
      #  2 seconds
      #  3m
      #  3 minutes
      #  4h
      #  4 hours
      #  5d
      #  5 days
      #  6w
      #  6 weeks
      #  7mo
      #  7 months
      #  8y
      #  8 years
      <string>
    , # Interpreted as a number of days
      <integer> # 64 bit unsigned integer
    ]
  The property to use to filter by time
  work.time-filter:
    # or null
    def: PropertyName
    <string>
  The base work filter
  default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))
  work.base-filter:
    # or null
    def: EntryFilter
    # A filter is a string of one of the following forms:
    # 
    # tag:<tag>
    # state:<state>
    # file:<file>
    # level:<level>
    # header:<header>
    # property:<property-name>
    # property:<property-name>:<property-value>
    # property:<property-name>:time:<comparison>:<time>
    # parent:<filter>
    # ancestor:<filter>
    # child:<filter>
    # legacy:<filter>
    # not:<filter>
    # (<filter> and <filter>)
    # (<filter> or <filter>)
    <string>
  A filter to filter entries by
  work.filter:
    # any of
    [ null
    , def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
    , - ref: EntryFilter
    ]
  The columns in the report
  default: OntoFile :| [OntoState,OntoHeader]
  work.columns:
    # or null
    - def: Projection
      # A column (projection) is a string of one of the following forms:
      # 
      # file
      # state
      # header
      # tag:<tag-name>
      # property:<property-name>
      # timestamp:<timestamp-name>
      # ancestor:<projection>
      <string>
  A sorter to sort entries by
  work.sorter:
    # any of
    [ null
    , def: Sorter
      # A sorter is a string of one of the following forms:
      # 
      # file
      # header
      # state
      # tag:<tag>
      # property:<property-name>
      # property-as-time:<property-name>
      # timestamp:<timestamp-name>
      # reverse:<sorter>
      # (<sorter> then <sorter>)
      <string>
    , - ref: Sorter
    ]
  Whether to consider archived entries
  default: HideArchive
  work.hide-archive:
    # or null
    <boolean>
  The threshold at which to color waiting entries red
  default: Days 7
  waiting.threshold:
    # or null
    def: Time
    # any of
    [ # Time string, for example:
      #  2s
      #  2 seconds
      #  3m
      #  3 minutes
      #  4h
      #  4 hours
      #  5d
      #  5 days
      #  6w
      #  6 weeks
      #  7mo
      #  7 months
      #  8y
      #  8 years
      <string>
    , # Interpreted as a number of days
      <integer> # 64 bit unsigned integer
    ]
  The threshold at which to color stuck projects red
  default: Weeks 3
  stuck.threshold:
    # or null
    def: Time
    # any of
    [ # Time string, for example:
      #  2s
      #  2 seconds
      #  3m
      #  3 minutes
      #  4h
      #  4 hours
      #  5d
      #  5 days
      #  6w
      #  6 weeks
      #  7mo
      #  7 months
      #  8y
      #  8 years
      <string>
    , # Interpreted as a number of days
      <integer> # 64 bit unsigned integer
    ]

Combined settings

Usage: smos-query work [CONTEXT] [TIME_FILTER] [--time-filter PROPERTY_NAME] [[--base-filter FILTER]] [-f|--filter FILTER [-f|--filter FILTER]] [--columns COLUMNS] [--sort SORTER [--sort SORTER]] [--hide-archive | --show-archive|-a] [--waiting-threshold TIME] [--stuck-threshold TIME]

Run the work report

Available settings:
  Show this help text
  switch: -h|--help

  The context that you are in
  argument: CONTEXT
  env: SMOS_WORK_CONTEXT CONTEXT
  config:
    work.context: # or null
      <string>

  Contexts for the work report
  config:
    work.contexts: # or null
      <key>: 
        def: EntryFilter
        # A filter is a string of one of the following forms:
        # 
        # tag:<tag>
        # state:<state>
        # file:<file>
        # level:<level>
        # header:<header>
        # property:<property-name>
        # property:<property-name>:<property-value>
        # property:<property-name>:time:<comparison>:<time>
        # parent:<filter>
        # ancestor:<filter>
        # child:<filter>
        # legacy:<filter>
        # not:<filter>
        # (<filter> and <filter>)
        # (<filter> or <filter>)
        <string>
  default: fromList []

  Checks for the work report
  config:
    work.checks: # or null
      - def: EntryFilter
        # A filter is a string of one of the following forms:
        # 
        # tag:<tag>
        # state:<state>
        # file:<file>
        # level:<level>
        # header:<header>
        # property:<property-name>
        # property:<property-name>:<property-value>
        # property:<property-name>:time:<comparison>:<time>
        # parent:<filter>
        # ancestor:<filter>
        # child:<filter>
        # legacy:<filter>
        # not:<filter>
        # (<filter> and <filter>)
        # (<filter> or <filter>)
        <string>
  default: fromList []

  A filter to filter by time
  argument: TIME_FILTER
  env: SMOS_WORK_TIME TIME_FILTER
  config:
    work.time: # or null
      def: Time
      # any of
      [ # Time string, for example:
        #  2s
        #  2 seconds
        #  3m
        #  3 minutes
        #  4h
        #  4 hours
        #  5d
        #  5 days
        #  6w
        #  6 weeks
        #  7mo
        #  7 months
        #  8y
        #  8 years
        <string>
      , # Interpreted as a number of days
        <integer> # 64 bit unsigned integer
      ]

  The property to use to filter by time
  option: --time-filter PROPERTY_NAME
  env: SMOS_WORK_TIME_FILTER PROPERTY_NAME
  config:
    work.time-filter: # or null
      def: PropertyName
      <string>

  The base work filter
  option: --base-filter FILTER
  env: SMOS_WORK_BASE_FILTER FILTER
  config:
    work.base-filter: # or null
      def: EntryFilter
      # A filter is a string of one of the following forms:
      # 
      # tag:<tag>
      # state:<state>
      # file:<file>
      # level:<level>
      # header:<header>
      # property:<property-name>
      # property:<property-name>:<property-value>
      # property:<property-name>:time:<comparison>:<time>
      # parent:<filter>
      # ancestor:<filter>
      # child:<filter>
      # legacy:<filter>
      # not:<filter>
      # (<filter> and <filter>)
      # (<filter> or <filter>)
      <string>
  default: FilterSnd (FilterWithinCursor (FilterEntryTodoState (FilterMaybe False (FilterOr (FilterSub (TodoState {todoStateText = "NEXT"})) (FilterSub (TodoState {todoStateText = "STARTED"}))))))

  A filter to filter entries by
  option: -f|--filter FILTER

  A filter to filter entries by
  option: -f|--filter FILTER

  A filter to filter entries by
  env: SMOS_WORK_FILTER FILTER
  config:
    work.filter: # any of
      [ null
      , def: EntryFilter
        # A filter is a string of one of the following forms:
        # 
        # tag:<tag>
        # state:<state>
        # file:<file>
        # level:<level>
        # header:<header>
        # property:<property-name>
        # property:<property-name>:<property-value>
        # property:<property-name>:time:<comparison>:<time>
        # parent:<filter>
        # ancestor:<filter>
        # child:<filter>
        # legacy:<filter>
        # not:<filter>
        # (<filter> and <filter>)
        # (<filter> or <filter>)
        <string>
      , - ref: EntryFilter
      ]

  The columns in the report
  option: --columns COLUMNS
  env: SMOS_WORK_COLUMNS COLUMNS
  config:
    work.columns: # or null
      - def: Projection
        # A column (projection) is a string of one of the following forms:
        # 
        # file
        # state
        # header
        # tag:<tag-name>
        # property:<property-name>
        # timestamp:<timestamp-name>
        # ancestor:<projection>
        <string>
  default: OntoFile :| [OntoState,OntoHeader]

  A sorter to sort entries by
  option: --sort SORTER

  A sorter to sort entries by
  option: --sort SORTER

  A sorter to sort entries by
  env: SMOS_WORK_SORTER SORTER
  config:
    work.sorter: # any of
      [ null
      , def: Sorter
        # A sorter is a string of one of the following forms:
        # 
        # file
        # header
        # state
        # tag:<tag>
        # property:<property-name>
        # property-as-time:<property-name>
        # timestamp:<timestamp-name>
        # reverse:<sorter>
        # (<sorter> then <sorter>)
        <string>
      , - ref: Sorter
      ]

  Hide archived files
  switch: --hide-archive

  Do not hide archived files
  switch: --show-archive|-a

  Whether to consider archived entries
  env: SMOS_WORK_IGNORE_ARCHIVE BOOL
  config:
    work.hide-archive: # or null
      <boolean>
  default: HideArchive

  The threshold at which to color waiting entries red
  option: --waiting-threshold TIME
  env: SMOS_WAITING_THRESHOLD TIME
  config:
    waiting.threshold: # or null
      def: Time
      # any of
      [ # Time string, for example:
        #  2s
        #  2 seconds
        #  3m
        #  3 minutes
        #  4h
        #  4 hours
        #  5d
        #  5 days
        #  6w
        #  6 weeks
        #  7mo
        #  7 months
        #  8y
        #  8 years
        <string>
      , # Interpreted as a number of days
        <integer> # 64 bit unsigned integer
      ]
  default: Days 7

  The threshold at which to color stuck projects red
  option: --stuck-threshold TIME
  env: SMOS_STUCK_THRESHOLD TIME
  config:
    stuck.threshold: # or null
      def: Time
      # any of
      [ # Time string, for example:
        #  2s
        #  2 seconds
        #  3m
        #  3 minutes
        #  4h
        #  4 hours
        #  5d
        #  5 days
        #  6w
        #  6 weeks
        #  7mo
        #  7 months
        #  8y
        #  8 years
        <string>
      , # Interpreted as a number of days
        <integer> # 64 bit unsigned integer
      ]
  default: Weeks 3